我被卡在算法優化中。找到從板的一個角落到另一個沒有回溯的多條獨特路徑
的目標是找到你多少種方式可以使用從A點到B點的棋盤,其中:
- A是左下角廣場。
- B是右上角的正方形。
- 每一圈只能走一個或一個右轉。
這裏是一個虛擬的解決方案:
# -*- conding: utf-8 -*-
import time
def solution(n, m, x, y):
ret = 0
if x < n-1:
ret += solution(n, m, x+1, y)
if y < m-1:
ret += solution(n, m, x, y+1)
if x == n-1 and y == m-1:
ret = 1
return ret
def wrapper(n, m):
start = time.time()
reponse = solution(n, m, 0, 0)
stop = time.time()
print "Response: %dx%d = %d\nTime : %f\n" % (n, m, reponse, stop-start)
if __name__ == "__main__":
for i in range(10):
wrapper(i+1,i+1)
#wrapper(7,7)
#wrapper(10,10)
#wrapper(100,100)
#wrapper(1000,1000)
#wrapper(10000,10000) <- way too slow
雖然我留在小棋盤,它工作正常,結果是相關的。但我的目標是找到一個10000x10000電路板的解決方案。
Anyboy有沒有想法?
作業?試過了什麼? – 2013-03-16 16:02:00
另外,請確保在記錄時間之前運行一次定時代碼的每個部分。您需要讓您的系統用該代碼「預熱」,否則您的第一次執行可能會有不正確的測量結果。 – BlackVegetable 2013-03-16 16:03:42
不是功課。我還嘗試了一種非遞歸算法,它在步驟X填充所有可能的解決方案的數組,並在數組填充B解決方案時停止,但它消耗太多CPU和內存(即使它不堆棧溢出太多的遞歸)。 – 2013-03-16 16:04:59