質問: 整数の合計の組み合わせの最大化 基本的に、正の非ゼロ数のソートされたリスト、例えば{1,4,5}が与えられれば、可能な別個の組み合わせを最大にするためにリスト内の単一の数字を変更します。上記は、 1つ、4つ、5つ、6つ、9つ、10つ、すなわち6つの組み合わせである。 {1、2、5}となるように4から2に変更すると、1,2,3,5,6,7,8、つまり7つの組み合わせが得られます。 私は組み合わせの量を最大にするためにリストの単一の番号に追加するために番号xを見つける必要があります。 xは最小のabslout値でなければなりません。加算または減算することができます。 私は何度も指数関数的に実行される列挙によってブルートフォースを使ってやってきました。したがって、より大きな問題では実現不可能です。今私はそれをすばやく行う必要があります。 組み合わせの数を確認するだけで指数関数的な時間ですか?そして、私は正確な最適解を見つけなければなりません。 この問題を解決するためのキーワードは何でしょうか?私は再発を見つけようとしたので、動的プログラミングと何らかのブランチを使って爆発を制限することができましたが、それは役に立たないです。 私は、切断工場、サブセットの合計など、いくつかのアイデアを見つけることができるかどうかを確認するための他の組み合わせ最適化問題がたくさんあります。しかし、私はそれを取得しません。単に解を検証することは指数関数的な時間です。
回答: これはちょうどそれに刺すようです、私はコードを書いていないか、それについても何の証拠も試していません。 あなたは1つの値だけを変更することに限定されているので、私は、あなたがしようとしていないことを知っているが、私を聞いている*組み合わせを排除する最も簡単な方法は、リスト内の別の番号に追加します。したがって、 `1 + 4 = 5` であなたの組み合わせで失われるため、あなたの例 `1 4 5` したがって、私は何の番号のペアの結果セットの別のメンバーになるのかを照会します。これは、各番号を他のすべての番号と比較するときに `O(n ^ 2 lg n)`であり、そうすることで(ソートされた)番号のリストを検索して存在するかどうかを調べます。* *あなたの候補は「衝突」の数が最も多い候補です。衝突の可能性が最も高い番号にゼロ衝突番号を設定すると、最終結果が最大限に増加します。そこから、非衝突番号にするために、それに追加/減算する数字を見つけることが問題になります。私はこれを行うための適切な方法を働いていないが、私はそれが多項式時間で動的プログラミングで行うことができると思われる。* *あなたがネクタイを持っている別の深刻な問題があります。同時に検索する `n` の関係が最大になるので、これは最悪の場合、複雑さに余分な `* n` を追加することになると思います。したがって、pがある一定の多項式である `n ^ p` 時間で上記の問題を計算できると仮定すると、問題全体は `n ^(p + 1)`時間。* *これは確かに問題の厄介なものであり、私はこれが何らかの光を当てることができたことを願っています。 2ヶ月後、誰かがそれに刺す必要がありますよね? :)*