所有分區都可以在兩個階段找到。
第一個:從P
開始對n,P_S={P_i1, P_i2, ..., P_ip}
進行新的有序劃分,將相同的i相加。
P = {1, 1, 1, 1, 2, 2, 5}
P_S = (4, 4, 5)
使分區C
{C_i1, C_i2, ..., C_ip}
相對於P_S
。請注意,C_ix
是多套的,如C
。它按照最終分區的大小將C分區成多集。
二:對於每個{C_i1, C_i2, ..., C_ip}
和每個ix, x={1,2,...,p}
查找數的C_ix
分區成t
(在P
數目的ix's
)設置與ix
元件。致電此號碼N(C_ix,ix,t)
。
分區總數爲:
sum by all {C_i1, C_i2, ..., C_ip} (product N(C_ix,ix,t) ix={1,2,...,p})
第一部分可以完成遞歸很簡單。其次更復雜。與k
元件多設置M
成n
份的分區相同發現與來自M
元素的所有部分排序列表。部分順序列表的類型爲:
a_1_1, a_1_2, ..., a_1_k, a_2_1, a_2_2, ..., a_2_k, ....
凡a_i_x <= a_i_y
如果x < y
和(a_x_1, a_x_2, ..., a_x_k) lexicographic <= (a_y_1, a_y_2, ..., a_y_k)
如果x < y
。有了這兩個條件,可以遞歸地創建N(C_ix,ix,t)
的所有分區。
在某些情況下N(C_ix,ix,t)
很容易計算。限定|C_ix|
在不同元件的數量多設置C_ix
。
if t = 1 than 1
if |C_ix| = 1 than 1
if |C_ix| = 2 than (let m=minimal number of occurrences of elements in C_ix) floor(m/2) + 1
in general if |C_ix| = 2 than partition of m in numbers <= t.
的問題是多少?或者你需要找到他們? – 2011-05-08 17:37:53
你的解決方案是什麼? – Ishtar 2011-05-08 17:47:02
我的解決方案需要列出分解。我只想列舉它們。我生成C的所有排列,然後將所有分解存儲在一個表中並計算不同的分解。 – PhilippeC 2011-05-08 21:33:52