最大子阵列问题暴力复杂性

时间:2011-04-13 13:07:09

标签: algorithm complexity-theory brute-force

Maximum subarray problem使用蛮力的运行时/内存复杂度是多少?

他们可以更优化吗?特别是内存的复杂性?

谢谢,

2 个答案:

答案 0 :(得分:1)

蛮力是欧米茄(n ^ 2)。使用Divide和conquer可以使用Theta(n lg n)复杂度来实现。许多书籍中都提供了更多详细信息,例如Introduction to Algorithms或网络上的各种资源,例如this lecture

答案 1 :(得分:0)

如本answer中的建议,您可以使用具有O(n)复杂度的Kadane算法。 Java实现:

public int[] kadanesAlgorithm (int[] array) {
        int start_old = 0;
        int start = 0;
        int end = 0;
        int found_max = 0;

        int max = array[0];

        for(int i = 0; i<array.length; i++) {
            max = Math.max(array[i], max + array[i]);
            found_max = Math.max(found_max, max);
            if(max < 0)
                start = i+1;
            else if(max == found_max) {
                start_old=start;
                end = i;
                }
        }

        return Arrays.copyOfRange(array, start_old, end+1);
    }