私は 2 セットの数字を取得しましたが、SET2には通常より多くのアイテムが含まれています。SET2のカウントがSET1のカウント 以上であることが保証されています。実際には、順序が重要であるため、入力はセットではなくリストです。
私の目標は、 SET2の数字を結合 (合計) / 並べ替えて、SET1とできるだけ同じにすることです。類似度は、すべての位置での偏差の合計として定義します。類似度の計算方法については、この投稿を参照してください。合計が小さいほど良い。
私の最初のアプローチは、すべての組み合わせを試して、最適なものを選ぶことでした. これは非常に小さなセット (特に 2 番目のセット) でのみ機能します。この投稿と Rawling からの回答を参照してください。良い組み合わせを得るためのよりスマートな方法はありますか?私は間違いなく最高のものを必要としません。結果として、良いものは問題ありません。空のサブセットを持つセットは明らかにナンセンスです。極端にバランスの取れていないセットは、私にはあまり有望ではないようです。SET1 は約 8 個のエントリを持つ傾向がありますが、最大 18 個のエントリを持つことができます。SET2 のカウントは、多くの場合、10 を超えます (最大 35)。2 つのセットの数値の合計は等しくなります (丸め誤差を除く)。
良い結果と悪い結果の例を次に示します (すべての可能性があるわけではありません)。
SET1 = { 272370, 194560, 233430 }; SET2 = { 53407.13, 100000, 365634.03, 181319.07 }
272370 | 194560 | 233430
---------------------------------------------------------------------
365634.03 | 100000 + 53407.13 | 181319.07 (best match)
365634.03 | 181319.07 | 100000 + 53407.13 (good)
365634.03 | 100000 |181319.07 + 53407.13 (ok)
53407.13 |365634.03 + 100000 | 181319.07 (bad)
53407.13 |365634.03 + 181319.07 | 100000 (bad)
. |365634.03 + 181319.07 | 53407.13 + 100000 (invalid)
53407.13 + 100000 |365634.03 + 181319.07 | (invalid)
前提を説明するのを忘れた場合、または説明が不明確または不完全な場合はお知らせください。また、別の例を提供できることを嬉しく思います。
前もって感謝します!