Найти все полные подграфы в графе

есть ли известный алгоритм или метод для поиска всех полных подграфов в графе? У меня есть неориентированный, невзвешенный граф, и мне нужно найти все подграфы внутри него, где каждый узел в подграфе связан друг с другом узлом в подграфе.

существует ли алгоритм для этого?

2 ответов


Это называется проблема камарилья; это сложно и в NP-complete в целом, и да, есть много алгоритмов для этого.

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

Из Википедии

в информатике проблема клики относится к любой из проблем, связанных с поиском конкретных полных подграфов ("кликов") в графе, т. е. множеств элементов, где каждая пара элементов связана.

проблемы клики включают в себя:

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

все эти проблемы сложны: задача решения клики NP-полная (одна из 21 NP-полных задач карпа), задача поиска максимальной клики является как неразрешимой с фиксированным параметром, так и трудной для аппроксимации, и перечисление всех максимальных клик может потребовать экспоненциального времени, поскольку существуют графики с экспоненциально большим количеством максимальных клик. Тем не менее, алгоритмы для этих задач, которые работают в экспоненциальном времени или обрабатывают некоторые более специализированные входные графики в полиномиальное время.

см. также

  • мост Bron–Kerbosch

Ну, проблема нахождения K-вершинного подграфа в графе размера n имеет сложность

O (n^k K^2)

поскольку n^k подграфы для проверки, и каждый из них имеет k^2 края.

то, что вы просите, поиск всех подграфов в графе является NP-полной проблемой и объясняется в алгоритме Bron-Kerbosch, перечисленном выше.