我需要生成(我更喜欢 MATLAB)所有“唯一”整数元组k = (k_1, k_2, ..., k_r)
及其相应的多重性,满足两个附加条件:
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,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
提前感谢您的帮助。