1
動的プログラミングは貪欲よりも決して弱くないのですか?
回路の複雑さの中で、さまざまな回路モデルのパワーを分離しています。 証明の複雑さでは、さまざまな証明システムの能力を分離しています。 しかし、アルゴリズムでは、アルゴリズムのパラダイムの力の間の分離はまだわずかしかありません。 以下の私の質問は、貪欲と動的プログラミングという2つのパラダイムでこの後者の問題に触れることを目的としています。 要素の基本セットと、そのサブセットの一部のファミリが実行可能なソリューションとして宣言されています。このファミリは下向きに閉じていると仮定します。実行可能なソリューションのサブセットは実行可能です。地上要素への非負の重みの割り当てを考えると、問題は実行可能な解の最大合計重みを計算することです。 欲張りアルゴリズムは、空の部分解で始まり、各ステップで、可能な限り最大の未処理要素を追加します。つまり、拡張解がまだ実行可能な場合です。よく知られているRado-Edmondsの定理は、このアルゴリズムが実行可能な解のファミリーがマトロイドである場合、すべての入力の重みに対して最適な解を見つけると述べています。 大まかに言えば、DPアルゴリズムは、MaxおよびSum(またはMinおよびSum)操作のみを使用する場合、単純です。より具体的には(Joshuaが示唆するように)、単純なDPアルゴリズムによって、fann-2 MaxゲートとSumゲートを持つ(max、+)回路を意味します。入力は変数であり、その私私i番目は番目の要素に与えられた重みに対応します。このような回路は、実行可能なソリューションの最大総重量を計算するだけで、このような問題を解決できます。しかし、指数関数的に多くのそのようなソリューションがある場合、これは非常にやり過ぎになる可能性があります(ほとんどの場合そうです)。私私i 質問1: 単純なDPアルゴリズムで、対応する最大化問題を解決するために超多項式数の演算が必要なマトロイドはありますか? コメント(2015年12月24日追加):この質問は既に回答済みです(以下を参照)。圧倒的多数であっても、このようなマトロイドがあります。 次の質問では、近似問題のために貪欲なDPと単純なDPを分離するように求めています。で最大量のマッチング問題、実現可能な解決策の家族は完全な二部では、すべてのマッチングで構成さグラフ。エッジへの重みの指定された割り当ての目的は、マッチングの最大重みを計算することです(重みは負でないため、これは常に完全なマッチングになります)。 n × nn×nn\times n 単純な欲張りアルゴリズムは、要因2内でこの問題を近似できます。常に、最大重量のまだ表示されていないばらばらのエッジを取るだけです。得られた重量は、最適重量の少なくとも半分になります。 質問2: 単純なDPアルゴリズムは、多項式的に多くのMaxおよびSum演算のみを使用して、因子2内のMax-Weight Matching問題を近似できますか? もちろん、エッジの最大重みの倍を出力する単純なDPアルゴリズムは、因子内でこの問題を近似します。しかし、はるかに小さい係数が必要です。係数を達成することはできないと思いが、繰り返しますが、これをどのように証明するのでしょうか? nnnnnnn /ログnn/ログnn/\log n 関連:Max-Weight Matchingのいとこは、Assignment問題です。完全一致の最小重みを見つけます。この問題は、操作のみを使用する線形プログラミング(いわゆるハンガリー語アルゴリズム)によって(正確に)解決できます。しかし、パーマネント関数を計算するモノトーンブール回路のサイズのRazborovの下限は、任意の(!)有限要素内でこの問題を近似する(min、+)回路が操作。したがって、最小化問題の場合、単純なDPアルゴリズムは線形計画法よりもはるかに弱い可能性があります。上記の私の質問は、このようなDPアルゴリズムがGreedyよりもさらに弱いことを示すことを目的としています。 O (n3)O(n3)O(n^3)nΩ (ログn )nΩ(ログn)n^{\Omega(\log n)} 誰かが同様の質問を誰かが検討しているのを見たことがありますか? 追加(2015年12月24日):質問2は、因子貪欲アルゴリズムで近似できる特定の最大化問題(Max-Weight Matching問題)を、単純なポリサイズでは近似できないことを示すことを目的としています。同じ係数 DP 。一方、私は貪欲と単純なDPの間の弱い分離を得ました:すべてのには、因子貪欲なアルゴリズムで近似できる明示的な最大化問題がありますが、ポリサイズの単純なDPアルゴリズムは、より小さい係数この問題を近似できます(こちらを参照)r = 2r=2r=2r = o (n / log n )rrrrr = o (n / logn …