2016-11-10 7 views
4

私はそれが効率的に解決できるかどうかの質問にはい/いいえの答えを探しています。私たちが利用できるコンピューティング技術の現状では不可能だと確信しています。私は間違っていることを知ってうれしいです。だからここには何も行きません。サブセット2675番号のリストとの和

私は2576のリストを持っています。私は合計で44576.54の合計数の組み合わせを見つけようとしています。数字のリストには、5桁(2桁の精度)から8桁(2桁の精度)までの数字が含まれています。

私は本当にあなたの助けに感謝します!

+1

"イントロ"の場合+1。合理的な時間内にすべての組み合わせを見つけたい場合は、いいえ!しかし確かではない。多分どこかにソーサリーアルゴリズムがあります。 –

+3

リストに負の数値がありますか?そうでない場合は、最大で4桁の5桁の数字が合計に含まれ、6/7/8桁の数字はまったく使用できません。これにより、組み合わせの数が大幅に削減されます。浮動小数点で数値を指定すると問題が発生することに注意してください。数学的に正しい結果であっても、数値の合計が44576.54に正確に等しくなることはありません。すべてを100倍に増やし、整数だけを扱う方がよい。 – jasonharper

答えて

0

あなたは間違っています。古典的な動的プログラミングアルゴリズムは、現代のコンピューティングハードウェア上でこの問題を素早く処理します。

+0

正の整数でも?あなたは精緻化できますか? @David – ishan

+0

@ishanはい、正の整数ではありません(ほとんどの実装では配列のインデックスを別々にする必要があります)。 –

+0

ありがとうございました@DavidあなたはUR1または妥当な時間に問題を解決するのに役立つ資料を私に送ることができます – ishan

0

これは動的プログラミングアルゴリズムであり、選択された最適UTXOサブセットのエンジンのEmercoinエンジンで既に実装されています。 この解決方法については、source codeおよびarticleを参照してください。このアルゴリズムの

一般的な考え方は以下の通りです:

あなたは(長さがあなたの番号値である)長さの異なる「棒」で設定しています。 あなたは、ロッドの選択サブセット、4457654.

  1. あなたが旗のLINE、合計+ 1の長さ、すなわち4457655. LINEを作成してみましょう[I] = 1、もし合計サブセット値の「全体の長さを必要と値「i」の部分集合が見つからなければ、「i」が見つけられ、ゼロである。最初は、この配列全体がゼロで埋められます。これは、合計が見つかりません。

  2. Mark LINE [0]:= 1;これは、$ 0.00の合計が簡単に見つかることを意味します。これは空のサブセットです。

  3. 一方(LINE [4457654] == 0):

    • セットから次のロッドを得ます。
    • 配列の最後にこの棒を適用します。つまり、LINE [4457654]にあるロッドの端は、LINE [4457654 - ロッドの長さ]で始まります。
    • 配列の終わりから始まりに移動する棒:
    • LINE [棒の始まり] == 1の場合、LINE [棒の終わり]:= 1;
0

基本的にこの問題には2つのソリューションがあります

  1. 動的計画:その複雑さの合計* nが、あなたのケースで、これは日のために非常に大きく、あなたのプログラム文句を終了します。

  2. 戻るソリューション追跡:複雑さ2^nは、あなたのプログラムが文句を言わない年間の終わりを意味し、それはNP困難問題

と呼ばれている理由は、私は長い間、部分和問題に取り組んできたあります今私はn = 400でテストしたアルゴリズムを持っており、数秒で結果が得られます。 現在、私は論文を公開しています。入力を共有します。私はあなたにそれがどのサブセットであるかを知らせます、これはまた私が本当の問題のための私のアルゴリズムを確認するのを助けるでしょう。

ところで、サブセットの合計を取得する必要がある理由を教えてください。あなたのユースケースは何ですか?

関連する問題