pi在此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当然是颜色,但是π……似乎是某种变量,但我不了解其在此伪代码中的功能。


2
@Snowman我会使用计算机科学和学术出版物中使用的样式,而不是专门使用数学,但是我同意总体思路。这个问题是关于这种用法的问题,可以通过阅读Wikipedia页面来解决,并且π不是常用的,而是特定于作者如何编写算法的。我担心伪代码会有太多变化,并询问每种样式中的每个字符意味着什么会失控。

1
伪代码中经常使用字母π吗? 有时,但是含义会根据上下文而变化。
Rufflewind

1
@Snowman:π不是函数。它是由顶点索引的可变顶点数组。
Rufflewind

1
在这种情况下,π只是算法中使用的符号,类似于d和color。有时,算法编写者喜欢使用单字母符号,而不是使用可爱的名称(如“ parentVertices”)或可能倾向于在编程语言中使用的名称。
布兰登2015年

@Snowman你在开玩笑吗?这不是一个数学问题。这是关于解释伪代码编写程序的,为什么这不应该与软件开发有关,我真的不明白。
nbro

Answers:


17

我相信这里使用π是实际的“父项”。因此,在这种情况下,v的“父”   是u,因为我们正在查看与u相邻的所有节点。


0

π向量肯定会保留与节点v一起出现的节点u。这在必须构建图的BFS树时很有用。尽管不是必需的,但是当您必须执行更多时间BFS时(例如,用于计算图中两个节点之间的最大流量的Edmonds-Karp算法),该技术会降低很多复杂性。在这种情况下,您不必再运行BFS,因为您已经构造了BFS树并将其从叶子遍历到根。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.