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