最大子序列和问题的算法的改进及复杂度分析

最大子序列和的问题

算法1 O(N^3)

(本算法并不计算实际的子序列,实际的计算还要添加一些额外的代码,这里只研究复杂度)

 1     public static int maxSubSum1(int[] a){//O(N^3)
 2         int maxSum = 0;
 3 
 4         for (int i = 0; i < a.length; i++) {
 5             for (int j = 0; j < a.length; j++) {
 6                 int thisSum = 0;//O(1)
 7 
 8                 for (int k = i; k <= j; k++) {
 9                     thisSum += a[k];
10                 }
11                 if (thisSum > maxSum){  //O(N^2)
12                     maxSum = thisSum; 
13                 }
14 
15             }
16         }
17         return maxSum;
18     }

我们可以通过撤除一个for循环来避免三次的运行时间

算法二:复杂度O(N^2)

 

    public static int maxSubSum1(int[] a) {//O(N^2)
        int maxSum = 0;

        for (int i = 0; i < a.length; i++) {
            int thisSum = 0;//O(1)
            for (int j = 0; j < a.length; j++) {

                thisSum += a[j];

                if (thisSum > maxSum) {  //O(N)
                    maxSum = thisSum;
                }
            }
        }
        return maxSum;
    }

算法1中第8/9行上的计算过分地耗费了。

posted @ 2022-02-22 00:00  Fancy[love]  阅读(27)  评论(0编辑  收藏  举报