正のトポロジカル順序


45

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


4
このグラフで欲張りアルゴリズムを試してください:1-> 2-> 3、1-> 4-> 5、頂点の重みは1:+2、2:-2、3:+3、4:-1 、5:-2。貪欲なアルゴリズムはv1で始まり、v4を選択してからスタックします。正しい順序はv1、v2、v3、v4、v5です。
ロビンコタリ

2
「JeffEやその他のFrechet距離問題のいくつかが見ている」—素敵な抽象化!他の人のために、ここに1つのバージョンがあります。エッジウェイト平面グラフGと、2つの頂点sおよびtnが外面に与えられているとします。基本的な移動のシーケンスによって、1つの境界パスをsからtに変換します。移動するたびに、現在のパスが面の境界との対称的な差に置き換えられます。進化するパスの最大長を最小化するmveシーケンスをどれくらい早く見つけることができますか?
ジェフ

3
剛、すみません、コメントしながら改行を追加しようとすると、コメントが途切れてしまいました。だから、あなたの手首にしっかりと結び付けられたひもがあり、それをひっくり返すことができるかどうかを知りたいのです。手首は多角形のメッシュとして表され、そのセルは半順序の要素です(文字列により近く、順序の後にオフに近い)。セルの重みは、内部境界と外部境界の長さの差です。
デビッドエップシュタイン

1
@David:説明をありがとう。今回は、それが現在の質問とどのように関連しているかを理解でき、興味深いです!
伊藤剛

3
あまり役に立たないが楽しい観察:この問題は、各ジョブの処理時間が負になる可能性がある期限と優先順位の制約がある単一マシンのシーケンス問題と同等です。非負の処理時間では、この問題はP(Lawler and Mooer 1969 jstor.org/stable/2628367)にあり、ソリューションが存在する場合、処理時間に依存しないソリューションが存在します。一部のジョブの処理時間が負の場合、これは明らかに壊れています。
伊藤剛

回答:


18

この問題は、最大累積コストを最小化する順序付け、Garey&Johnsonの問題[SS7]と非常に似ているようです。機知に:

TTc(t)ZtTc(t)<0KZ

σTtTtσ(t)σ(t)K

Kc(t){1,0,1}tT


7
K=0cKKc1

@mhum:関連する結果に関する技術レポートを作成中です。引用したいと思います。あなたの本当の名前を教えてもらえますか?あなたは...あなたは私にそれを電子メールで送信、または単に滞在anonができることを願うならば
domotorp

9

さて、私の答えは、Pでこの問題を解決できれば、別の未解決の問題も解決できることが判明した私の質問です: 正のトポロジカル順序付け、テイク3

編集:この問題もNP完全であることが判明したため、DAGに2つのレベルしかない場合、つまり2つのエッジを持つ有向パスがない場合、問題はすでにNP完全です。


3

問題を正しく理解していれば、完了時間の重み付き合計(1 | prec | \ sum wc)を最小化するための優先度制約付き単一マシンスケジューリング問題は、興味のある問題にまで減らせると思います。問題1 | prec | \ sum wcにはn個のジョブがあり、それぞれに負ではない重みと処理時間、ジョブに対する姿勢があり、ジョブの完了時間の重み付き合計が最小化。各ジョブの処理時間は1に等しいと仮定しても、問題はNP完全です。


それは間違いなく興味深い可能性です。しかし、最適化基準(完了時間の合計を最小化)が制約(非負の接頭辞)に変換されるように、どのように削減を行うのでしょうか?
デビッドエップシュタイン

このスケジューリング問題のNP完全性の結果はわかりませんが、ジョブ完了時間の加重合計が最大Kになるように線形拡張があるかどうかを決定する決定問題を指すと思うので、私は考えていませんここでは、最適化基準と制約の区別が重要です。ただし、現在の問題の完了時間の加重合計に対する制約をどのように表現するかは理解していません。
伊藤剛

削減は当初考えたほど簡単ではないと思います。私の答えはもうわかりません。
モナルド

前回のコメントでエラーに気付いたところです。私がそれを投稿したとき、私は重みのない合計に対する制約を表現することは簡単だと思ったので(重みの強調)、それは完全に間違っていました。
伊藤剛

2

常に最小の重みで最大の要素(半順序で)を取得するとどうなりますか。要素を使い果たした後、出力として逆順に返します。


問題は、半順序を逆にし、すべての重みを無効にする変換では不変です。そのため、Robin Kがコメントで反例を示した前方貪欲アルゴリズムとどのように異なるかはわかりません。
デビッドエップシュタイン

しかし、この方法は彼の例では機能します。最初に頂点5が選択され、次に頂点4、3、2、最後に1が選択されます。したがって、最終順序は1、2、3、4、5になります。この方法が機能することを証明するのは難しいとは思わない。最後の位置に最小重量の最大要素(シンク)を持たないソリューションがあるとします。次に、このような要素の位置を最後に変更し、残りをそのまま保持するだけで、このプロパティを持つ別のソリューションを見つけることができます。残っているものについて帰納法を進めると、正式な証拠が得られます。
ダニエルマーティン

うん...それは動作しません...それぞれ1、4、-7、6、3の重みで1-> 2-> 3、1-> 4。
ダニエル・マーティン

1

この問題は、多くの決定木を思い出させます。常に最も有望なパスを選択しようとするこのタイプのソリューションを検討しますが、サブグラフ全体を見ると:

シンクノードから始めて、ソースに向かって1レベルずつ作業します。これを行う間、すべてのエッジに重みを付けます。この重みは、「支払う」必要がある最小量を表す必要があります。そうしないと、エッジが指すノードから開始してサブグラフを走査することで「得る」ことになります。レベルi + 1にいて、レベルiに移動しているとします。これは、レベルiのノードを指すエッジに重みを割り当てるために行うことです。

  1. edge_weight = pointing_node_weight。
  2. 最大の重みを持つ「ポインティングノード」から始まるエッジを見つけます。この重みをnext_edge_weightにします。
  3. edge_weight + = next_edge_weight

次に、次のように注文を作成します。

  1. Sを検索フロンティア、つまり、次から選択するノードのセットとします。
  2. (node_weight + maximum_edge_weight)が最大化されるようにノードを選択します。
  3. グラフとSからノードを削除します。ノードの「子」をSに追加します。
  4. グラフが空でない場合は、手順1に進みます。
  5. 停止します。

アイデアは、後で負の重みのサブグラフのコストを負担できるようにするために、最初に可能な限り多くのゲインを提供するサブグラフをトラバースすることです。

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