頂点に実数の重みを持つ有向非巡回グラフがあるとします。DAGのトポロジカルな順序付けを見つけたいと思います。トポロジカルな順序付けのすべてのプレフィックスについて、重みの合計が負ではありません。または、順序理論の用語を好む場合、重み付き半順序があり、各プレフィックスが負でない重みを持つような線形拡張が必要です。この問題について何がわかっていますか?NP時間完全または多項式時間で解けるか?
頂点に実数の重みを持つ有向非巡回グラフがあるとします。DAGのトポロジカルな順序付けを見つけたいと思います。トポロジカルな順序付けのすべてのプレフィックスについて、重みの合計が負ではありません。または、順序理論の用語を好む場合、重み付き半順序があり、各プレフィックスが負でない重みを持つような線形拡張が必要です。この問題について何がわかっていますか?NP時間完全または多項式時間で解けるか?
回答:
さて、私の答えは、Pでこの問題を解決できれば、別の未解決の問題も解決できることが判明した私の質問です: 正のトポロジカル順序付け、テイク3
編集:この問題もNP完全であることが判明したため、DAGに2つのレベルしかない場合、つまり2つのエッジを持つ有向パスがない場合、問題はすでにNP完全です。
問題を正しく理解していれば、完了時間の重み付き合計(1 | prec | \ sum wc)を最小化するための優先度制約付き単一マシンスケジューリング問題は、興味のある問題にまで減らせると思います。問題1 | prec | \ sum wcにはn個のジョブがあり、それぞれに負ではない重みと処理時間、ジョブに対する姿勢があり、ジョブの完了時間の重み付き合計が最小化。各ジョブの処理時間は1に等しいと仮定しても、問題はNP完全です。
常に最小の重みで最大の要素(半順序で)を取得するとどうなりますか。要素を使い果たした後、出力として逆順に返します。
この問題は、多くの決定木を思い出させます。常に最も有望なパスを選択しようとするこのタイプのソリューションを検討しますが、サブグラフ全体を見ると:
シンクノードから始めて、ソースに向かって1レベルずつ作業します。これを行う間、すべてのエッジに重みを付けます。この重みは、「支払う」必要がある最小量を表す必要があります。そうしないと、エッジが指すノードから開始してサブグラフを走査することで「得る」ことになります。レベルi + 1にいて、レベルiに移動しているとします。これは、レベルiのノードを指すエッジに重みを割り当てるために行うことです。
次に、次のように注文を作成します。
アイデアは、後で負の重みのサブグラフのコストを負担できるようにするために、最初に可能な限り多くのゲインを提供するサブグラフをトラバースすることです。