Алгоритм Max-Cut, который не должен работать, непонятно почему

21

ОК, это может показаться домашним заданием, и в некотором смысле это так. В качестве домашнего задания в классе алгоритмов для студентов я дал следующую классику:

Для заданного неориентированного графа приведем алгоритм, который находит разрез такой, что , где - количество ребер, пересекающих разрез. Временная сложность должна быть .G=(V,E)(S,S¯)δ(S,S¯)|E|/2δ(S,S¯)O(V+E)

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

  1. УстановитьS
  2. Пусть - вершина максимальной степени в графеv
  3. Добавить кvS
  4. Удалить все ребра, смежные сv
  5. Если вернитесь к 2δ(S,S¯)<|E|/2

Обратите внимание, что на шаге 5 относится к исходному графику. Также обратите внимание, что если бы мы пропустили шаг 4, это, очевидно, было бы неправильно (например, объединение треугольника с двумя изолированными ребрами).E

Теперь любое простое доказательство имеет следующую проблему - возможно, когда мы добавляем новую вершину мы фактически удаляемребра из разреза при добавлении новых ребер (где относится к графу с удаленными ребрами). Дело в том, что если это наносит ущерб нашей причине, это означает, что эта вершина «имела» когда-либо более высокую степень, поэтому она «должна была» быть выбрана ранее.v|S|d(v)d(v)v

Это хорошо известные алгоритмы? Есть ли простой контрпример для этого?

Йонатан
источник
2
Это похоже на 2-приближение для покрытия вершин. Я думаю, что правильный жадный алгоритм выберет вершину с большим количеством соседей в той части, в которой она находится, в другой части и переместит ее, пока такой вершины не будет, и нетрудно показать, что в этот момент ответ по крайней мере . Но правильность этого алгоритма зависит от того, что: мы смотрим на разницу между количеством соседей для вершины в двух сторонах разреза, а не только в максимальной степени. Также корректные алгоритм перемещает вершины в обоих направлениях, а не только от в . ˉ S S|E|/2S¯S
Каве
3
@Kaveh Я думаю, что OP знает алгоритм, который вы описываете (он назначил его в качестве домашней работы). Его вопрос состоит в том, достигает ли алгоритм, который он описывает, какое-либо приближение.
Сашо Николов
2
@ MohammadAl-Turkistany см. Комментарий Николова.
VB Le
1
Также обратите внимание, что приближение 16/17 является NP-сложным, а не 1/2. GW дают ~ 0,878 приближения, используя SDP в своей оригинальной статье.
Йонатан
1
@Yonatan Посмотрите этот вопрос cstheory.stackexchange.com/questions/3846/…
Мохаммад Аль-Тюркистани

Ответы:

13

