我需要生成(I prefere MATLAB)所有的「獨特的」整數元組k = (k_1, k_2, ..., k_r)
和 其相應的多重性,滿足兩個附加條件:特定元組生成和計數(MATLAB)
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
預先感謝任何幫助的。
顯然,我的'獨特'/'燙髮'方法確實對你有幫助嗎? :-) – 2013-03-20 15:27:24
是的!但是多重性可以被更有效地計算......參見下一個回答 – michal 2013-03-20 19:13:44
下一個答案是什麼? – 2013-03-20 19:14:57