ОК, это может показаться домашним заданием, и в некотором смысле это так. В качестве домашнего задания в классе алгоритмов для студентов я дал следующую классику:
Для заданного неориентированного графа приведем алгоритм, который находит разрез такой, что , где - количество ребер, пересекающих разрез. Временная сложность должна быть .
По какой-то причине я получил много следующего решения. Теперь это занимает слишком много времени, так что это не вопрос оценки, но мне стало любопытно. Это не «кажется» правильным, но все мои попытки контрпримеров потерпели неудачу. Вот:
- Установить
- Пусть - вершина максимальной степени в графе
- Добавить к
- Удалить все ребра, смежные с
- Если вернитесь к 2
Обратите внимание, что на шаге 5 относится к исходному графику. Также обратите внимание, что если бы мы пропустили шаг 4, это, очевидно, было бы неправильно (например, объединение треугольника с двумя изолированными ребрами).
Теперь любое простое доказательство имеет следующую проблему - возможно, когда мы добавляем новую вершину мы фактически удаляемребра из разреза при добавлении новых ребер (где относится к графу с удаленными ребрами). Дело в том, что если это наносит ущерб нашей причине, это означает, что эта вершина «имела» когда-либо более высокую степень, поэтому она «должна была» быть выбрана ранее.
Это хорошо известные алгоритмы? Есть ли простой контрпример для этого?
Ответы:
Мое раннее утверждение не учитывало сокращение размера уже присутствующее в графе. Следующая конструкция, кажется, приводит (опытным образом - я создал вопрос на math.stackexchange.com для строгого доказательства) во фракции . н2/4O(12c+6 n2/4 O(1logc)
Алгоритм плохо работает на объединениях нескольких разрозненных полных графов разного размера. Обозначим полный граф на вершинах через . Рассмотрим поведение алгоритма на : он многократно добавляет произвольную вершину, еще не входящую в в - все такие вершины идентичны, поэтому порядок не имеет значения. Установка количества вершин, еще не добавленных в по алгоритму , размер разреза в этот момент равен .K n K n S S S | ˉ S | = k k ( n - k )n Kn Kn S S S |S¯|=k k(n−k)
Рассмотрим, что произойдет, если мы запустим алгоритм на нескольких несвязанных графах с константами от 0 до 1. Если - это количество элементов, которых еще нет в в м полном графе, то алгоритм будет многократно добавлять вершина из полного графа с наибольшим , произвольно разрывая связи. Это будет вызывать «круглые» добавления вершин в : алгоритм добавляет вершину из всех полных графов с наибольшим , затем из всех полных графов с (с x i k i S i S k i S k = k i k i = k - 1 k i SKxin xi ki S i S ki S k=ki ki=k−1 ki обновляется после предыдущего тура) и тд. Как только у полного графа есть вершина, добавленная к в раунде, он будет делать это для каждого раунда с тех пор.S
Пусть будет количеством полных графов. Пусть с будет модификатором размера для полного графа. Мы заказываем эти модификаторы размера от большого к маленькому и устанавливаем . Теперь у нас есть то, что если есть графы с точно элементами, еще не добавленными к , то размер разреза в это время будет . Общее количество ребер равно .0 < x i ≤ 1 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 | Еc 0<xi≤1 0≤i≤c−1 i x0=1 c′ k S ∑c′−1i=0k(xin−k)=kn∑c′−1i=0(xi)−c′k2 |E|=∑c−1i=0xin(xin−1)2≈n22∑c−1i=0x2i
Обратите внимание, что является квадратичной функцией в и, следовательно, имеет максимум. Поэтому у нас будет несколько локально максимальных разрезов. Например, если наш максимальный разрез равен размера . Мы выберем так, чтобы , что означает, что второй полный граф не изменит размер этого локально максимального разреза при . Затем мы получаем новый локально максимальный срез при и выбираем (с k c = 1 k = nkn∑c′−1i=0xi−c′k2 k c=1 n2k=n2 х1х1=1/2-εк=пn24 x1 x1=1/2−ε к=3/8п-ε'х2=3/8п-ε"k=n2 k=3/8n−ε′ x2=3/8n−ε′′ ε х 1 = 1 / 2 х 1 п = пε,ε′,ε′′ малые константы). Мы будем игнорировать ей на тот момент , и просто предположим , что мы можем выбрать - мы должны обеспечить , но это не повлияет на конечные результаты , если является достаточно большой.ε x1=1/2 нx1n=n2−1 n
Мы хотим найти локальные максимумы наших разрезов. Мы дифференцируем к , что дает . Приравнивание к дает , что дает сокращение размера . k n ∑ c ′ - 1 ikn∑c′−1i=0(xi)−c′k2 k 0k=nn∑c′−1i=0(xi)−2c′k 0 n 2k=n2c′∑c′−1i=0xi n24c′(∑c′−1i=0xi)2
Пусть будет определенным в предыдущем абзаце, если . Мы обеспечим выполнение формулы, потребовав, чтобы - все полные графы с были бы тогда меньше этого локально максимального среза и, следовательно, не увеличивали размер среза. Это означает , что мы имеем надрезы на этих , которые больше , чем все другие сокращения найдены с помощью алгоритма. кki k x i n < k i i ′ i ′ > i k i c k ic′=i xin<ki i′ i′>i ki c ki
Заполнив , мы получим повторение (плюс небольшой ) с . Решение этой проблемы дает : см. Мой вопрос на math.stackexchange.com для получения @Daniel Fisher. Подсоединение этого к и использование нашего понимания повторения дает нам сокращения размера . Используя свойства этого центрального биномиального коэффициента , мы имеемx i = 1xin<ki εx0=1xi=12c′∑c′−1i=0xi ε x0=1 н2xi=(2ii)4i n2n24c′(∑c′−1i=0xi)2 limcn24c′(2c′(2c′c′)4c′)2=n2c′((2c′c′)4c′)2 limc′→∞c′((2c′c′)4c′)2=1π (также см. мой вопрос на math.stackexchange.com ).
Число ребер приблизительно равно . По известным свойствам имеем . Сдача дает как минимум который асимптотически когда переходит к бесконечность.1n22∑c−1i=0x2i=n22∑c−1i=0((2ii)4i)2 н214i√≤(2ii)4i п2n22∑c−1i=0(14i√)2=n28∑c−1i=01i cn28logc c
Поэтому мы имеем асимптотически равным как уходит в бесконечность, показывая, что алгоритм может возвратные срезы с произвольно малыми долями,8δ(S,S¯)|E| c| E|8πlogc c |E|
источник
После некоторого размышления и расспросов, вот контрпример, любезно предоставленный Ами Пасом :
Пусть - четное число, а - граф, представляющий собой объединение с соответствием вершин (то есть совпадение с ребрами).Gn G n + 2Kn n+2 n/2+1
Как работает алгоритм на этом графике? Он просто берет вершины из части клики в произвольном порядке. После взятия вершин из клики, срез имеет размер . Это максимально для , что дает срез размера , тогда как число ребер в графе равно .k ⋅ (k k = nk⋅(n−k) n 2k=n/2 n2n24 n22+1
Алгоритм, как предписано, будет продолжать добавлять вершины из клики, уменьшая количество ребер, пересекающих разрез, пока то, что остается от клики, не станет просто одним ребром. На данный момент он не может получить ничего лучше, чем .n2+2
источник