作业1

3)教科书三本都想读:优先级为《代码大全》、《敏捷开发》、《重构》

4)从第二次作业开始每次都写效能分析的优化和单元测试。

5)思路一:一开始看到这个题目,有一个想法是分规模,比如数组为a[n],当子数组只有1个数时,比较各个子数组的和的大小,一直考虑到子数组有n个数,发现此种算法复杂度为O(n^3),放弃;

    思路二:考虑动态规划解法,对数组a[n],目标函数为b[1,j] = max{sum[j], b[1,j-1]}, j>1; b[1,1] = a[1].

               而sum[j]=max{sum[j-1]+a[j], a[j]}, j>1; sum[1] =a[1]. 很轻松地可以看出来,算法复杂度为O(n).这是两层的动态规划,需要维护两个数组,想了一个晚上才想出来。不过有了目标函数就好办了。

               具体算法如下:

 1 int max(int a[], int n)
 2 {
 3       int max = a[0];
 4       int sum = a[0];
 5       int i;
 6       for(i = 0; i < n; i++){
 7           sum = sum+a[i] > a[i] ? sum+a[i] : a[i];
 8           max = max > sum ? max : sum;
 9       }
10       return max;  
11 }

 

 

posted on 2013-09-22 21:07  mountainking  阅读(144)  评论(0编辑  收藏  举报