Алгоритм Кадане – II: изучение вариантов и примеры кода

Алгоритм Кадане — популярный метод поиска максимальной суммы непрерывного подмассива в заданном массиве. В этой статье блога мы рассмотрим различные варианты алгоритма Кадане и предоставим примеры кода для каждого варианта.

  1. Базовый алгоритм Кадане:
    Базовая версия алгоритма Кадане вычисляет максимальную сумму подмассива, используя один проход по массиву. Вот код на Python:
def kadane_algorithm(arr):
    max_sum = float('-inf')
    current_sum = 0
    for num in arr:
        current_sum = max(num, current_sum + num)
        max_sum = max(max_sum, current_sum)
    return max_sum
  1. Алгоритм Кадане с индексами:
    Иногда полезно знать начальный и конечный индексы максимального подмассива. Вот модифицированная версия алгоритма Кадане, которая также отслеживает индексы:
def kadane_algorithm_with_indices(arr):
    max_sum = float('-inf')
    current_sum = 0
    start = 0
    end = 0
    temp_start = 0
    for i in range(len(arr)):
        if current_sum <= 0:
            current_sum = arr[i]
            temp_start = i
        else:
            current_sum += arr[i]
        if current_sum > max_sum:
            max_sum = current_sum
            start = temp_start
            end = i
    return max_sum, start, end
  1. Алгоритм Кадане для круговых подмассивов:
    В некоторых случаях нам может потребоваться также рассмотреть круговые подмассивы. Алгоритм Кадане можно изменить, чтобы справиться с этой ситуацией, учитывая как максимальную сумму подмассива, так и минимальную сумму подмассива. Вот код:
def kadane_algorithm_circular(arr):
    max_sum = kadane_algorithm(arr)
    total_sum = sum(arr)
    arr_negated = [-x for x in arr]
    min_sum = kadane_algorithm(arr_negated)
    circular_max_sum = total_sum + min_sum
    return max(max_sum, circular_max_sum)

Алгоритм Кадане — мощный инструмент для эффективного нахождения максимальной суммы подмассива. В этой статье мы рассмотрели различные варианты алгоритма Кадане, включая базовую версию, версию с индексами и версию для круговых подмассивов. Понимая эти варианты и их реализацию, вы сможете применить алгоритм Кадане к широкому спектру проблемных сценариев.

Не забудьте проанализировать возникшую проблему и выбрать подходящую версию алгоритма Кадане, исходя из конкретных требований. Наслаждайтесь исследованием и оптимизацией вычислений суммы подмассивов с помощью алгоритма Кадане!