數論經典習題系列之求重集組合數(一)

2021-08-29 07:53:05 字數 1103 閱讀 3720

title: 數論經典習題系列之求重集組合數(一)

categories:

n個沒有區別的球放入r個有標誌的盒子裡面(n>=r),每個盒子只允許放乙個球,請問有多少種放法?

每個盒子只能放乙個球,所以方法為排列數,p(n,r);

n個沒有區別的球放入r個有標誌的盒子裡面(n>=r),每個盒子至少放乙個球,請問有多少種放法?

分兩個步驟完成:

(1)首先每個盒子放乙個球,因為球是沒有區別的,所以這樣的方法是1

(2)然後再n-r個球放到r個盒子裡面,每個盒子放置的球數沒有限制,比如把所有的球都裝到其中乙個盒子,所以盒子相當於是乙個重集:

,\infty\cdot a_,\infty\cdot a_,\cdot \cdot \cdot ,\infty\cdot a_

∞⋅a1​,

∞⋅a2

​,∞⋅

a3​,

⋅⋅⋅,

∞⋅an

​ }。

結果就是相當於在重集裡面取出n-r個元素的組合

其實就是f(r,n-r)= (r+

n−r−

1r−1

)\binom

(r−1r+

n−r−

1​)=(r+

n−r−

1n−r

)\binom

(n−rr+

n−r−

1​)=(n−

1r−1

)\binom

(r−1n−

1​)

(1)(2)使用乘法定理之後,結果等於(n−

1r−1

)\binom

(r−1n−

1​)直接乙個步驟完成,要求盒子不能為空,根據隔板法(可以wiki一下)

r個盒子,n個球,相當於要把n個球劃分為r堆,

因為n個球有n-1的縫隙,要劃分為r堆,就需要找r-1個縫隙。

所以就是在n-1個縫隙裡面找出r-1個縫隙就好了

答案就是(n−

1r−1

)\binom

(r−1n−

1​)

JavaScript系列之陣列去重

陣列去重方法是老生常談,特別是一些bat大廠的面試都會提到這個問題,既然是常談,那麼我也來談談 使用迴圈巢狀,最外層迴圈 array,裡面迴圈 res,如果 array i 的值跟 res j 的值相等,就跳出迴圈,如果都不等於,說明元素是唯一的,這時候 j 的值就會等於 res 的長度,根據這個特...

LintCode習題系列之解碼方法

這是筆者在lintcode社群刷題的經歷,希望思考的過程對讀者有所幫助 題目描述 有乙個訊息包含a z通過以下規則編碼 a 1 直到 z 26 現在給你乙個加密過後的訊息,問有幾種解碼的方式 例項 12 1 2 代表ab,12代表l,共兩種情況 思路 首先排除特殊情況 若輸入的string為 則結果...

Spark經典案例之資料去重

資料格式 flie1 2012 3 1 a 2012 3 2 b 2012 3 3 c 2012 3 4 d 2012 3 5 a 2012 3 6 b 2012 3 7 c 2012 3 3 c flie2 2012 3 1 b 2012 3 2 a 2012 3 3 b 2012 3 4 d 2...