2016-05-16 50 views
4

所以我想寫一些python代碼,讓我找到基於用於獲得1的n個步驟的collat​​z猜測。
我有一些可以用少量的步驟工作,但是大量的步驟需要很長的時間來計算。所以我想知道如果任何人都知道的方式來加快這一進程:尋找collat​​z猜想,使用n個步驟來獲得一個使用python

def cj_steps(n): 
x = 1 
while True: 
    if len(cj(x))-1 == n: 
     return x 
    else: 
     x +=1 

此:

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 

該循環槽的所有數字,直到一個我找的步驟量相匹配,正如我所說的,只需少量步驟即可完成,但需要採取812步驟,而已經開始耗費大量時間的步驟。所以我希望有人能給我提示或提示如何提高這個功能的速度。

謝謝。

回答

5

這是一個適合您的想法。假設你從10計算在Collat​​z序列:

>>> collatz(10) 
[10, 5, 16, 8, 4, 2, 1] 

你看到有6個步驟返回到1

以後,你,比如說,從12計算在Collat​​z序列後四假設計算步驟:

>>> collatz(12) 
[12, 6, 3, 10, ... 

等一下!從12步到10步需要3個步驟。我們已經知道從10步開始,需要6步。所以這已經告訴我們,從12開始有6 + 3個步驟,而不需要費力地再次計算序列。此外,如果我們在擴展collat​​z序列的同時再次看到12,可以記住我們現在距離統一的9個步驟。

如何使用這些信息使算法變得更加智能?

+0

當然,這個想法使用了大量的內存,所以它是一個使用更多內存來使用更少時間的典型例子。即使如此,這確實回答了OP,所以+1! –

相關問題