我在Python
中编写了一个动态编程算法,这对于较小的输入似乎是完美的,但是由于递归调用,它会因大输入而超时。我在线阅读article,其中说大多数现代编程语言都不能很好地处理递归,将它们转换为迭代方法更好。
我的算法如下:
def get_val(x,y,g,i,xlast,ylast):
# checks if array over
if(i>(len(x)-1)):
return 0
# else returns the max of the two values
# dist returns the euclidian distance between the two points
# the max condition just decides if it's profitable to move to the
# next x and y coordinate or if it would be better to skip this particular (x, y)
return max(g[i]-dist(x[i],y[i],xlast,ylast) + get_val(x,y,g,i+1,x[i],y[i]),get_val(x,y,g,i+1,xlast,ylast))
我一直在努力改善其表现,但我并不确定我应该采取哪些措施来确保它不会在大量输入上超时。
答案 0 :(得分:1)
编写动态编程算法意味着您已经在处理递归调用,因此您当前的代码还不是动态编程。
您需要确定导致问题的原因,然后提供一个解决方案,以减少内存消耗来计算函数的步骤,这就是存储函数调用结果,以避免对同一个调用进行新的计算。
我不知道您问题的所有细节,但似乎有optimal substructure property。
您将找到有关如何判断您正在处理的问题以及如何解决问题的指南here
答案 1 :(得分:0)