- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我正在尝试编写一些 python 代码,让我根据用于达到 1 的 n 个步骤找到 collatz 猜想。
我有一些可以用少量的步骤工作,但是大量的步骤需要很长时间才能计算出来。所以我想知道你们中是否有人知道加快此过程的方法:
def cj(i):
out = []
out.append(i)
while i != 1:
if i%2==0:
i = i/2
out.append(i)
else:
i = i*3+1
out.append(i)
return out
循环遍历所有数字,直到一个数字与我正在寻找的步数相匹配:
def cj_steps(n):
x = 1
while True:
if len(cj(x))-1 == n:
return x
else:
x +=1
正如我所说,这需要少量的步骤,但以 812 步为例,这已经开始需要很多时间了。所以我希望有人能给我一些提示或提示,告诉我如何提高这个功能的速度。
谢谢。
最佳答案
这是给你的一个想法。假设您从 10 计算 collatz 序列:
>>> collatz(10)
[10, 5, 16, 8, 4, 2, 1]
你看到有 6 步回到 1。
假设稍后您正在计算从 12 开始的 collatz 序列。经过四步计算后:
>>> collatz(12)
[12, 6, 3, 10, ...
等一下!!从 12 到 10 需要 3 步。我们已经知道从 10 需要 6 步。所以这已经告诉我们从 12 开始有 6+3 步,而不需要费心再次计算序列。
此外,如果我们在扩展 collatz 序列时再次看到 12,请记住我们现在距离统一有 9 步。
您如何使用这些信息使您的算法更智能?
关于python - 使用python找到使用n步得到一个的collatz猜想,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262496/
有没有一种方法可以在不使用 while 语句的情况下使用列表推导式来验证 Collatz 猜想,或者不使用其他方法将 n 值附加到 ls 而无需在每个语句后添加 ls? from random i
我在循环和声明变量方面遇到了问题。目前我正在制作一个关于 Collatz 猜想的程序,该程序应该检查从一定数量的 Collatz 序列中达到一个的最大步骤是什么。这是我的代码: start_n
我在生成 Terras 数字序列时遇到问题。 这是我失败的尝试: using System; using System.Collections.Generic; using System.Linq;
我正在编写一个递归方法来计算正整数序列的 collatz 猜想。但是,我需要在值小于或等于原始值时停止计算,而不是在值达到 1 时停止计算。我不知道应该在 if 语句中添加什么条件。 int co
我仍在主要为自己(和我的学生)教授一些 R。 这是 Collatz 序列在 R 中的实现: f = 1 def __colla(n): while n > 1:
我是 Mathematica 的新手,正在尝试理解模式和规则。所以我尝试了以下方法: A = {1, 2, 3, 4} 一种//。 {x_?EvenQ -> x/2, x_?OddQ -> 3 x +
我想和一些老东西一起玩 Collatz conjecture并决定以(非常)函数式的风格来做它会很有趣,所以我实现了一个 unfoldr 函数,接近 Haskell has 函数。 : fn unfo
我是一名优秀的程序员,十分优秀!