Максимальная проблема подрешетки сложная перебор - PullRequest
0 голосов
/ 13 апреля 2011

Какова сложность времени выполнения / памяти для задачи Максимум подмассива с использованием грубой силы?

Можно ли их оптимизировать больше?Особенно сложность памяти?

Спасибо,

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Грубая сила - Омега (n ^ 2). Используя Разделяй и властвуй, вы можете делать это со сложностью Theta (n lg n). Более подробная информация доступна во многих книгах, таких как Введение в алгоритмы , или в различных ресурсах в Интернете, таких как эта лекция .

0 голосов
/ 21 мая 2019

Как предлагается в этом ответе , вы можете использовать алгоритм Кадане, который имеет сложность O (n). Реализация на 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);
    }
...