この問題の簡単なアルゴリズムはありません。
最も簡単なハード問題としても知られている、2セットでこれを解決するパーティション問題を確認してください。この問題はNP完全であり、Web上でそれを解決するためのすべてのアルゴリズムを見つけることができるはずです。
セットの数を選択できるため、問題が少し異なることはわかっていますが、前のソリューションの解決策から自分自身を刺激することができます。
例えば :
これを一連の線形計画法に変換できます。kをセット内の要素の数とします。
{a1 ... ak} is your set
For i = 2 to k:
try to solve the following program:
xjl = 1 if element j of set is in set number l (l <= i) and 0 otherwise
minimise max(Abs(sum(apxpn) -sum(apxpm)) for all m,n) // you minimise the max of the difference between 2 sets.
s.t
sum(xpn) on n = 1
(sum(xkn) on k)-(sum(xkm) on k) <= 1 for all m n // the number of element in 2 list are different at most of one element.
xpn in {0,1}
if you find a min less than one then stop
otherwise continue
end for
私の記法が明確であることを願っています。
このプログラムの複雑さは指数関数的であり、これを解くための多項式の方法を見つけた場合、P = NPを精査するので、これ以上うまくいくとは思いません。
編集
あなたのコメントを見ました、サブセットのサイズの制約を誤解しました(2セットの違いだと思いました)更新する時間がありません。時間があるときに更新します。sryy
編集2
私は線形計画法を編集しました、そしてそれはそれがするように頼まれたことをするはずです。制約を追加しました。
この解決策は最適ではないかもしれませんが、今回は問題が完全に理解されていることを願っています