タグ付けされた質問 「directed-acyclic-graph」

これは、一連の点または頂点と一連のコネクタまたはエッジで構成される数学的構造です。エッジは頂点を接続し、それらの頂点は方向付けられます。また、サイクル、つまり頂点を頂点に接続する有向エッジは許可されません。

5
正のトポロジカル順序
頂点に実数の重みを持つ有向非巡回グラフがあるとします。DAGのトポロジカルな順序付けを見つけたいと思います。トポロジカルな順序付けのすべてのプレフィックスについて、重みの合計が負ではありません。または、順序理論の用語を好む場合、重み付き半順序があり、各プレフィックスが負でない重みを持つような線形拡張が必要です。この問題について何がわかっていますか?NP時間完全または多項式時間で解けるか?

3
重み付きDAGが与えられた場合、各重みをその祖先の重みの合計で置き換えるO(V + E)アルゴリズムはありますか?
もちろん、問題は二重カウントです。特定のクラスのDAG =ツリー、またはシリアル/パラレルツリーでさえも簡単に実行できます。妥当な時間で一般的なDAGで機能する唯一のアルゴリズムは近似アルゴリズム(Synopsis拡散)ですが、その精度の向上はビット数で指数関数的です(そして多くのビットが必要です)。 背景:このタスクは、BBChop(http://github.com/ealdwulf/bbchop)の確率計算の一部として、断続的なバグを見つけるためのプログラム(つまり、「ベイズバージョン」 git bisect ')。したがって、問題のDAGは改訂履歴です。つまり、エッジの数がノードの数の2乗に近づく可能性は低く、小さなkの場合、ノードの数のk倍未満になる可能性が高いことを意味します。残念ながら、リビジョンDAGの他の有用なプロパティは見つかりませんでした。たとえば、最大のトライコネクテッドコンポーネントがノード数の平方根としてのみ成長することを期待していましたが、悲しいことに(少なくともLinuxカーネルの歴史では)線形に成長します。

2
なぜ「トポロジカルソート」がトポロジカルなのですか?
「トポロジカルソート」が「トポロジカル」と呼ばれるのはなぜですか?それは、頂点やエッジを変更せずに順序を決定しているというだけの理由ですか?ドーナツとコーヒーカップはトポロジー的に同等ですか?なぜ「依存ソート」などと呼ばれないのですか?なぜ「トポロジカル」なのですか?私は不思議に思っています。

2
挿入/削除の存在下でDAGの接続情報を効率的に維持するためのアルゴリズムは存在しますか?
有向非巡回グラフ与えられた場合、次の操作を効率的にサポートできますか?G(V,E)G(V,E)G(V,E) にパスが存在するかどうかを判断: Gノードから Aノードへ bはisConnected(G,a,b)isConnected(G,a,b)isConnected(G,a,b)GGGaaabbb :追加からエッジまでのBのグラフで Glink(G,a,b)link(G,a,b)link(G,a,b)aaabbbGGG :からエッジを削除する Bに Gunlink(G,a,b)unlink(G,a,b)unlink(G,a,b)aaabbbGGG :Gに頂点を追加しますadd(G,a)add(G,a)add(G,a) :Gから頂点を削除しますremove(G,a)remove(G,a)remove(G,a) いくつかのメモ: を許可しない場合、互いに素な型のデータ構造を使用して接続情報を維持するのは簡単だと思われます。unlinkunlinkunlink 明らかに、グラフの素朴なポインタベースの表現を使用して、深さまたは幅優先の検索を使用して、を実装できます。しかし、これは非効率的です。isCO NnectedisConnectedisConnected 3つの操作すべてについて、償却された一定時間または対数時間を期待しています。これは可能ですか?

1
混合グラフ非周期性テストアルゴリズムのリファレンス?
混合グラフは、有向エッジと無向エッジの両方を持つ可能性があるグラフです。その基礎となる無向グラフは、有向エッジの方向を忘れることによって取得され、他の方向では、混合グラフの方向は、各無向エッジに方向を割り当てることによって取得されます。有向サイクルを形成するように方向付けできる場合、エッジのセットは混合グラフでサイクルを形成します。混合グラフは、サイクルがない場合にのみ非周期的です。 これはすべて標準であり、非循環混合グラフについて言及している多くの論文があります。したがって、混合グラフの非周期性をテストするための次のアルゴリズムを知っておく必要があります。 次の手順を繰り返します。 入ってくる有向エッジと入射する無向エッジのない頂点は、サイクルの一部にできないため、削除します。 頂点に入力有向エッジがないが、1つの入射無向エッジがある場合、無向エッジを使用するサイクルはそのエッジに入らなければなりません。無向エッジを着信有向エッジに置き換えます。 これ以上ステップを実行できなくなったら停止します。結果が空のグラフである場合、元のグラフは必ず非周期的である必要があります。それ以外の場合、残っている頂点から開始し、グラフをバックトラックできます。各ステップで、入ってくるエッジを逆方向にたどるか、現在の頂点に到達するために使用されたものではない無向エッジをたどり、頂点が繰り返されるまで続きます。この頂点の最初と2回目の繰り返し(逆順)の間に続くエッジのシーケンスは、混合グラフのサイクルを形成します。 混合グラフに関するウィキペディアの記事では、非循環混合グラフについて言及していますが、それらをテストする方法については言及していません。したがって、このアルゴリズムについて何か付け加えたいと思いますが、そのためには公開されたリファレンスが必要です。誰かがそれ(または非周期性をテストするためのその他のアルゴリズム)が文献のどこにあるか教えてもらえますか?

2
Eppsteinのアルゴリズムを使用してk個の最短パスを見つける
この論文のエップシュタインのアルゴリズムによるパスグラフ仕組みと、対応するヒープ構造してからへの最短パスを再構築する方法を理解しようとしています。P(G)P(G)P(G)kkkssstttH(G)H(G)H(G) これまでのところ: out(v)out(v)out(v)は、最短パスの一部ではないグラフ頂点を残すすべてのエッジが含まれます。最短経路上のエッジの代わりにこのエッジを使用すると、と呼ばれる「時間の無駄」によってヒープ順に並べられます。ダイクストラを適用することにより、からすべての頂点への最短経路を見つけます。vvvGGGGGGδ(e)δ(e)\delta(e)ttt Iは、エッジの長さ+(頭頂点(有向枝が指している場合)の値を取ることによって、これを計算することができる- 。有向エッジが開始されるテール頂点()の値を、これがある場合、それ場合、最短経路上にありません>0>0> 0=0=0= 0、それは最短パス上にあります。 今は2分ヒープ構築Hout(v)Hout(v)H_{out}(v)のエッジのセットをheapifyingによってout(v)out(v)out(v)、それらに従ってδ(e)δ(e)\delta(e)任意用v∈Vv∈Vv \in Vルート、outroot(v)outroot(v)outroot(v)は子(=サブツリー)が1つしかありません。 構築するために IインサートO U T R O O T (V )でH T(N E X T T(V ))端子頂点から始まるT。挿入中に頂点が何らかの方法でタッチされるたびに、*のマークが付けられます。HT(v)HT(v)H_T(v)outroot(v)outroot(v)outroot(v)HT(nextT(v))HT(nextT(v))H_T(next_T(v))ttt∗∗* 今は構築することができるの残りの部分を挿入することによって、H O U T(W )でH T(V )。内のすべての頂点H Gは、(V )のいずれか含ま2から子供H T(V )と1からH O U T(W )又は0第から2秒〜を3ヒープです。HG(v)HG(v)H_G(v)Hout(w)Hout(w)H_{out}(w)HT(v)HT(v)H_T(v)HG(v)HG(v)H_G(v)222HT(v )HT(v)H_T(v)111HO U T(w )Hout(w)H_{out}(w)000222 Iを構築することができるDAGと呼ばれるD (G )ごとに頂点を含有*から-marked頂点H T(V )と各非ルート頂点に対するからH …

3
位置が制約されたトポロジカルソートの複雑さ
Iは入力DAGとして与えられていの各頂点の頂点さらにいくつかで標識されている。GGGnnnxxxS(x)⊆{1,…,n}S(x)⊆{1,…,n}S(x) \subseteq \{1, \ldots, n\} トポロジカルソート全単射であるの頂点からへようにすべてのため、、からパスがある場合ににおける次に、。すべてのに対してようなトポロジカルなが存在するかどうかを判断したいと思います。GGGfffGGG{1,…,n}{1,…,n}\{1, \ldots, n\}xxxyyyxxxyyyGGGf(x)≤f(y)f(x)≤f(y)f(x) \leq f(y)GGGxxxf(x)∈S(x)f(x)∈S(x)f(x) \in S(x) この決定問題の複雑さは何ですか? [注:明らかにこれはNPにあります。許可された頂点/位置のペアのグラフを見ると、順序に違反するためにペアリング間の無向エッジが競合しているため、クリークごとに最大1つのペア、最大で1つのペアを選択する、互いに素なクリークのグラフが表示されます位置と頂点ごとに最大1つのペア-それは3次元マッチングに関連しているように見えますが、この特定の問題の追加構造ではまだ難しいかどうかわかりません。]

1
DAGのすべての長いstパスを破棄するのにどれくらいの費用がかかりますか?
1つのソースノードsssと1つのターゲットノード持つDAG(有向非巡回グラフ)を考えますttt。同じ頂点のペアを結合する平行なエッジが許可されます。kkk - カットが除去全て破壊辺の集合でありsss - tttパスよりも長いkkk。短いsss - tttパスと長い「内部」パス(sssと間ではないttt)は生き残ることができます! 質問:kより長いすべてのs - tパスを破壊するために、DAGからエッジの 最大で約1 / k1/k1/k部分を削除するだけで十分ですか? ssstttkkk つまり、e (G )e(G)e(G)がのエッジの総数を示す場合GGG、すべてのDAG GGGは最大で約e (G )/ kエッジのkkkカットがありますか?2つの例:e (G )/ ke(G)/ke(G)/k 場合、すべての sss - tttパスの長さ持っ> k>k> k、その後、kkkとの留分≤ E (G )/ K≤e(G)/k\leq e(G)/kエッジが存在します。これは、kkk独立したkkkカットが存在する必要があるためです。ソースノードsからの距離に従ってのノードをレイヤー化するだけです。 GGGsss場合G = TnG=TnG=T_nある推移トーナメント(完全DAG)、その後もA kkk留分と エッジが存在する:修正 トポロジカル順序をノードの場合、ノードを長さ連続した間隔に分割し 、同じ間隔のノードを結合するすべてのエッジを削除します。これは、kより長いすべて -パスを破壊します。 ≤ K ( N / K2) ≈E(G)/K≤k(n/k2)≈e(G)/k\leq …

1
DAGのエッジラベリング問題の正確なアルゴリズム
私はいくつかのシステムの一部を実装していますが、その一部には何らかの助けが必要です。したがって、それをグラフの問題としてフレーミングして、ドメインに依存しないようにします。 問題:有向非巡回グラフが与えられます。一般性を失うことなく、は1つのソース頂点と1つのシンク頂点があると仮定します。せからすべて有向パス集合示すににおける。頂点のセットも与えられます。問題は、非負の整数の重みをのエッジに割り当てることです。したがって、 2つのパスは、の頂点の同じサブセットを含む場合にのみ同じ重みを持ちます。G S T P S T G R ⊆ V G P RG = (V、E)G=(V、E)G=(V,E)GGGssstttPPPssstttGGGR ⊆ VR⊆VR \subseteq VGGGPPPRRR。(パスの重みは、そのエッジの重みの合計です。)のパスの重みの範囲はできるだけ小さくする必要があります。PPP 現在、私のアプローチは効率的ではないようです。文学への言及や良い洞察を探しています。それ以外のことも歓迎します。 編集:この問題の硬度の証拠はありますか?コンパクトな番号は常に存在しますか?

2
ラベル付きDAGの辞書編集的に最小限のトポロジカルソート
非環式有向グラフ我々が入力として与えられている問題考える、標識機能からいくつかのセットに全順序と我々が求められ(例えば、整数)、及び辞書編集的に最小のトポロジカルソートを計算します。より正確には、トポロジカルソートのGでの列挙であるVとして\ mathbfは、{V} = V_1、\ ldots、v_n、その結果、全てのためにI \ NEQ Jからのパスがあるときはいつでも、V_Iにv_jではλ V L &lt; LG=(V,E)G=(V,E)G = (V, E)λλ\lambdaVVVLLL&lt;L&lt;L<_LλGGGλλ\lambdaV v = v 1、… 、v n i ≠ j v i v j GGGGVVVv=v1,…,vnv=v1,…,vn\mathbf{v} = v_1, \ldots, v_ni≠ji≠ji \neq jviviv_ivjvjv_jGGG、それからi &lt;jでなければなりませんi&lt;ji&lt;ji < j。このようなトポロジカルソートのラベルは、\ mathbf {l} = \ lambda(v_1)、\ ldots、\ lambda(v_n)として取得されるSの要素のシーケンスです。そのようなシーケンス(すべての長さ| V |)の辞書式順序は、l_i &lt;_L l_iのような位置iがある場合、\ mathbf …

4
DAGでのNPハード問題の管理
ツリーの幅は、グラフがツリーにどれだけ近いかを測定します。いくつかのNP困難な問題は、制限されたツリー幅を持つグラフで扱いやすいです。問題がツリー上でNPハードのままである場合、ツリーの幅は節約できません。これは、木の上のNP困難な問題を求める私の以前の質問の 1つの背後にある動機でした。 有向グラフが有向非巡回グラフ(DAG)にどれだけ近いかを測定するツリー幅には、いくつかの有向バージョンがあります。いくつかのどのようなものがあり監督のDAG上のNP-ハード残る問題は?有向問題は、エッジの方向を本質的に使用します。たとえば、ハミルトニアンパスは有向問題ですが、頂点カバーはそうではありません。前の質問に対する答えの1つは、木では難しい問題を生成するための一般的なレシピを提供しました。DAGにそのようなレシピはありますか?

1
正のトポロジカル順序付け、テイク2
これは、David Eppsteinの最近の質問へのフォローアップであり、同じ問題に動機付けられています。 頂点に実数の重みを持つDAGがあるとします。最初は、すべての頂点にマークが付いていません。マークされた頂点のセットを変更するには、(1)マークされていない先行のない頂点をマークするか、(2)マークされた後続のない頂点をマーク解除します。(したがって、マークされた頂点のセットは常に半順序のプレフィックスです。)マークされた頂点の総重量が常に非負になるように、すべての頂点がマークされて終了する一連のマーク/マーク解除操作を見つけたい。 このような一連の操作を見つけるのはどれほど難しいですか?Davidの問題 とは異なり、この問題がNPにあるかどうかは明らかではありません。原則として(例はありませんが)、すべての有効なムーブシーケンスは指数関数的な長さを持ちます。私が証明できる最善のことは、問題がPSPACEにあることです。 マーク解除操作は実際には不要ですか? 有効な移動シーケンスがある場合、頂点のマークを解除しない有効な移動シーケンスが必要ですか?肯定的な答えは、この問題をデイビッドの問題と同一にします。一方、マーク解除が必要な場合は、それを証明する小さな(一定サイズの)例が必要です。

1
ラベル付きDAGに対するディルワースの定理の一般化
antichainにおけるDAG サブセットであるA ⊆ V即ち、全く存在しない、ペアワイズ到達不能な頂点V ≠ V ' ∈ようにvがから到達可能であるV 'におけるE。ディルワースの定理半順序理論的には、DAGは、サイズのないantichain持っていない場合はすることが知られているのk ∈ Nを、それはせいぜいの労働組合に分解することができるのk - 1つのばらばらチェーン、すなわち、有向パス。(V,E)(V,E)(V, E)A⊆VA⊆VA \subseteq Vv≠v′∈Av≠v′∈Av \neq v' \in Avvvv′v′v'EEEk∈Nk∈Nk \in \mathbb{N}k−1k−1k-1 vvvλ(v)λ(v)\lambda(v)ΣΣ\SigmaA⊆VA⊆VA \subseteq VΣΣ\SigmaAAAmina∈Σ|{v∈A∣λ(v)=a}|mina∈Σ|{v∈A∣λ(v)=a}|\min_{a \in \Sigma} |\{v \in A \mid \lambda(v) = a\}| k∈Nk∈Nk \in \mathbb{N}、その構造について何を想定できますか?特別な方法で分解できますか?\ Sigma = \ {a、b \}の場合にはすでに困惑していますΣ={a,b}Σ={a,b}\Sigma = \{a, b\}が、一般的な有限ラベルセットの場合にも興味があります。 これをΣ={a,b}Σ={a,b}\Sigma = \{a, b\}で視覚化するには、GGGにラベルサイズkkkのアンチチェーンがないということは、少なくともkkk頂点aaaおよびkkk頂点bを含むアンチチェーンがないことを意味しbbbます。任意の大規模なアンチチェーンが存在する可能性がありますが、それらには最大でk-1個の例外までaaa要素またはbbb要素のみを含める必要があります。大きなアンチチェーンを禁止すると、DAGがaラベルの付いた頂点の幅が広い部分とbの幅が大きい部分の間で本質的に「交互」になるように強制する必要があるようです。k−1k−1k-1aaabbbラベル付けされた頂点、しかし私はこの直観を形式化することができなかった (もちろん、適切な構造的特性評価は、DAGの形状に加えて頂点のラベルについても説明する必要があります。なぜなら、すでにk≥1k≥1k …

1
頂点ラベル付きDAGのトポロジカルソートの列挙
レッツあること、非循環有向グラフ、とlet各頂点マッピングラベル付け機能もラベルにある有限アルファベットで。書く、トポロジカルソートの全単射であるからに(すなわち、の順序シーケンスで)ようにするたびに次いで(つまり、からへのエッジがある場合G=(V,E)G=(V,E)G = (V, E)λλ\lambdav∈Vv∈Vv \in Vλ(v)λ(v)\lambda(v)LLLn:=|V|n:=|V|n := |V|GGGσσ\sigma{1,…,n}{1,…,n}\{1, \ldots, n\}VVVVVV(v,v′)∈E(v,v′)∈E(v, v') \in Eσ−1(v)&lt;σ−1(v′)σ−1(v)&lt;σ−1(v′)\sigma^{-1}(v) < \sigma^{-1}(v')vvvv′v′v'その後、はシーケンスの前に出現します)。のラベルは、の単語です。vvvv′v′v'σσ\sigmaσ(1)⋯σ(n)σ(1)⋯σ(n)\sigma(1) \cdots \sigma(n)LnLnL^n 与えられた場合、トポロジカルなラベルを効率的に列挙したいと思います。トポロジカルソートのラベルを列挙する複雑さは何ですか?もちろん、指数関数的に多くなる可能性があるため、出力のサイズの関数として、または遅延の観点から複雑さを調べたいと思います。特に、列挙は多項式遅延で実行できますか?(または一定の遅延さえ?)(G,λ)(G,λ)(G, \lambda)GGG 全ての頂点場合には異なるラベルキャリー(同等または、頂点がある自体によって標識)、私は、ラベルが一定で列挙することができることを知っていることにより、時間を償却この結果にposetsの線形拡張を列挙する(これはDAGのトポロジカルな種類を列挙するのと同じことです)。ただし、頂点に任意のラベルが付けられている場合、非常に多くのトポロジカルソートが同じラベルを持っている可能性があるため、トポロジカルソートを列挙し、ラベルを計算してラベルを列挙する効率的な方法を取得することはできません。posetの用語では、ラベル付きDAGはラベル付きとして見ることができますGGG{1,…,n}{1,…,n}\{1, \ldots, n\}GGG(G,λ)(G,λ)(G, \lambda) そして、それらに関する列挙結果を見つけることができませんでした。 ここでの他の質問への回答のおかげで、いくつかの関連する問題の難しさをすでに知っています。特に、辞書編集的に最小限のラベルを見つけることはNPハードであることを知っています。また、特定のラベルが何らかのトポロジカルソートによって達成できるかどうかを決定するのがNP困難であることも知っています(この問題の難易度から:候補ラベルシーケンス与えられた場合、各頂点が位置で発生しなければならないトポロジカルソート求めます正しいラベルが現れる場所sssGGGsss)。しかし、これは列挙の難しさを意味するとは思いません。好きな順序で列挙することができます(必ずしも辞書式ではありません)。一定の遅延(最初に列挙するべき指数関数的に多くのシーケンスがある場合があるため)。 最初のラベルを列挙するのは明らかに簡単であることに注意してください(トポロジカルな並べ替えを行うだけです)。以外別のラベルを列挙するには、要素が位置で列挙されるようにしますここで、:すべてのそして、、そしてかどうかを確認トポロジカルソートがある位置にある明確PTIMEで行うことができ、。しかし、より多くのラベルを出力するにつれて、このアプローチを一般化する方法がわかりません。ssssssvvvVVVi∈{1,…,n}i∈{1,…,n}i \in \{1, \ldots, n\}si≠λ(v)si≠λ(v)s_i \neq \lambda(v)vvviiiGGGvvviii

3
ネットワークを介した効率的なDAG比較
分散バージョン管理システム(例えばMercurialのとGitの)効率的に有向非巡回グラフ(DAGの)を比較する必要があります。私はMercurialの開発者であり、2つのDAGを比較することの時間とネットワークの複雑さを議論する理論的な研究について非常に興味があります。 問題のDAGは、記録されたリビジョンによって形成されます。リビジョンは、ハッシュ値によって一意に識別されます。各リビジョンは、前のリビジョンのゼロ(初期コミット)、1(通常のコミット)、またはそれ以上(マージコミット)に依存します。ここではリビジョンが一例であるaためにe、各次々に行われましたが。 a --- b --- c --- d --- e グラフの比較は、誰かが履歴の一部しか持っておらず、欠落している部分を取得したいときに表示されます。私が持っていたと想像aするcと作られたxとyに基づいてc: a --- b --- c --- x --- y Mercurialのでは、私はどうなるhg pullとダウンロードdとe: a --- b --- c --- x --- y \ d --- e 目標は、グラフに多くの(たとえば、100,000を超える)ノードがある場合を識別しd、e効率的にすることです。効率は両方に関係します ネットワークの複雑さ:転送されたバイト数と必要なネットワーク往復回数 時間の複雑さ:変更セットを交換する2つのサーバーによって行われる計算の量 典型的なグラフは狭く、上記のような平行なトラックはほとんどありません。また、通常e、y上記のような少数のリーフノード(Mercurialではヘッドと呼びます)のみが存在します。最後に、中央サーバーを使用すると、クライアントにはサーバー上にないいくつかの変更セットが含まれることがありますが、サーバーは、クライアントが最後にサーバーから最後にプルした人​​に応じて、クライアント用に100以上の新しい変更セットを持つことができます。非対称溶液が好ましい:中央サーバは、クライアントに比べて少し計算を行う必要があります。

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