数学基础:
定义:
如果只是小量输入的情况,那么花费大量时间去努力设计聪明的算法恐怕并不值得。因此,好的算法应该是因地制宜的,不能盲目。
算法分析的基本策略是从内部(或最深层部分)向外展开的。
正常的用递归解法求解Fib的算法之所以缓慢,是因为有大量的多余的工作量,重复计算较多,可以通过保留一个简单的数组并使用一个for循环将运行时间降下来。
接下来,我们比较四种不同的求解最大子序列和问题的算法。
算法1。
public static int maxSubSum1(int[] a){
int maxSum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
int thisSum = 0;
for (int k = i; k<= j; k++) {
thisSum+=a[k];
}
if(thisSum>maxSum){
maxSum = thisSum;
}
}
}
return maxSum;
}
//该算法的思想比较直接。i从0到length,j从i到length,再用k(位于i与j之间)将i与j之间的sum计算出来。这样取最大的sum即为所求。
时间复杂度为N的3次方。
算法2.
public