トポロジーソーティングのテスト/識別


8

個の頂点Vの同じセット有向非グラフセットが与えられます。頂点のセット(v_1、v_2、...、v_m)の順列も与えられます。間のグラフを特定することができる最高のアルゴリズムは何であるG_1、G_2は、...、G_Nその持っている(V_1、V_2、...、V_M)トポロジカルソートなどを?誰かが(v_1、v_2、...、v_m)がV上のDAG Gのトポロジカルな種類であるかどうかを準線形時間でテストできますか? G 1、G 2、。。。、G nは m個のV (V 1、V 2、。。。、のV M)G 1、G 2、。。。、G N(V 1、V 2、。。。、のV M)(V 1、V 2んG1、G2、。。。、GんメートルV(v1、v2、。。。、vメートル)G1、G2、。。。、Gん(v1、v2、。。。、vメートル)G V(v1、v2、。。。、vメートル)GV


6
頂点の順序が表示される前に、一連のグラフに基づいてデータ構造を構築できますか?順序付けですべてのグラフとすべてのエッジを確認する必要があるため、何らかの方法でグラフを前処理することが許可されていない限り、線形時間に勝ることはできないようです。m − 1nメートル−1
— mjqxxxx

Hsien-Chih Chang、より良いソリューションを可能にする良い前処理技術は何でしょうか?ある種のハッシュ?解(確率的アルゴリズム)を近似できれば、線形時間を打つことができると思います。
— user2471 2011年

@ user2471:以前の回答で述べたように、この投稿は私ではなく
— @Steve

Hsien-Chih Changさん、申し訳ありません。私の質問はすべての人を対象としたものでした:)
— user2471

@ user2471、謝罪する必要はありません!この質問に詳しい人がいい​​答えを投稿してくれるといいのですが:D
— Hsien-Chih Chang張學之

回答:


3

これは、ほぼ線形の時間で実行できます。

順列をとし、k = k (π )を単一のエッジ(u 、v )をπに対してチェックするために必要なステップ数とします。次に、G iのM iエッジのそれぞれがπと互換性があることを確認するだけで十分です。これは、O (k M i)時間またはO (k ∑π=(v1、…、vメートル)k=k(π)(あなた、v)πM私G私πO(kM私)全体。O(kΣM私)

前処理することで、ログのmエントリを含む配列でkを2つのルックアップに減らすことができます。πkメートルサイズ、および配列内の2つの(log m )ビットエントリ間の比較。配列要素 a [ w ]には、順序付きリストと見なされる π内の wのインデックスが含まれます。これは、 k = O (logログメートル(ログ⁡ メートル)a[w]wπ得 O ((ログk=O(ログメートル)上限の全体的な時間。O((ログメートル)ΣM私)

@mjqxxxxが指摘するように、すべてのグラフのすべてのエッジが関連している可能性があります。これにより、ステップの下限が作成されます。ここで、Kはすべてのグラフエッジに対して実行する必要がある作業の最小量です。一部のアプローチでは、K = o (logΩ(KΣM私)K。これは、せいぜい Ω (∑ M i)であるため、ギャップはほとんどありません。K=o(ログメートル)Ω(ΣM私)


k = log mにするために使用できるアルゴリズム。それは接尾辞の木ですか?
— vincent mathew、2015年

0

簡単な方法:

GS = {G1,G2...G3}
for v in (v1,v2,...vm)
      remove all graphs from GS where indegree(v) != 0
      remove v and attached edges from remaining GS

それはあなたが望むほど速くはありません。しかし、「DAGの有効なトポロジー順序が複数存在する可能性がある」という1つの問題を解決します。そして、それらすべてを見つけることは良い考えではありません。

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