我写了一个关于动态规划的函数。
递归公式为
T(n) = T(0) * T(n-1) + T(1) * T(n-2) + … + T(n-1) * T(0)
如您所见, 的值T(n)取决于 的值T(0) … T(n-1)。
在这个问题中,我需要存储T(0) … T(n-1)来计算T(n)。
但哪种数据结构最好?
假设我们已经完成了计算T(0) … T(5)。我们需要计算T(6)
我们可以将 T 存储在以下结构中:
T = [1,1,2,5,14,42,0]
T = {0:1,1:1,2:2,3:5,4:14,5:42,6:0}
我的答案是dict首先,因为获取的时间复杂度T(k)是O(1)。
但是经过测试list和dict。测试结果表明list比 快dict。 为什么???
我n = 1000用来测试程序。
import timeit
def test(n, T):
T[0] = 1
# calculate T[i]
# we need to calculate T[0]-> T[n-1] at first.
for i in range(1,n+1):
for j in range(i):
T[i] += T[j]*T[i-1-j]
return T[n]
# initial list T
T_1 = [0]*1001
# initial dict T
T_2 = {}
for i in range(1001):
T_2[i] = 0
t = timeit.timeit(stmt="test(1000,T_1)",setup="from __main__ import test,T_1;",number=10)
print("store T with list, total time is:",t)
t = timeit.timeit(stmt="test(1000,T_2)",setup="from __main__ import test,T_2;",number=10)
print("store T with dict, total time is:",t)
运行结果如下:
用list存储T,总时间为:6.454328614287078
用dict存储T,总时间为:6.761199993081391
谢谢你的帮助。
慕姐8265434
相关分类