数値を複数の群に分ける最適な組み合わせを求める方法
次のような問題をCで記述するにはどのようにすればいいでしょうか?
要素数が不定の整数値配列がある。
この配列の各要素を、与えられた個数の群に分ける。
条件として、与えられた数値列で隣り合う数値しか同じ群に含めることは出来ない。
例:
数値列は{5,2,7,12,6,15,4}
群の個数を3とする。
(1) {5,2},{7,12,6},{15,4}
(2) {5},{2,7},{12,6,15,4}
(3) {5,2,7},{12},{6,15,4}
・・・
と複数の組み合わせがある。
これらの組み合わせのうち、各群の合計値が最も均等になるような組み合わせを求める。最大値と最小値の差が最小となる組み合わせを最も均等と考える。
上の例であれば、各群の合計値と、合計値の最大値と最小値の差は、
(1) {5,2},{7,12,6},{15,4} ==> 7,25,19 (25-7=18)
(2) {5},{2,7},{12,6,15,4} ==> 5,9,37 (37-5=32)
(3) {5,2,7},{12},{6,15,4} ==> 14,12,25 (25-12=13) ☆
のようになり、この3つの中で最も均等なのは
(3) {5,2,7}{12}{6,15,4}
となる。
実際は、これ以外の組み合わせでより均等となるものがあるかと思います。
この問題そのものが必要なわけではなく、この結果を利用して別のある問題を解決しようとしています。
数値の数が増えると組み合わせの数も大幅に増えて計算時間に影響すると思います。
全ての組み合わせを試すことなく答えにたどり着く方法があれば、考え方だけでも提示頂ければと思います。
補足
ご回答ありがとうございます! 同じ質問になってしまいますが、VBA以外で他に方法をご存知でしたら教えて頂けますか?