2012-03-25 19 views
1

アークの定義によるトポロジカルソート(私の質問から) - 方向性グラフのすべてのアークを順序付けする方法です。頂点に挿入するすべてのアークは、来る前にアークする必要がありますこの頂点から外に出る。アークによるトポロジカルな並べ替え

答えて

3

トポロジカルソートでは何も変更する必要はありません。使用するだけで後処理できます。

高レベル疑似コード:

  1. ラントポロジカルソート、結果の配列はarr
  2. arrの各頂点vためl
  3. ことせ、空のエッジリストを作成することせ[反復を注文] :
    3.1。それぞれ(v,u)Eに:
    3.1.1。リターン(v,u) to l
  4. l

を追加し、この方法の利点は、あなたがそれ、ちょうどポストプロセスは、望ましい結果を得るために修正することなく、トポロジカルソートなどのブラックボックスを使用することができます。

正し [証明のスケッチ]:
以来(v,u)各エッジについて - uは、トポロジカルソートでvした後、あなたはそれを印刷するとき、それはvを介して行われ、そしてあなたが任意の頂点を印刷する前に、これ(v,u)が印刷されて表示されますuに添付されています。

複雑
O(|V|+|E|)トポロジカルソート、後処理のためにO(|V|+|E|) [すべての頂点および全ての辺を反復]。

+0

ええ、ビッグオーは同じですが、仕事の量を2倍にしなければなりません。 – tchap

+0

@OndrejKupka:確かに、定数はトポロジカルソートを変更しても高くなります。 **トポロジカルソートをカプセル化する**メリットのために。 [これは非常に重要な側面です!]実生活のアプリケーションでは、*この部分がホットスポット*であることが判明した場合は、おそらくそれを書き直したいと思うでしょう。 – amit

+0

はい、それほど多くのコードをコピーするのは実際的ではありません。 – tchap

0

"従来の"トポロジカルソートは頂点をソートしますが、これはアークをソートします。それ以外の場合、原則は同じです...

+0

私はトポロジカルソートアルゴリズムを見ると、アークに対してどのように変更できるのか分かりません... あなたは私のためにそれを解決したくありませんが、私はいくつかの指導をお願いします。 – Nusha

+0

wikiへ移動あなたが渡したページ、opcodeセクション。 「nをLに挿入する」と「グラフからエッジeを除去する」というステップでも、「エッジeをLに挿入する」。この方法で、頂点の代わりに円弧を覚えていきます。 – tchap

関連する問題