20151201动态规划设计.docxVIP

  • 3
  • 0
  • 约2.34万字
  • 约 29页
  • 2018-07-07 发布于上海
  • 举报
第3章 动态规划如果问题是由重叠的子问题所构成的,就可以用动态规划技术来解决。一般来说,这样的子问题出现在对给定问题求解的递推关系中,这个递推关系包含了相同类型的更小子问题的解。动态规划建议,与其对重叠的子问题一次又一次地求解,还不如对每个较小的子问题只求一次并把结果记录在表中,这样就可以从表中得到原始问题的解。3.1 Fibonacci数列问题求Fibonacci数列的第n项。f(n) = f(n-1) + f(n-2)f(1) = 1, f(2) = 1(1) 直接递归法,此法会大量重复计算子问题的结果int Fib(int n) { if(n==1 || n==2) return 1; return Fib(n-1) + Fib(n-2);}(2) 动态规划方法,使用数组存储每个子问题的结果int f[100];int Fib(int n) { f[1] = f[2] = 1; for(int i = 3; i = n; i++) f[i] = f[i-1] + f[i-2]; return f[n];}(3) 改进,只存储最后2个元素的值,避免使用数组int Fib(int n) { int f,f1,f2; f1 = f2 = 1; for(int i=3; i=n; i++) { f = f1 + f2; f1 = f2; f2 = f; } return f;}(

文档评论(0)

1亿VIP精品文档

相关文档