【发布时间】:2021-06-17 13:25:52
【问题描述】:
我有两个字符串 X1 和 X2
和一个lambda_ 参数,我想使用以下代码通过递归两个字符串的大小来计算一个函数:
def Bk_function(X1,X2,lambda_,k):
#lambda=0.01
#k=5
if k==0:
return 1
if min(len(X1),len(X2))<k:
return 0
else:
return (lambda_*Bk_function(X1[:-1],X2,lambda_,k) + lambda_*Bk_function(X1,X2[:-1],lambda_,k)
+ lambda_**2*(-Bk_function(X1[:-1],X2[:-1],lambda_,k) + (X1==X2)*Bk_function(X1[:-1],X2[:-1],lambda_,k-1)))
尽管如此,由于计算时间太重要了,我打算使用以下代码进行记忆步骤:
def Bk_function(X1,X2,lambda_,k):
if not (bool(memo.get(k))):
if k==0:
memo[k] = 1
if min(len(X1),len(X2))<k:
memo[k] = 0
else:
memo[k] = (lambda_*Bk_function(X1[:-1],X2,lambda_,k) + lambda_*Bk_function(X1,X2[:-1],lambda_,k)
+ lambda_**2*(-Bk_function(X1[:-1],X2[:-1],lambda_,k) + (X1==X2)*Bk_function(X1[:-1],X2[:-1],lambda_,k-1)))
return memo[k]
即我们将已经在关联数组/字典中计算的值保存在内存中。但是我不知道是应该将memo字典定义为全局变量,还是将其作为参数传递给函数Bk_function(X1,X2,lambda_,k, memo={})或者在程序开头写memo={}。谢谢!
【问题讨论】:
标签: python string dictionary recursion memoization