Я хотел найти все клики в графе среднего размера, но плотно связном, имеющем 369 узлов и 22 724 ребра. Сначала я просто вызвал метод igraph Graph.cliques()
через интерфейс python:
cliques = graph.cliques()
Он все еще работает и потребляет более 3 часов чистого процессорного времени на ядре i7-4600U. Поэтому я начал искать другие возможности и вспомнил хороший код, который уже использовал несколько лет назад. Он называется justTheCliques и доступен здесь: https://github.com/aaronmcdaid/MaximalCliques. В описании сказано:
запускает алгоритм Брона-Кербоша в списке ребер
Запуск этого алгоритма дает результат на том же графике в течение нескольких секунд:
justTheCliques edge-list > cliques
Я люблю igraph, и я просто хочу знать, в чем основная причина этого? Igraph использует другой алгоритм? Результат должен быть одинаковым?
graph.cliques()
перечисляет все клики в графе, а justTheCliques перечисляет только максимальные клики. Если вам нужно только максимальное количество кликов, используйтеgraph.maximal_cliques()
, который должен быть таким же быстрым, как и justTheCliques. Размер выводаgraph.cliques()
экспоненциально больше, поэтому неудивительно, что его вычисление занимает намного больше времени. - person Tamás   schedule 04.09.2014