web-dev-qa-db-ja.com

DFSとトポロジーの種類の違いはありますか? DFSを使用せずにトポロジー順序付けを達成できますか?

指向グラフ内のサイクルを検出するためのコードを書き込んで、サイクルがない場合は同じの位相順を返していました。

私はそれを探していましたが、DFSのような異なるテクニックと、指向グラフのサイクルを検出するためのトポロジカルソーティングに遭遇しました。

これら2つの間に違いはありますか?

4
Dhananjay Tyagi

トポロジーソートは次のようにしてDFSを使用します。

  1. DFSを呼び出す
  2. すべてのエッジが調べられたとき(すなわち仕上げ時間)
  3. 頂点が終了したら、トポロジのソートLの先頭に識別子を挿入します。
  4. 完成したリストLはトポロジーソートです

実行時:O(V + E)

本質的に、トポロジのソートアルゴリズムはDAG上でDFSを使用します。返されたリストが正しいトポロジーの順序で表示されるように、DFSプロパティは重要です。ただし、上記の答えに見られるように、はいDFSを使用せずに順序付けできません。例は Kahnのアルゴリズム と並列の並べ替えです。

1
Colin Moody

明確なアイデアを得たい場合は、次の問題を試すことができます。

https://onlinejude.org/index.php?option=onlinejudging&itemid=8&page=how_problem&category=0&problem = 1246& MOSMSG=SUBMISSIONSRECEUMIVED以前のwith + 25820106

まず、あなたは簡単なDFSを飛び越えるかもしれませんが、それは場合によっては失敗します。

例:次のテストケースではDFSが失敗します。

5 4(それぞれ頂点とエッジのもの)

(エッジの説明)

1 2

2 3

1 4

4 3

0
mastan shaik