Эффективный алгоритм для мин вырезать с указанным количеством вершин

cs.stackexchange https://cs.stackexchange.com/questions/129647

Вопрос

Рассмотрим график с вершинами $ v $ и ребра $ E $ . Стандартная версия проблемы с разрезами MIN состоит в том, чтобы найти раздел $ V $ в (непустое) подмножество $ C $ и его дополнение $ \ bar {c} $ Для того чтобы минимизировать количество ребер, идущих между $ C $ и $ \ bar {c} $ . Для этой проблемы известны алгоритмы, которые решают ее в полиноме. Мой вопрос, что, если он дополнительно указывает ограничение, что $ | C |= n $ Для некоторых $ n <| v | $ ? То есть мы хотим найти набор $ n $ вершин с минимальным количеством ребер, соединяющих его до остальных вершин. Есть также эффективные алгоритмы для этого случая? Я заинтересован как в вопросе о том, формально ли эта проблема формально разрешима в многочленом времени (что я догадаю, что она есть), а также в каких алгоритмах лучше всего на практике.

Это было полезно?

Решение

для $ n=frac {| v |} 2 $ , это называется минимальным переживлением, а это NP-Hard. Существует $ O (\ log ^ {3/2} n) $ - предприцеление: « Полилогаритная аппроксимация минимального переживания ».

Если вы заинтересованы, тем более общей проблемой разделяется на несколько компонентов того же размера, и она называется разбиением сбалансированного графика. Для более чем 2 частей нет конечного приближения не существует, если P= NP: "Сбалансированный график разделения" (Андреев, Ракке) , поскольку вы не можете эффективно проверять, будет ли ответ 0.

Если детали не обязательно точно сбалансированы (допускается небольшой дисбаланс), в алгоритме «\ log n) $ допускается)="https://hal.Чархивы-ouvertes.fr/hal-00678179/document" rel="nofollow noreferrer"> «Сбалансированные разделы деревьев и приложений» .


Некоторые алгоритмы (также проверьте https://en.wikipedia.org/wiki/graph_partition И «Ссылки» разделы следующих документов):

    .
  • Местный поиск с различными ароматами: мы начинаем с некоторых разбиений, а затем попытайтесь поменять вершины между частями, чтобы минимизировать разрез. Например. Мы вычисляем «усиление» для каждой вершины (улучшение, если мы переместим его в другую часть), и свомите вершины с максимальным усилением. Его преимущество в том, что вы можете применить его после любого другого алгоритма.

  • спектральная разбивка (см. Например, Теория спектральной граф и график Разделение ): использует второй собственник лаплацской матрицы для приближения разбиения (например, перемещение наименьшего $ | V | / 2 $ координаты первого часть). Работает удивительно хорошо. Однако я не уверен, что он может быть адаптирован к случаю, когда вы хотите несбалансированное переживление (например, $ 1: 2 $ вместо $ 1: 1 $ ).

  • Линейное вложение: "Распределенные сбалансированные разбиения через линейную встраивание" . Мы встроили вершины в одномерный массив при минимизации суммы по всем парам вершин: расстояние между ними, умноженной на вес их края. Тогда мы просто разделили этот массив в последовательные куски необходимых размеров. Не работал так хорошо в моем опыте.

  • (ads) Наша статья: "Многомерный сбалансированный график Разделение через Прогнозируемый градиентный спуск «, где мы использовали градиентный спуск, чтобы найти минимальное переживание: для каждой вершины мы вводим переменную, которая примерно представляет вероятность того, что вершина принадлежит к первой части, и минимизация вырезания уменьшается, чтобы ограничить оптимизацию Квадратичная функция. Это немного превосходит на практике тонкой настраиваемой местным поиском, но он работает очень хорошо, когда у вас есть несколько балансов.

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

Есть также стандартные растворители: Kahip , Metis . По моему опыту, Kahip был довольно хорошим. Я не уверен, что они поддерживают расщепление на части произвольных размеров, хотя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top