通过转换为迭代

时间:2017-12-08 19:37:20

标签: python algorithm recursion iteration dynamic-programming

我在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))

我一直在努力改善其表现,但我并不确定我应该采取哪些措施来确保它不会在大量输入上超时。

2 个答案:

答案 0 :(得分:1)

编写动态编程算法意味着您已经在处理递归调用,因此您当前的代码还不是动态编程。

您需要确定导致问题的原因,然后提供一个解决方案,以减少内存消耗来计算函数的步骤,这就是存储函数调用结果,以避免对同一个调用进行新的计算。

我不知道您问题的所有细节,但似乎有optimal substructure property

您将找到有关如何判断您正在处理的问题以及如何解决问题的指南here

答案 1 :(得分:0)

如果我弄清楚你想要完成什么,你可以使用发电机进入下一步。请参阅这些生成器技巧:

http://linuxgazette.net/100/pramode.html

或访问

https://wiki.python.org/moin/Generators