多语言展示
当前在线:491今日阅读:26今日分享:39

重叠子问题的解决方法

动态规划将原来具有指数级复杂度的搜索算法改进成了具有多项式时间的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。
工具/原料
1

eclipse-luna

2

win732bit and jdk1.7

方法/步骤
1

说明:       在动态规划中,子问题解决方案被存储在一个表中,以便这些不必重新计算。 因此,如果这个问题是没有共同的(重叠)子问题, 动态规划是没有用的。例如,二分查找不具有共同的子问题。

2

记忆表法:自上而下

4

测试main:

5

运行结果比较:

6

完整可运行程序:/* * 这一部分程序主要是用来测试记忆化存储和*/////记忆表从上而下public class MemoryAndTable { static int MAX=20; static int[] lookUp=new int[MAX];// public void initMemory(){// int i;// lookUp[MAX]=(Integer) null;// } public static int fibMemory(int n){ if(lookUp[n]==0){ if(n<=1){ lookUp[n]=n; } else{ lookUp[n]=fibMemory(n-1)+fibMemory(n-2); } } return lookUp[n]; } ////打表(自下而上) public static int fibTable(int n){ int[] f = new int[n+1]; int i; f[0] = 0;    f[1] = 1; for(i=2;i<=n;i++){ f[i]=f[i-1]+f[i-2]; } return f[n]; } public static void main(String[] args) { int n=5; System.out.println(fibMemory(9)); System.out.println();// int res=0;// res=fibTable(9); System.out.println(fibTable(9)); }}

注意事项
1

深层次理解动态规划

2

记得投票支持奥 !

推荐信息