それぞれ値が 1<=X<=10^6 の N 個の整数を含むセット S があります。問題は、セット S を k 個のパーティションに分割することです。パーティションの値は、そこに存在する要素の合計です。分割は、セット S の合計値が k 個の分割に均等に分配されるように行われます。公正さの数学的意味も定義する必要があります (たとえば、目的は、集合 S の平均値からのパーティションの値の標準偏差 (つまり、sum(S)/k) を最小化することである可能性があります)。
例: S = {10, 15, 12, 13, 30, 5}, k=3
適切なパーティショニングは、{30}、{10, 15}、{12, 13, 5} です。
不適切なパーティショニングは {30, 5}、{10, 15}、{12, 13} です。
最初の質問は、あるパーティションが他のパーティションよりも優れている条件を数学的に表現することです。2番目の質問は、問題を解決する方法です。問題は NP-Hard です。ヒューリスティックはありますか?
N <= (k*logX)^2 を解決しようとしている問題で、K は 2 から 7 まで変化します。
================================================== ================================
他の関連する SO の質問に基づいて、分布を評価するための 2 つの合理的な関数があります。
a) 最大値を持つパーティションの値を最小化します。
よく考えてみると、これは良い指標ではありません。セット {100, 40, 40} を 3 つのサブセットに分割するとします。このメトリックは、次の 2 つの分布を区別しませんが、一方が他方よりも明らかに優れています。
分布 1: {100}、{40}、{40} および分布 2: {100}、{40、40}、{}
b) 特定のパーティション内の任意の 2 つの値の差の最大値を最小化します。つまり、max|AB| を最小化します。任意の A、B