これは興味深い問題です。私は答えを説明するために1..10の数字を3つのグループに分けてあなたの例を使用します。このソリューションは、任意の数のセットと任意の数のグループに適用されます。 sourseのうち、数字の集合のサイズが大きいときは、ブルートフォースのアプローチを使用できないことがあります。それでも、大量の数字は同様の方法で扱うことができますが、それ以降はそれを扱うことができます。
私たちはM個の連続した数字(1.M)がセット内にあり、それらをN個のグループに分けたいとします。
最初に決定するのは、各グループの合計を比較する値です。これは、単純にグループの数で除算された数の集合の和N.
例のsumOf(1..M)= 55とN = 3のため、55/3 = 18.33はそれぞれグループは合計する必要があります。グループ合計と18.33の差を最小にしたいとします。
もう1つの例として、数字セット1..20を2つのグループに分けたい場合は、グループ合計とsumOf (1..20)= 210 2つのグループで割る= 210/2 = 105
次のステップは、すべての可能なグループを見つけることです。これは、連続する数字を含む子孫の制限を除いた別の興味深い問題です。グループの組み合わせの合計数は、あなたが期待するほど多くはありません。
組み合わせを見つけることは再帰的な問題であり、一般の方程式を解くのは簡単です。
簡単なケースから始めることができます。セット内の10個の数字の組み合わせ(1..10)。まあ、1つのグループしかありません。数字(1..10)
ここでは、10個の数字に2つのグループの組み合わせがいくつありますか。答え、すなわち
(1),(2..10)
(1..2) (3..10)
(1..3) (4..10)
(1..4) (5..10)
(1..5) (6..10)
(1..6) (7..10)
(1..7) (8..10)
(1..8) (9..10)
(1..9) (10)
そこで、サイズMのセットは、グループのM-1の組み合わせを有する、M-1、10-1 = 9です。これが再帰の基礎です。
10個の数字に3つのグループの組み合わせがいくつありますか。
まあ、最初のグループは最初のグループとしてこれらのいずれかを考えると、次の
(1),(1..2),(1..3) ,(1..4) ,(1..5),(1..6) ,(1..7) ,(1..8)
のいずれかになり、2基の組み合わせは、残りの数字に存在するどのように多く出て作業することができます。
3つの最初のグループを=(1)とします。 9つの数字が残っており、これらが2つのグループの9-1 = 8つの異なる組み合わせを作ることができることを知っている。 3つの最初のグループ=(1..5)とする。 5つの数字が残っており、これらは5-1 = 4つの異なる2つのグループのグループを作ることができます。
ので、合計で我々は(SumOf(1..8)を与える
(1) -> 8 combinations
(1..2) -> 7 combinations
(1..3) -> 6 combinations
(1..4) -> 5 combinations
(1..5) -> 4 combinations
(1..6) -> 3 combinations
(1..7) -> 2 combinations
(1..8) -> 1 combinations
、または一般的に合計(1..M-2)、基の組み合わせを持っています。SumOf(1 ..8)= 8 * 9/2 = 36
したがって、各グループに連続する数字が含まれている10個の数字に3つのグループの36の組み合わせがあります。
を3つのグループに分けて100個のグループに分けてsumOf(1..98)= 98 * 99/2 = 4851個のグループを組み合わせると、Mが増えるほどMの値が増えますブルートフォース法は不可能かもしれない。
上記のアプローチを使用して、単純な再帰アルゴリズムを設計して、セット(1..M)内のグループのすべての組み合わせを取得することができます。
また、一連のM個のグループ内の任意の数N個のグループに対して簡単な方程式を解くことができます。たとえば、10の数字で4つのグループに移動した場合、最初のグループが(1..3)のような状況があり、残りの7つのグループの3つのグループの組み合わせが見つかります。合計(1..M-2)=合計(1..5)などがあります。
とにかく、問題に戻ってください。あなたはグループのすべての組み合わせを持っているので、グループを反復して各組み合わせのSADを計算し、SADを最小にするものを選ぶことができます。
組み合わせ数が非常に多く、それぞれの組み合わせを見ることができない場合は、ランダムに選択するグループにブートストラップするか、ランダムに選択した組み合わせから始めてあるグループから別のグループにランダムに番号を移動し、最も低いSADを持つグループを保持します。 SADのそれ以上の改善が見られなくなるまで、このステップを続けます。
@Robert Kingが示唆するように、1つの組み合わせから始めて、あるグループから別のグループに番号を移動することで改善することができます。
入力と出力の例をいくつか挙げることができますか? – Paul
この問題のステートメントが意味を成していると私は理解できません。 「各グループの合計は、これらの合計の平均値に最も近い」と言います。グループの合計のばらつきを最小限に抑えたいということですか?これが当てはまる場合、私はグループが非常に不均衡になることを期待しています。 –