Presentation is loading. Please wait.

Presentation is loading. Please wait.

动态规划(Dynamic Programming)

Similar presentations


Presentation on theme: "动态规划(Dynamic Programming)"— Presentation transcript:

1 动态规划(Dynamic Programming)

2 1. 什么是动态规划?

3 Fibonacci序列 Fibonacci序列被定义如下: F(n) = F(n - 1) + F(n - 2), n≥ 3
问题:如何计算第n个Fibonacci数F(n)?

4 算法1 F(1) = 1 F(2) = 1 F(n) = F(n - 1) + F(n - 2), n≥ 3 F(n)
if (n == 1) return 1; if (n == 2) return F(n - 1) + F(n - 2);

5 算法1的效率 F(n) if (n == 1) return 1; if (n == 2)
return F(n - 1) + F(n - 2);

6 算法1的效率 F(n) if (n == 1) return 1; if (n == 2)
return F(n - 1) + F(n - 2); 目标:计算F(100)。 问题:在计算F(100)的过程中, F(99)被调用(计算)多少次? F(98)被计算多少次? … … F(3)被计算多少次?

7 F(100)的执行过程 … …

8 算法2 F(n) Fib[1] = 1; Fib[2] = 1; for i = 3 to n
Fib[i] = Fib[i – 1] + Fib[i – 2]; return Fib[n]; Fib[1..n]是一维数组, 用Fib[i]来存储F(i)的值。

9 算法1 vs 算法2

10 什么是动态规划? 对于有些问题,解决该问题的过程中需要重复解决该问题的子问题。
动态规划是一种解决此类问题的方法。其核心思想是:“重用子问题的计算结果,避免重复计算”。


Download ppt "动态规划(Dynamic Programming)"

Similar presentations


Ads by Google