Что означает пи в этом псевдокоде алгоритма BFS?

9

У меня есть следующий псевдокод для алгоритма поиска в ширину

BFS(G,s)
 1 for each vertex uV(G) \ {s}
 2     color[u] = white
 3     d[u] = ∞
 4     π[u] = nil
 5 color[s] = gray
 6 d[s] = 0
 7 π[s] = nil
 8 Q = ∅
 9 Enqueue(Q,s)
10 while q ≠ ∅
11     u = Dequeue(Q)
12     for each vAdj[u]
13         if color[v] == white
14             color[v] = gray
15             d[v] = d[u] + 1
16             π[v] = u
17             Enqueue(Q,v)
18     color[u] = black

Исходное изображение

Я не понимаю, что буква π указывает в этом контексте. Я не знаком с этим алгоритмом, и его трудно угадать.

Я думаю, dуказывает на расстояние, colorэто, конечно, цвет, но это π... кажется, что это какая-то переменная, но я не понимаю ее функции в этом псевдокоде.

nbro
источник
2
@ Снеговик Я бы предпочел стиль, используемый в компьютерных науках и научных публикациях, а не в математике , но я согласен с общей идеей. На этот вопрос можно спросить об этом использовании, возможно, прочитав страницу википедии , и π не является чем-то общепринятым, а скорее специфическим для того, как автор пишет алгоритм. Я беспокоюсь о том, что существует слишком много вариаций псевдокода, и спрашиваю, что каждый символ в каждом стиле может выйти из-под контроля.
1
Часто ли буква π используется в псевдокоде? Иногда, но смысл будет меняться в зависимости от контекста.
Rufflewind
1
@ Снеговик: π здесь не является функцией. Это изменчивый массив вершин, проиндексированных вершинами.
Rufflewind
1
В этом контексте π - это просто символ, используемый в алгоритме, похожий на d и цвет. Иногда разработчики алгоритмов предпочитают использовать однобуквенные символы, а не милые имена, такие как "parentVertices" или что-то, что, как правило, может использоваться в языке программирования.
Брандин
@ Снеговик Ты шутишь? Это не математический вопрос. Речь идет о интерпретации псевдокода для написания программы, почему это не должно быть о разработке программного обеспечения, я действительно не могу понять.
nbro

Ответы:

17

Я считаю, что использование π здесь является фактическим «родителем». Так что в этом случае «родителем» v   является u, потому что мы смотрим на все узлы, смежные с u .

Дж Трана
источник
0

Вектор π, безусловно, сохраняет узел u, с которым вы попали в узел v. Это помогает, когда вам нужно построить дерево BFS графа. Хотя в этом нет необходимости, этот метод значительно снижает сложность, когда вам нужно больше времени выполнять BFS (например, алгоритм Эдмондса-Карпа для вычисления максимального потока между двумя узлами в графе). В этом случае вам не нужно больше запускать BFS, так как у вас уже есть построенное дерево BFS и пройти его от листьев к корню.

Колумб
источник