Пусть A
является матрицей смежности для графика G = (V,E)
. A(i,j) = 1
, если узлы i
и j
связаны с ребром, A(i,j) = 0
в противном случае.Обнаружение циклов в матрице смежности
Моей целью является понимание того, является ли G
ациклическим или нет. Цикл определяется следующим образом:
i
иj
связаны:A(i,j) = 1
j
иk
связаны:A(j,k) = 1
k
иi
связаны:A(k,i) = 1
У меня реализовано решение, которое перемещает матрицу следующим образом:
- Старт от края
(i,j)
- Выберите набор
O
ребер, которые исходящих изj
, то есть, все 1s вj
-м рядуA
- Navigate
O
в моде ДФС - Если один из путей, созданных в результате этой навигации, приводит к узлу
i
, то обнаружен цикл
Очевидно, что этот раствор ион очень медленный, так как я должен оценить все пути в матрице. Если A
очень большой, требуемые накладные расходы очень велики. Мне было интересно, есть ли способ навигации по матрице смежности, чтобы найти циклы без использования дорогостоящего алгоритма, такого как DFS.
Я хотел бы реализовать свое решение в MATLAB.
Заранее благодарен,
Элеонора.
Довольно просто, но не слишком эффективно. n матричных умножений довольно много. – Dukeling
@ Dukeling лучше, чем матрицы 'n', хотя ... – Shai