このBFSアルゴリズムの疑似コードでpiはどういう意味ですか?


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
@スノーマン数学ではなく、コンピュータサイエンスや学術出版物で使用されているスタイルを使用しますが、一般的な考えには同意します。この質問は、この使用法がウィキペディアのページを読むことで回答された可能性があることを尋ねています。πは一般的な使用法ではなく、著者がアルゴリズムをどのように記述するかによって異なります。疑似コードのバリエーションが多すぎて、各スタイルの各文字の意味がわからなくなってしまうのではないかと心配しています。

1
πという文字は疑似コードでよく使用されますか? 時々、しかし意味は文脈によって異なります。
Rufflewind 2015年

1
@スノーマン:ここのπは関数ではありません。これは、頂点によってインデックスが付けられた頂点の可変配列です。
Rufflewind 2015年

1
この文脈では、πはアルゴリズムで使用される単なる記号であり、dやcolorと同様です。アルゴリズム作成者は、「parentVertices」などのかわいい名前や、プログラミング言語で使用される傾向のあるものではなく、1文字の記号を使用したい場合があります。
ブランディン2015年

@スノーマン冗談ですか?数学の問題ではありません。それはプログラムを書くために疑似コードを解釈することについてです、なぜこれがソフトウェア開発についてではないはずなのか、私は本当に理解できません。
nbro 2015年

回答:


17

ここでのπの使用は実際の「の親」だと思います。したがって、この場合、uに隣接するすべてのノードを見ているので、vの「親」  はuです。


0

πベクトルは確実にノードvに入ったノードuを保持します。これは、グラフのBFSツリーを構築する必要がある場合に役立ちます。必須ではありませんが、BFSをより多くの時間実行する必要がある場合、この手法により複雑さが大幅に軽減されます(グラフの2つのノード間の最大フローを計算するためのEdmonds-Karpアルゴリズムなど)。この場合、BFSツリーをすでに構築しており、葉からルートまでトラバースするため、BFSを何度も実行する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.