Алгоритм Каргера

Алгори́тм Ка́ргера (англ. Karger's algorithm) — в информатике и теории графов является вероятностным алгоритмом, позволяющим найти минимальный разрез связного графа. Алгоритм изобретен Девидом Каргером и опубликован в 1993 году[1].

Алгоритм Каргера

Граф и два его разреза. Красный разрез пересекает три ребра, а зеленый два. Последний является одним из минимальных разрезов данного графа.
Назван в честь David Karger[d]
Предназначение поиск наименьшего разреза графа
Структура данных граф
Среднее время
Затраты памяти -

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

Описание

Примеры

Основной задачей является поиск узких мест в различных сетях. Примеры:

Алгоритм

Операция стягивания ребра алгоритма Каргера.

Основной операцией алгоритма Каргера является одна из форм стягивания ребра. Для выполнения этой операции на произвольном ребре происходит объединение вершин графа и в одну . Если удаляется вершина , то каждое ребро вида заменяется на ребро вида . Петли удаляются, и после этой операции граф не содержит петель.

Алгоритм представляет собой равновероятный выбор случайного имеющегося ребра и объединение вершин согласно описанной операции. Результатом работы алгоритма является пара вершин, множество рёбер между которыми является разрезом графа. Этот разрез может быть не минимальным, но вероятность того, что этот разрез минимальный существенно больше, чем для случайно выбранного разреза.

Пример успешной работы алгоритма для графа с 10 вершинами. Минимальный разрез равен трём.

Псевдокод

Алгоритм Каргера
повторить n − 2 раза
  выбрать случайно ребро e
  стянуть ребро e
результат число рёбер между двумя последними вершинами

См. также

Примечания

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.