被dynamic programming震慑到了

来源:互联网 发布:大数据分析就业前景 编辑:程序博客网 时间:2024/06/10 06:10

当年学习算法的时候 也没认真去实践dynamic programming. 今日一试,被震慑了. 不废话, 上代码, 比performance.

 

为了防止桟溢出, 试了个fib 50

结果 naive 跑了40s, 而dynamic的只用0.2s.

 

分析:

Wiki上讲dynamic programming applicable的条件有两:

(1) optimal substructure

(2) overlapping subproblems (Fib就是个完美的例子涅)

 

naive算法:

Fib(n) : 被call 1次

Fib(n-1): 2

Fib(n-2): 3

....

Fib(2): Fib(n-1)

Fib(1): Fib(n)

So 总共递归调用了 Fib(1)+Fib(2)+...+Fib(n)次Fib 方法

 

而dynamic的却是linear的... 强大!

 

原创粉丝点击