Коготь - это . Тривиальный алгоритм обнаружит коготь за времени. Это можно сделать в , где - показатель быстрого умножения матриц следующим образом: возьмите подграф, индуцированный для каждой вершины , и найдите треугольник в его дополнение.
Насколько я знаю, эти основные алгоритмы известны только. Спинрад перечислил в своей книге «эффективные представления графов» обнаружение когтя за время как открытую проблему (8.3, стр. 103). Для нижней границы мы знаем, что алгоритм -времени будет подразумевать алгоритм времени для нахождения треугольника. Таким образом, мы можем рассматривать \ Omega (n ^ \ omega) как нижнюю границу.
Вопрос:
- Есть ли прогресс в этом. Или какой-либо прогресс в показе это невозможно?
- Есть ли другие естественные проблемы с алгоритмами , которые являются лучшими?
Замечание:
- Я явно прошу об обнаружении когтя вместо распознавания без когтей графов. Хотя алгоритм обычно решает оба, есть несколько исключений.
- В «Справочнике алгоритмов и теоретической информатики» утверждается, что его можно найти за линейное время, но это была только опечатка (см. «Эффективное представление графа»).
Ответы:
Я думаю, что мы можем сделать немного лучше, чем для плотных графов, используя умножение прямоугольной матрицы. Аналогичная идея была использована Эйзенбрандом и Грандони («О сложности клики с фиксированным параметром и доминирующим множеством», Теоретическая компьютерная наука, том 326 (2004) 57–67) для обнаружения 4 клик.O(n1+ω)
Пусть - граф, на котором мы хотим обнаружить существование когтя. Пусть множество (упорядоченных) пар вершин в . Рассмотрим следующую булеву матрицу размера: каждая строка индексируется некоторой , каждый столбец индексируется некоторой , и соответствующая запись равна единице тогда и только тогда, когда , и . Рассмотрим булеву матрицу произведение и транспонированной . Граф имеет коготь тогда и только тогда, когда он существуетG=(V,E) A V M |V|×|A| u∈V (v,w)∈A {u,v}∈E {v,w}∈E {u,w}∉E M MT G {u,v}∉E
такой, что запись в строке, индексированной и столбце, индексированном равна единице.MMT u v
Сложность этого алгоритма, по сути, заключается в сложности вычисления логического произведения матрицы матрицу , где обозначает количество вершин в графе. Известно, что такое матричное произведение может быть вычислено за время , что лучше, чем для наилучшей известной верхней границы . Конечно, если (как предполагалось), то оба подхода дают одинаковую сложность .n×n2 n2×n n O(n3.3) O(n1+ω) ω ω=2 O(n3)
источник
Я не знаю, как избежать умножения на матриц, но вы можете проанализировать его таким образом, чтобы время было фактически меньшим. Этот трюк отn
Клокс, Тон; Крач, Дитер; Мюллер, Хайко (2000), «Эффективный поиск и подсчет малых индуцированных подграфов», Письма обработки информации 74 (3–4): 115–121, doi: 10.1016 / S0020-0190 (00) 00047-8, MR 1761552.
Первое наблюдение заключается в том, что при умножении матриц матрицы на самом деле не , а где - степень каждой вершины, потому что то, что вы ищете, является ко-треугольником. в окрестности каждой вершины.n×n d×d d
Во-вторых, в графе без когтей каждая вершина должна иметь соседей. В противном случае множество соседей будет иметь слишком мало ребер, чтобы избежать добавления треугольника в дополнение. Поэтому, когда вы выполняете умножение матриц, вам нужно делать это только на матрицах размером а не .O(m−−√) O(m−−√) n
Кроме того, каждое ребро может вносить вклад в размер задачи умножения матриц только для двух вершин, ее конечных точек. Наихудший случай случается, когда для общего размера этих задач умножения матриц распределяется в подзадач размером каждая, что дает общую временную границу , улучшение для разреженных графов над границей упомянутое R B.2m O(m−−√) O(m−−√) O(m(1+ω)/2) O(nmω/2)
источник