Дано: Невзвешенный направленный график (G = (E, V)), который может содержать любое количество циклов.Самый длинный простой путь в разреженных циклических графах
Цель: Для всех вершин я хочу самый длинный простой путь к некоторой целевой вершины X в V
Алгоритм Идея:
For each v in V
v.distanceToTarget = DepthFirstSearch(v)
Next
DepthFirstSearch(v as Vertex)
if v = target then
'Distance towards target is 0 for target itself
return 0
elseif v.isVisitedInCurrentDFSPath then
'Cycle found -> I wont find the target when I go around in cycles -> abort
return -infinity
else
'Return the maximum Distance of all Successors + 1
return max(v.Successors.ForEach(Function(v) DepthFirstSearch(v))) + 1
end if
Правильно ли это для всех случаев? (Предполагая, что цель может быть достигнута из каждой вершины)
Число ребер на моих графиках очень мало. Предположим | E | < = 3 * | V | держит. Как вычислить среднюю временную сложность?
Спасибо!