Мое раннее утверждение не учитывало сокращение размера уже присутствующее в графе. Следующая конструкция, кажется, приводит (опытным образом - я создал вопрос на math.stackexchange.com для строгого доказательства) во фракции . н2/4O(12c+6n2/4O(1logc)

Алгоритм плохо работает на объединениях нескольких разрозненных полных графов разного размера. Обозначим полный граф на вершинах через . Рассмотрим поведение алгоритма на : он многократно добавляет произвольную вершину, еще не входящую в в - все такие вершины идентичны, поэтому порядок не имеет значения. Установка количества вершин, еще не добавленных в по алгоритму , размер разреза в этот момент равен .K n K n S S S | ˉ S | = k k ( n - k )nKnKnSSS|S¯|=kk(nk)

Рассмотрим, что произойдет, если мы запустим алгоритм на нескольких несвязанных графах с константами от 0 до 1. Если - это количество элементов, которых еще нет в в м полном графе, то алгоритм будет многократно добавлять вершина из полного графа с наибольшим , произвольно разрывая связи. Это будет вызывать «круглые» добавления вершин в : алгоритм добавляет вершину из всех полных графов с наибольшим , затем из всех полных графов с (с x i k i S i S k i S k = k i k i = k - 1 k i SKxinxikiSiSkiSk=kiki=k1kiобновляется после предыдущего тура) и тд. Как только у полного графа есть вершина, добавленная к в раунде, он будет делать это для каждого раунда с тех пор.S

Пусть будет количеством полных графов. Пусть с будет модификатором размера для полного графа. Мы заказываем эти модификаторы размера от большого к маленькому и устанавливаем . Теперь у нас есть то, что если есть графы с точно элементами, еще не добавленными к , то размер разреза в это время будет . Общее количество ребер равно .0 < x i1 0 i c - 1 i x 0 = 1 c k S c - 1 i = 0 k ( x i n - k ) = k n c - 1 i = 0 ( x i ) - c k 2 | Еc0<xi10ic1ix0=1ckSi=0c1k(xink)=kni=0c1(xi)ck2|E|=i=0c1xin(xin1)2n22i=0c1xi2

Обратите внимание, что является квадратичной функцией в и, следовательно, имеет максимум. Поэтому у нас будет несколько локально максимальных разрезов. Например, если наш максимальный разрез равен размера . Мы выберем так, чтобы , что означает, что второй полный граф не изменит размер этого локально максимального разреза при . Затем мы получаем новый локально максимальный срез при и выбираем (с k c = 1 k = nkni=0c1xick2kc=1 n2k=n2 х1х1=1/2-εк=пn24x1x1=1/2ε к=3/8п-ε'х2=3/8п-ε"k=n2k=3/8nεx2=3/8nε ε х 1 = 1 / 2 х 1 п = пε,ε,εмалые константы). Мы будем игнорировать ей на тот момент , и просто предположим , что мы можем выбрать - мы должны обеспечить , но это не повлияет на конечные результаты , если является достаточно большой.εx1=1/2нx1n=n21n

Мы хотим найти локальные максимумы наших разрезов. Мы дифференцируем к , что дает . Приравнивание к дает , что дает сокращение размера . k n c - 1 ikni=0c1(xi)ck2k0k=nni=0c1(xi)2ck0n 2k=n2ci=0c1xin24c(i=0c1xi)2

Пусть будет определенным в предыдущем абзаце, если . Мы обеспечим выполнение формулы, потребовав, чтобы - все полные графы с были бы тогда меньше этого локально максимального среза и, следовательно, не увеличивали размер среза. Это означает , что мы имеем надрезы на этих , которые больше , чем все другие сокращения найдены с помощью алгоритма. кkikx i n < k i i i > i k i c k ic=ixin<kiii>ikicki

Заполнив , мы получим повторение (плюс небольшой ) с . Решение этой проблемы дает : см. Мой вопрос на math.stackexchange.com для получения @Daniel Fisher. Подсоединение этого к и использование нашего понимания повторения дает нам сокращения размера . Используя свойства этого центрального биномиального коэффициента , мы имеемx i = 1xin<kiεx0=1xi=12ci=0c1xiεx0=1 н2xi=(2ii)4in2n24c(i=0c1xi)2limcn24c(2c(2cc)4c)2=n2c((2cc)4c)2limcc((2cc)4c)2=1π (также см. мой вопрос на math.stackexchange.com ).

Число ребер приблизительно равно . По известным свойствам имеем . Сдача дает как минимум который асимптотически когда переходит к бесконечность.1n22i=0c1xi2=n22i=0c1((2ii)4i)2 н214i(2ii)4i п2n22i=0c1(14i)2=n28i=0c11icn28logcc

Поэтому мы имеем асимптотически равным как уходит в бесконечность, показывая, что алгоритм может возвратные срезы с произвольно малыми долями,8δ(S,S¯)|E| c| E|8πlogcc|E|

Алекс тен Бринк
источник
3
С небольшой модификацией ваша конструкция дает . Исправление и выбрал достаточно большое . Пусть . Соедините каждые две вершины в ребром; затем дополнительно соединяем каждые две вершины в wp . Общее число ребер приблизительно равно . Алгоритм находит разрез, который разрезает приблизительно ребра (до членов более низкого порядка в ). ε N V = { 1 , ... , N } { 1 , ... , ε N } V ε 2 ( е п ) 2 / 2 + ε 2( п 2 / 2 ) = ε 2 н 2 ε 2 н 2 / 4 ε1/4εNV={1,,N}{1,,εN}Vε2(εn)2/2+ε2(n2/2)=ε2n2ε2n2/4ε
Юрий
Я думаю, что скоро перепишу свой ответ, чтобы просто включить окончательные результаты (с более подробной информацией), так как сейчас это немного беспорядок.
Алекс тен Бринк
1
Относительно суммы , поскольку каждый член равен , сумма представляет собой гармонический ряд, который суммирует с , и в итоге получаем , Θ(1/(i+1))Θ(logc)Θ(n2logn22i=0c1((2ii)4i)2Θ(1/(i+1))Θ(logc)Θ(n2logc)
Юваль Фильмус
12

После некоторого размышления и расспросов, вот контрпример, любезно предоставленный Ами Пасом :

Пусть - четное число, а - граф, представляющий собой объединение с соответствием вершин (то есть совпадение с ребрами).GnG n + 2Knn+2n/2+1

Как работает алгоритм на этом графике? Он просто берет вершины из части клики в произвольном порядке. После взятия вершин из клики, срез имеет размер . Это максимально для , что дает срез размера , тогда как число ребер в графе равно .k (kk = nk(nk)n 2k=n/2 n2n24n22+1

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

Йонатан
источник
1
Хороший контрпример.
Каве
это все еще очень близко к . было бы неплохо увидеть пример, где алгоритм работает хуже|E|/2
Сашо Николов