У меня есть взвешенный направленный мультиграф с несколькими циклами. С помощью функции clusters
в пакете igraph
я могу получить узлы, принадлежащие сильно связанным компонентам. Но мне нужен путь/порядок узлов, которые образуют цикл.Как получить список краев сильно связанных компонентов в графе?
EDIT после @ josilber Ответные
У меня очень плотный график, с 30 узлами и около 2000 ребер. Так что graph.get.subisomorphisms.vf2
занимает слишком много времени, чтобы работать в моем случае.
Я не знаком с алгоритмом графа, но я думаю, что, возможно, сделать DFS в исходном или обратном графике, и использовать order
или order.out
может работать, но не уверен.
Или любые другие идеи для ускорения этого запуска приветствуются!
Пример
library(igraph)
set.seed(123)
graph <-graph(c(1,2,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,8,10,9,10,9,10,10,11,10,5,11,12,12,13,13,14,14,15,14,20,15,16, 16,17,17,18,18,19,19,20,20,21,21,1,22,23,22,23,23,22),directed=T)
E(graph)$weight= runif(ecount(graph),0,10)
> clusters(graph, "strong")
$membership
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1
$csize
[1] 2 21
$no
[1] 2
Как получить список края цикла с наибольшим весом здесь? Благодаря!
Спасибо за помощь! Мой график довольно плотный, поэтому требуется некоторое время для запуска ... Мне интересно, будет ли поиск dfs на подграфе получить правильный порядок узлов в цикле. Я не очень хорошо разбираюсь в изоморфизме или теории графов. Простите меня, если я ошибаюсь. – qshngv
@qshngv Как я уже сказал в своем посте, в целом поиск цикла NP-hard, что означает, что время выполнения будет возрастать экспоненциально по мере увеличения размера проблемы. Кроме того, плотные графы будут иметь асимптотически экспоненциальное число возвращенных циклов. Поэтому неудивительно, что этот подход (или любой другой) имел бы длинную рабочую среду для большого плотного графа. – josliber
Кроме того, поскольку у меня есть мультиграф, как определить, какой край формирует максимальный взвешенный цикл? Поскольку каждое ребро в моем графе представляет точку, и мне нужно определить заданную точку для какой-либо цели. Большое спасибо за ваше время! – qshngv