Нахождение хотя бы двух путей одинаковой длины в ориентированном графе

20

Предположим , что мы имеем ориентированный граф и два узла A и B . Я хотел бы знать, есть ли уже алгоритмы для расчета следующей задачи решения:G=(V,E)AB

Есть ли хотя бы два пути между и В одинаковой длины?AB

Как насчет сложности? Могу ли я решить это за полиномиальное время?


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

Паоло Паризен Т.
источник
Вы имели в виду простые пути? (посещение каждого узла не более одного раза). Также им разрешено иметь общий внутренний узел?
1
нет, нет ограничений на пути Вы можете зацикливаться, если хотите.
Паоло Паризен Т.
Простое наблюдение заключается в следующем: если между существует только один простой путь , и этот простой путь связан не более чем с одним циклом, вы можете просто сказать N o , если к этому простому соединены хотя бы два цикла различной длины путь, вы могли бы сказать да, .... (я думаю, что подобные вещи полезны, и вы могли бы доказать это), но в случае несвязанных простых путей (если во время доказательства этого вы сталкивались с непересекающимися простыми путями), это NPC. A,BNo
1
@ mrm: я не вижу это как дубликат. Запрашивание всех прогулок является чрезвычайно трудоемкой операцией (в общем, количество прогулок бесконечно), тогда как OP запрашивает два (простых) пути, а не все обходы.
Дэйв Кларк,

Ответы:

10

Рассмотрим граф , мы хотим знать, существуют ли два разных пути от A до B одинаковой длины. Что делать? Просто: закодируйте два пути в одном. Определим граф G ' с вершинами V × V × { 0 , 1 } . Вы делаете шаг в G ' , сделав два самостоятельных шагов в G . Дополнительный бит сообщает вам, не разделены ли два пути друг от друга.GABGV×V×{0,1}GG

Формально существует ребро в G тогда и только тогда, когда i i , j j в G и e = e ( i , i ) ( j , j ) .(i,j,e)(i,j,e)GiijjGe=e(i,i)(j,j)

Алгоритм проверяет, существует ли путь к ( B , B , 1 ) в G ' , который является O ( V 4 ) , или что-то вроде O ( ( V + E ) 2 ) .(A,A,0)(B,B,1)GO(V4)O((V+E)2)

Если вы согласны с тем, что этот алгоритм корректен, то, как следствие, длина пути в не превышает 2 n 2 , поэтому потенциальные «коллизии пути» должны иметь место не позднее этой длины. Из этого наблюдения можно получить алгоритм O ( V ω log V ) , где ω - сложность умножения матриц (спросите, нужен ли вам спойлер ...).G2n2O(VωlogV)ω

Я твердо чувствую, что есть алгоритм , который использует больше структуры проблемы.O(V+E)

sdcvvc
источник
3
Это элегантно.
Рафаэль
4

Возможно, у меня есть ответ на эту проблему, но я не уверен, что это работает.

Не важно «найти» два пути, единственная важная вещь - «знать», существуют они или нет. Я не думаю, что это полная проблема NP.

Итак, возьмите матрицу смежности . Мы можем легко предположить, что он заполнен значением 0,1. (0 = нет ребра; 1 = есть ребро) Давайте используем следующую алгебру с 3 значениями (0,1,2), где все работает как обычно, кроме: 2 + <что-то> = 2 ; 2 <все, что больше 0> = 2A2+<something>=22<whatever greater than 0>=2

Таким образом, если есть два пути одинаковой длины от я ожидаю, что существует значение p такое, что ( A p ) i , j = 2 .i,jp(Ap)i,j=2

Пусть - номер вершины в графе (или, скажем, A имеет размерность n × n ). Я не знаю значения p , но если я итерирую A , умножая на себя не более n 2, я должен найти ответ. (итак, p < n 2 ) (смысл в том, что я проверяю A , затем я проверяю A 2 , затем я проверяю A 3 и так далее ...)nAn×npAn2p<n2AA2A3

вот моя аргументация:

  • если два пути - простые пути, хорошо, это работает; если есть, самое большее, я должен повторить раз.n
  • n2n2
  • α+βm=γ+δkmkAqijqAq1ijn2δβLCM(a,b)(ab)/GCD(a,b)n

(Ap)i,j=2

Я ошибаюсь?

Паоло Паризен Т.
источник
αγ
2
n2nαγLCM(a,b)+α+γ<ab+α+γα+γ+a+b<nab+α+γn2