Алгоритм Каргерса - Википедия - Kargers algorithm

График и два его разреза. Пунктирная линия красного цвета - разрез с тремя пересекающимися краями. Пунктирная линия зеленого цвета - это минимальный разрез этого графа, пересекающий только два ребра.

В Информатика и теория графов, Алгоритм Каргера это рандомизированный алгоритм вычислить минимальный разрез связанного график. Это было изобретено Дэвид Каргер и впервые опубликовано в 1993 году.[1]

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

Проблема глобального минимума сокращения

А резать в неориентированном графе является разбиением вершин на два непустых непересекающихся множества . В Cutset реза состоит из краев между двумя частями. размер (или же масса) разреза в невзвешенном графе - это мощность разреза, то есть количество ребер между двумя частями,

Есть способы выбора для каждой вершины, принадлежит ли она или чтобы , но два из этих вариантов делают или же пустые и не вызывают порезов. Среди оставшихся вариантов - поменять ролями и не меняет разрез, поэтому каждый разрез учитывается дважды; поэтому есть отчетливые разрезы. минимальная проблема среза - найти среди этих разрезов разрез наименьшего размера.

Для взвешенных графов с положительным весом ребер вес разреза - это сумма весов ребер между вершинами в каждой части

что согласуется с невзвешенным определением для .

Разрез иногда называют «глобальным разрезом», чтобы отличать его от «- вырезать »для данной пары вершин, что имеет дополнительное требование, чтобы и . Каждый глобальный разрез - это - вырезать для некоторых . Таким образом, задача минимального разреза может быть решена за полиномиальное время путем перебора всех вариантов и решая полученный минимум - решить проблему с помощью теорема о максимальном потоке и минимальном отсечении и алгоритм полиномиального времени для максимальный поток, такой как алгоритм push-relabel, хотя такой подход не оптимален. Лучшие детерминированные алгоритмы для задачи глобального минимума разреза включают Алгоритм Стоера – Вагнера, который имеет время работы .[2]

Алгоритм сокращения

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

Отмеченное ребро стягивается в единый узел.

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

Успешный запуск алгоритма Каргера на 10-вершинном графе. Минимальный крой имеет размер 3.
   процедура договор():   пока        выберите  равномерно случайно    возвращаться единственный врезанный 

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

Случайный выбор ребер в алгоритме Каргера соответствует выполнению алгоритма Крускала на графе со случайными рангами ребер, пока не останется только два компонента.

Наиболее известные реализации используют время и пространство, или время и пространство соответственно.[1]

Вероятность успеха алгоритма сокращения

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

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

Чтобы установить оценку вероятности успеха в целом, пусть обозначают края определенного минимального размера разреза . Алгоритм сжатия возвращает если ни одно из случайных ребер не принадлежит сечению . В частности, сокращение первого края позволяет избежать , что происходит с вероятностью . Минимальная степень по крайней мере (иначе вершина минимальной степени вызовет меньший разрез), поэтому . Таким образом, вероятность того, что алгоритм сжатия выберет ребро из является

Вероятность что алгоритм сжатия на -вершинный граф избегает удовлетворяет повторение , с , который может быть расширен как

Повторение алгоритма сокращения

10 повторов схватки. 5-й повтор находит минимальный разрез размера 3.

Повторяя алгоритм сжатия раз с независимым случайным выбором и возвращением наименьшего разреза, вероятность не найти минимальный разрез составляет

Общее время работы для повторений для графика с вершины и края .

Алгоритм Каргера – Стейна

Расширение алгоритма Каргера за счет Дэвид Каргер и Клиффорд Штайн достигает улучшения на порядок.[4]

Основная идея состоит в том, чтобы выполнять процедуру сжатия, пока график не достигнет вершины.

   процедура договор(, ):   пока        выберите  равномерно случайно    возвращаться 

Вероятность что эта процедура сокращения позволяет избежать определенного разреза в -вершинный граф

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

   процедура fastmincut ():   если :       возвращаться mincut ()   еще:               договор(, )        договор(, )       возвращаться мин {fastmincut (), fastmincut ()}

Анализ

Вероятность алгоритм находит конкретное сечение задается рекуррентным соотношением

с раствором . Время работы fastmincut удовлетворяет

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

Граница улучшения

Чтобы определить минимальный разрез, нужно коснуться каждого ребра в графе хотя бы один раз, т.е. время в плотный граф. Алгоритм min-cut Каргера – Стейна занимает время выполнения , что очень близко к этому.

Рекомендации

  1. ^ а б Каргер, Дэвид (1993). «Глобальные минимальные сокращения в RNC и другие разветвления простого алгоритма сокращения». Proc. 4-й ежегодный симпозиум ACM-SIAM по дискретным алгоритмам.
  2. ^ Stoer, M .; Вагнер, Ф. (1997). «Простой алгоритм min-cut». Журнал ACM. 44 (4): 585. Дои:10.1145/263867.263872.
  3. ^ Патриньяни, Маурицио; Пиццония, Маурицио (2001), «Сложность проблемы сопоставления и сокращения», в Брандштадт, Андреас; Ле, Ван Банг (ред.), Теоретико-графические концепции в компьютерных науках: 27-й международный семинар, WG 2001, Больтенхаген, Германия, 14-16 июня 2001 г., Труды, Конспект лекций по информатике, 2204, Берлин: Springer, стр. 284–295, Дои:10.1007/3-540-45477-2_26, МИСТЕР  1905640.
  4. ^ Каргер, Дэвид Р.; Штейн, Клиффорд (1996). «Новый подход к проблеме минимального сокращения» (PDF). Журнал ACM. 43 (4): 601. Дои:10.1145/234533.234534.