使用动态编程的大多数二项式系数计算实现都使用了二维数组,如下例所示: http://www.csl.mtu.edu/cs4321/www/Lectures/Lecture%2015%20-%20Dynamic%20Programming%20Binomial%20Coefficients.htm
http://www.geeksforgeeks.org/dynamic-programming-set-9-binomial-coefficient/
我的问题是,为什么不使用像这样的单维数组来计算它:
def C(n, r):
memo = list()
if (r > int(n/2)):
r = n - r
memo.append(1.0)
for i in range(1,r+1):
now = ((n-i+1)*memo[i-1])/i
memo.append(now)
return memo[r]
基本上使用递归公式: C(n,r)=((n-r + 1)/ r)* C(n,r-1)
这具有O(r)复杂度,而二维逻辑具有O(nr)复杂度。
我在这里错过了什么吗?
答案 0 :(得分:2)
如果你想要所有的值,那么2D逻辑肯定更有效率。对于某些硬件上的某些参数,2D逻辑可能更有效,例如,缺少硬件乘法和除法。在分割前乘法时必须注意整数溢出,而2D重现中的整数加法总是很好。除此之外,不,1D复发更好。