すべての「一意の」整数タプルとそれに対応する多重度を生成する必要があります (私は MATLAB を好みます)。次のk = (k_1, k_2, ..., k_r)
2 つの追加条件を満たします。
1. sum(k) = n
2. 0<=k_i<=w_i, where vector w = (w_1,w_2, ..., w_r) contains predefined limits w_i.
「一意の」タプルとは、一意の順序付けられていない要素のセットが含まれていることを意味します
(k_1,k_2, ..., k_r)
[t,m] = func(n,w)
t ... matrix of tuples, m .. vector of tuples multiplicities
典型的な問題の次元は次のとおりです。
n ~ 30, n <= sum(w) <= n+10, 5 <= r <= n
(多項式時間アルゴリズムが存在することを願っています!!!)
Example:
n = 8, w = (2,2,2,2,2), r = length(w)
[t,m] = func(n,w)
t =
2 2 2 2 0
2 2 2 1 1
m =
5
10
この場合、2 つの「一意の」タプルのみが存在します。
(2,2,2,2,0)
多重度 5
同じ要素セットを持つ 5 つの「同一」タプルがあります
0 2 2 2 2
2 0 2 2 2
2 2 0 2 2
2 2 2 0 2
2 2 2 2 0
と
(2,2,2,1,1)
多重度 10 で
同じ要素セットを持つ「同一の」タプルが 10 個ある
1 1 2 2 2
1 2 1 2 2
1 2 2 1 2
1 2 2 2 1
2 1 1 2 2
2 1 2 1 2
2 1 2 2 1
2 2 1 1 2
2 2 1 2 1
2 2 2 1 1
助けてくれてありがとう。