自然数Xのマルチセットが与えられた場合、すべての可能な合計のセットを考えます。
例えば、ながら 。
(和の入力セットのサイズに関して測定される)逆演算を計算するための最も効率的なアルゴリズムは何ですか?具体的には、次のいずれかを効率的に計算できますか?
- 特定のセットが有効な合計セットであるかどうか。(例えば、、有効であるが、ではありません。)
- 指定されたセットに合計されるマルチセット。
- 最小の所与のセットへの合計マルチセット。(たとえば、と両方の合計が、前者が小さいです。)
自然数Xのマルチセットが与えられた場合、すべての可能な合計のセットを考えます。
例えば、ながら 。
(和の入力セットのサイズに関して測定される)逆演算を計算するための最も効率的なアルゴリズムは何ですか?具体的には、次のいずれかを効率的に計算できますか?
回答:
ソリューションには2つの部分があります。最初に最小集合を発見し、次にそれがべき和集合を表すことができることを証明します。ソリューションは、プログラミングの実装に合わせて調整されます。
合計(マルチ)セットから最大要素を見つけます。P、潜在的な最小(マルチ)セットは最初は空です。
一つだけのグループ、表現がない限りメートルまで追加和のペアとしてすべての可能な方法で、Mは、S 、I 、J = { (I、J)| a i + a j = a m }
合計セットのすべての要素が含まれていることを確認します。
最大の要素の検索の全てからS I jのそれぞれについて、次のプロパティで(一緒にという意味)S I jは、sがのいずれかであるS I 、J、または我々は見つけることができるのpので、合計のセットからのP + a sはS i jにあります。
sが含まれていない場合は、合計a s + a p、削除したp + SからSのi個のjは(または単にそれを無視するようにマークを設定)を挿入PとAを代わりにS i j のs。
すべての要素が存在する場合、すべてのS i jからその要素を1回削除し(またはマークを設定して、それを無視し、もう触れないようにします)、潜在的な最小セットPの要素のリストに追加します。
すべてのが空になるまで繰り返します
一部が空でないままで続行できない場合は、すべてのS i jの最大値で再試行してください。
削除せずに再帰的なステップを再作成し、上のパワーセットカバレッジアルゴリズムを続行します。(これの前に、Pが2つの要素の合計として表せないすべての要素を含むことを確実にチェックできるので、確実に基本セットになければなりません。たとえば、最小要素はPになければなりません。)
(10.アルゴリズムの目標である最小集合解には、同じ数の繰り返しを複数含めることはできません。)
例:
合計のセットからの2つの数値の合計として、あらゆる方法で15を表します。
すべてのグループにあるか、合計として表すことができる最大数を見つけてください。明らかに8から検索を開始できますが、それ以上のポイントはありません。
最初のグループの13は13 = 8 + 5なので13は問題ありませんが、合計のセットに12 = 8 + 4を作る4がないため、2番目のグループの12はうまくありません。次に7を試します。しかし、すぐに13はカバーできず、6はありません。
次に5を試します。13= 5 + 8、12 = 5 + 7、10 = 5 + 5、最後の8 = 5 + 3または7 = 5 + 2のいずれかで、両方ではありません。グループは次のとおりです。
5はすべてのグループで繰り返されるため、を抽出します。各グループから5回だけ抽出します。
明らかに、5より高くなるポイントはないため、5を再試行します。8 = 5 + 3、7 = 5 + 2なので、すべて問題ありません
繰り返しているため、すべてのグループから1つの5を再度抽出します。(これは一般的ではありませんが、我々の場合は故意に私たちは繰り返しを持っている場合には何をすべきかを表示するために作成されています。)
ここで、3で試して、5 = 3 + 2にします。グループに追加します。
それらはどこでも反復され、我々は微細であるため、今3及び2を抽出とグループが空です。
ここで、削除せずに再帰ステップを再作成する必要があります。これは、から要素を実際に削除せずにPに配置し、それ以上変更しないようにマークするだけで上記を実行することを意味します。
((5 、8 )、2 )、((5 、7 )、3 )、((5 、5 )、5 )、((5 、3 )、7
このパートの目的は、見つかった最小セットが電力合計セットをカバーできるかどうかを確認することです。見つかったソリューションは、指定されたすべての合計をカバーできますが、それらはパワーセットの合計ではない可能性があります。(技術的には、見つかった最小セットから単純に電力合計セットを作成し、電力セットの指示に従って各合計が初期合計セット内にあるかどうかを確認できます。 。この部分は、再帰を巻き戻しながら実行できます。)
エンコーディングの場合:2が1、3が2、5が4、そして別の5が8
3 + 5の合計を表します から2番目と3番目の要素をカバーしています 。これらの要素の合計8は、初期合計リストにリストされています、すべてが順調です。
2 + 3 + 5の合計を表します の最初の3つの要素をカバーしています 。これらの要素の合計10は、最初の合計リストにリストされているため、すべて問題ありません。
2 + 3 + 5であり、10がリストにあります。 は3 + 5で、8はリストにあります。
バイナリ表現が見つからない合計に対応する場合、解決策がないことを報告します。
すべて順調 解決策です。最小限のソリューションでもあります。
合計がパワーセットの完了をカバーするかどうかをチェックするアルゴリズムを提供する必要がありました。これはバイナリ展開に隠されています。たとえば、最初の例から8と7を除外した場合、最初の部分が解決策を提供し、2番目の部分のみが合計の欠落した組み合わせを報告します。
可能な最小セットを発見する最初の部分は に来る :私たちは見回しています 要素 持っている回 バイナリ検索。
最後の部分は再帰復帰で行われ、特別な努力を必要としません。 要素、バイナリ形式が必要です そして、追加が1つあり、合計がリストにあるかどうかを検索するので、一緒に再び約 。
べき和セットの要素数が、基礎となるセットの最大要素のパーティション数に対応すると仮定すると、複雑さは約 。2つのいずれも、最大の要素を見つけるために初期ソートを正当化します。
アルゴリズムの一部は、線形時間で合計のペアを見つけることができると想定しており、これにはソートが必要です。
間違った足で開始した場合、アルゴリズムの最初の部分は失敗する可能性があります。例えば 基本的な解決策があります アルゴリズムを6から開始する場合に取得します。ただし、手順4では何もしないため、アルゴリズムを7から開始できます。理由は、7は7 = 4 + 3であり、4と3はソリューションに含まれているからです。そのため、ロックされたアルゴリズムは常に低い初期値で再試行するだけで解決策がないことを意味するわけではありません。その場合、可能な値に関するいくつかのアイデアは残りの部分に隠されます。そのため、失敗した場合にそこから開始することをお勧めします。
別の例では、5からアルゴリズムを逃して開始すると、次のようになります。 ただし、これには2は含まれません。
このアルゴリズムは、次のような導出ソリューションを提供しないことに注意してください。 、ソリューションで6を4と2に変えるだけで得られました 。これらのバージョンをカバーする特別なルールがあります。
このアルゴリズムの目的は、すべてを正しく開始した後にソリューションを提供することです。
ステップ4は、この方法でアップグレードできるものです。最大の代わりに、指定された条件を満たすすべての要素を降順で試すことができます。それぞれに個別のブランチを作成します。一部のブランチが解決策を提供しない場合は、キャンセルします。
例えば 私たちは最初のラウンドで試すことができます それらはすべて最初のテストに合格しているため、別々の方法で。(2つまたは3つを使用する理由はありません。これらは基礎となるセットに存在する必要があることがわかっているためです)。これにより、複数の基礎となるセットを検出するフルカバレッジソリューションが作成されます。
もう1つは、ケースが最小の場合、複数回の繰り返しはできないことがわかっているため、これをアルゴリズムに組み込むことができます。
全体として、ステップ4の条件は、すべてのグループで数値が繰り返されるか、合計を作成する必要があるため、指数関数的な直接の水域から抜け出すのに十分な強さです。これは、すべての組み合わせを試し、一致するものが見つかるまでそれぞれを設定します。
注:これは一般的にはまったく機能しません。以下のUriの反例を参照してください。
特定のセットで少なくとも1.および2.を達成する1つの方法 (最小には微調整が必要です)は(ソート 最初に、必要に応じて):
各再帰ステップで、セットのサイズは少なくとも減少します (最小の要素を除外するため )、したがって、ステップ数は 。各ステップには、現在のセットに対する単一の反復が含まれます。 総複雑度(算術演算の単位コストを想定)。
最小限のソリューションを見つける(これは必ずしも一意ではないことに注意してください。たとえば、 我々は持っています そして )やや複雑です:最小値を見つけた後 、算術の進行を分析します に 、それらの1つがシングルトンである場合は拒否し、そうでなければ、 ; 進行の長さが奇数の場合、連続するメンバーのペアを選択する必要があります。したがって、一意性はありません。