私が最も長いパスについて学習し、問題が最適なサブ構造を欠いていたため、一般的なグラフで最長のパスは動的計画法によって解くことができないという事実に出くわしました(私は文が最長に修正する必要があると思われた簡単な一般的なグラフにパスされていない解けることにより、動的プログラミング)。
それらが単純である必要があると想定する場合(何らかの理由でこれは必要ですが、まだ理解していません)最長であれば、反例を作成するのは簡単です。4つのノードA→B→C→D→Aを持つ正方形グラフを考えてみます。
AからDへの最長パスは、明らかにA→B→CDです。ただし、BからCへの最長パスはB→A→D→Cであり、パスB→C(これは、この場合、実際には最短経路です!)。
これは、パスを単純にする必要があるためにのみ機能するようです。最適な部分構造が存在しないことを証明するために、パスは単純である必要があると想定する必要がありますか?
私は反例が良い証拠/証拠であるはずだと思います(私はそれを否定しません)、私は反例が非常に啓発的であるとまったく思いません。なぜそれが最適な部分構造を許可しないという点を証明するのかはわかりますが、最長経路の最適部分構造がないはずであることが明らかである理由を実際に理解または直感することができません。たとえば、切り取りと貼り付けの引数が機能しないのはなぜですか?サブパスが最も長くない場合は、より長いパスをそのまま使用してください。それはとても魅力的に聞こえます、つまり、私たちがより長いものを配置した場合、もちろんそれは長くなるはずです...しかし、これは何らかの理由で間違っています。この例は実際にDPが決してできないことを実際に証明していますか最長(シンプル?)パスを効率的に解決しますか?私はそれがPにないという一般的な証明を要求しません(それはP対NPソリューションを求めている可能性があるため)。私はちょうどそれその証拠の後だ解くことができないDPによって(またはDPは、この最長経路問題を解決することはできないというか、問題がないことを、少なくとも非常に強力な証拠ではない最適なサブ構造を持っています)。
私はウィキペディアで問題がNP-Hardであることを明確に見てきました。つまり、おそらく高速なアルゴリズムはありません。それが、最適な部分構造に明らかに欠けているべき証拠を提供するために存在する証拠/直感の唯一のタイプであるかどうか(または欠けていない場合、問題をより速くするために使用できないこと)はわかりません。それが高速の動的プログラムで解決できないことを示す唯一の方法ですか?
シンプルが必要な理由です私たちがその要件を設けない場合、問題は些細な/興味のないものになるのですか?言い換えると、サイクルがある場合、そのサイクルから到達可能なすべてのノードへの最長パスの問題が(そのサイクルへのパスを見つけることによって)解決されています。到達可能なサイクルがないノードの場合、非循環グラフがあり、これはDPで解決できます(重みが正の場合)。さらに、サイクルがある場合は、自動的に物事が最適な部分構造を持つようになりました(私はそう思います)。最長パスは、2つのケースをカバーする最長パスで構成されているためです。どちらにも最適な部分構造が含まれています。だから、問題は単純なパスを必要とせずに取るに足らないものになったのですか?または、何か不足しているのですか、それとも単純なパスが必要なのかについてのより良い説明がありますか?しない一般的な最長パスは DPで解決できますか?
また、DPを使用できないことを保証するために必要な要件は100%わかりません。負のエッジの重み、正の、重み付けされていない、有向、無向である必要がありますか?要件は何ですか?