В информатике задача максимального подмассива — это задача найти непрерывный подмассив в одномерном массиве чисел (содержащем хотя бы одно положительное число), который имеет наибольшую сумму.
Алгоритм Кадане - это метод поиска решения вышеуказанной проблемы.
Простая идея алгоритма Кадане состоит в том, чтобы искать все положительные непрерывные сегменты массива (скажем, max_ending_here). И отслеживайте максимальный суммарный непрерывный сегмент среди всех положительных сегментов (скажем, max_so_far). Каждый раз, когда мы получаем положительную сумму, сравниваем ее с max_so_far и обновляем max_so_far, если она больше, чем max_so_far.
Алгоритм не работает для всех отрицательных чисел. Он просто возвращает 0, если все числа отрицательные. Для обработки этого мы можем добавить дополнительную фазу перед фактической реализацией. Фаза будет выглядеть, если все числа отрицательные, если они есть, она вернет максимальное из них (или наименьшее по абсолютному значению)
То, что вы опубликовали, является реализацией в случае, когда все числа в массиве отрицательны. Это не относится к фактическому алгоритму, а просто к дополнительной фазе. Алгоритм Кадане для массива 1D:
this is the general algorithm.
Initialize:
max_so_far = 0
max_ending_here = 0
Loop for each element of the array
(a) max_ending_here = max_ending_here + a[i]
(b) if(max_ending_here < 0)
max_ending_here = 0
(c) if(max_so_far < max_ending_here)
max_so_far = max_ending_here
return max_so_far
надеюсь, что это объяснение будет полезным для вас.
person
myk.
schedule
16.10.2013