PARTITION用の高速な多項式時間アルゴリズム


8

2つのサブセットの合計が可能な限り近くなり、セットのカーディナリティーが等しい(nが偶数の場合)または1だけ異なるように、Nの指定された数値(等しくても等しくなくてもよい)を2つのサブセットに分割したい( nが奇数の場合)。

私はこれを擬似多項式時間で実行できると思います。ここで、はセット内の数値の合計です。AO(n2A)A

これよりうまくできますか?つまり、で時間で実行される疑似多項式時間アルゴリズムはありますか?c < 2O(ncA)c<2

前もって感謝します!


1
ナップザックの特殊なケースとして、FPTASがあることに注意してください。ELLawlerなどを参照してくださいナップザック問題の高速近似アルゴリズム
Mathieu Chapelle、2011年

1
@Oleksandr、より良い意味では、O(nA)で実行される疑似多項式アルゴリズムがあります。申し訳ありませんが、ラテックスでは投稿できません。
Firebrandt 2011年

4
この質問は小さすぎるという境界にあると思います。たとえば、「2つのセットのカーディナリティが同じでなければならないという追加の制限があるパーティションの問題は、まだNP完全ですか?」典型的な宿題の質問になる可能性があり、答えを書き留めておくと、計算の複雑さの一部のコースに悪影響を与える可能性があります。
伊藤剛2011年

6
これは初級すぎるのですか?明白なアプローチはを与え、問題は時間内に実行されるより良いアルゴリズムがあるかどうかですここで。私の推測では、これは未解決の質問です。O n c A c < 2O(n2A)O(ncA)c<2
Peter Shor、2011年

3
@Firebrandt:私はあなたの元の質問を編集して私のバージョンの説明を追加しましたでをし。これはおそらく未解決の質問だと思うので)。必要に応じて、戻してください。あなたのコメントで明らかになったように、質問は明らかに研究レベルのものだと思います。O n c A c < 2 O n A O(nA)O(ncA)c<2O(nA)
Peter Shor、2011

回答:


7

時間で決定問題を解決できます。O~(nA)

数列をます。定義セットは、このようなことであることをのIFFが存在するサブシーケンス長さのの合計その。を計算した場合、問題を解決するためにを実行するには、追加時間が必要です。F SI J F S SのJ I F S O N A F SSFS(i,j)FSSjiFSO(nA)FS

場合と、パーティション、二つのサブ配列されている、その後、S 2 SS1S2S

FS=FS1+FS2

ここで、はミンコフスキー和であり、タプル間の加算は座標的に定義されます。A+B={a+b|aA,bB}

主張:およびからを計算するには、時間かかります。F S 1 F S 2 O| S | A FSFS1FS2O~(|S|A)

証明:サイズ 2つのテーブルに2D畳み込みを適用します。A×|S|

アルゴリズムは、シーケンスを2つの等しいサイズのシーケンスに分割し、それぞれに再帰を適用して、結果のミンコフスキー和を求めます。ましょう、アルゴリズムへの入力がある場合、時間を実行して、最悪の場合での要素及び上部和で結合しています。我々は 示す。N A T AN = 2 T AN / 2 + A ON T AN = ON A TA(n)nA

TA(n)=2TA(n/2)+AO~(n)
TA(n)=O~(nA)

非表示の係数はです。ログをN ログN AloglognlognA


3

誰かが因子を気にしている場合は、注意深く分析することで、Chaoのアルゴリズムの時間の複雑さがことを証明でき。O n A log n A ログOログ

証明。再帰ツリーの偶数層で、セットを2つの等しいサイズのセットとにします。これにより、 および再帰ツリーの奇数番目のレイヤーで、セットを2つの「等しく合計された」セットとに分割します。正確には、合計セットを2つのセットと分割し、それぞれの合計がになるようにします。ささいな動的プログラミングでその要素を処理できます。S 1 S 2 T en A = T on / 2 A '+ T on / 2 A A '+ O n A log n A S S 1 S 2 S A S 1 S 2ASS1S2

Te=To/2+To/2+Oログ
SS1S2SS1S2O A T on A = T en 1A / 2 + T en n 1A / 2 + O n A log n A n 1 = | S 1 | T n A/2O。これにより、 ここで、。したがって ここで、、、および。これによります。
To=Te1/2+Te1/2+Oログ
1=|S1|Σ 4 iは= 1、N IN Σ 4 I = 1 A IA I N IをN / 2 A IA / 2T n A = O n
TΣ=14T+Oログ
Σ=14Σ=14 /2 /2T=Oログ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.