2009-02-27 12 views
2

給定是大小爲n的集合S,其被劃分爲大小爲n1,...,nk的類(s1,...,sk)。當然,它認爲n = n1 + ... + nk。劃分中可能的組合的數量

我有興趣瞭解我可以組合這些分區元素的方法的數量,以便每個組合都包含每個類的一個元素。

由於我可以從s1中選擇n1個元素,從s2中選擇n2個元素等等,我正在尋找max(n1 * .. * nk)對於任意n1,.. nk的解決方案,它認爲n1 + .. + NK = N。

我感覺這是一個線性優化問題,但是我學習這門課作爲一個本科生的時間太長了。我希望有人記得如何計算這個。

+0

這裏似乎有兩個獨立的問題。對於組合總數的解決方案如下所述。我在這裏還有一個優化問題? – 2009-02-27 22:42:50

+0

我希望下面的東西有所幫助。這是一個需要花費一段時間才能完成的微積分課題,但簡而言之就是這樣。 – 2009-02-27 23:06:01

+0

非常感謝Rob。這似乎正在幫助我接近解決方案。 – user66237 2009-03-06 03:34:46

回答

2
floor(n/k)^(k - n mod k)*ceil(n/k)^(n mod k) 

- MarkusQ

附:對於例如你給的S = {1,2,3,4},N = 4,K = 2,給出:

floor(4/2)^(2 - 4 mod 2)*ceil(4/2)^(4 mod 2) 
floor(2)^(2 - 0)*ceil(2)^(0) 
2^2 * 2^0 
4 * 1 
4 

...你想要的。

爲了澄清,該公式給出了由最大可能的排列數量進行分區所產生的排列數目。當然會有其他不太理想的分區。

對於給定的周長,具有最大面積的矩形是最接近正方形的矩形(高維中也是如此),這意味着您希望邊的長度儘可能接近相等(例如所有的平均長度都向上或向下)。然後可以看到該公式爲:

(length of short sides)^(number of short sides) 
times 
    (length of long sides)^(number of long sides) 

這就是滿足此約束的超矩形的體積。

請注意,以這種方式查看時,它還會告訴您如何構建最大分區。

3

您正在尋找每個分區有一個元素的組合數量?

這只是n1 * n2 * ... * nk。

編輯: 你似乎還可以問一個單獨的問題:

鑑於N,我怎麼分配N1,N2,...,NK例如,他們的產品是最大的。這實際上不是一個線性優化問題,因爲您的變量會相乘。

它可以通過一些微積分來解決,即通過在每個變量中採用偏導數,並使用拉格朗日乘子來約束。

結果將是n1 .. nk應儘可能接近相同的大小。

if n is a multiple of k, then n_1 = n_2 = ... = n_k = n/k 

otherwise, n_1 = n_2 = ... = n_j = Ceiling[n/k] 
     and n_j+1 = ... = n_k = floor[n/k] 

基本上,我們嘗試儘可能均勻地將元素分配到分區中。如果它們均勻分佈,那麼很好。如果不是,我們儘可能均勻地分割,並且無論剩下什麼,我們會爲第一個分區分別添加一個元素。 (不一定是第一個分區,這個選擇是相當隨意的)。這樣,任何兩個分區擁有的元素數量的差異最多隻有一個。

血淋淋的細節

這是我們希望最大限度地提高產品功能:

P = N1 N2 * * ...爲nK

我們定義使用拉格朗日乘子新功能:

LAMBDA = P + 1(N - N1 - N2 ... -NK)

並採取偏導數在每個第k n_i個變量:

dLambda/dn_i = P/n_i個 - 升

和在升:

dLambda/dl的= N - N1 -n2 ... -NK

設置所有偏導數= 0,我們得到一個k + 1方程組,當我們解決它們時,我們將得到n1 = n2 = ...= NK

一些有用的鏈接:

Lagrange Multipliers

Optimization