程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 算法分析—N個蘋果放在N個盤子裡的問題

算法分析—N個蘋果放在N個盤子裡的問題

編輯:關於C語言
 

問題的描述:現在有N個一模一樣的蘋果,要放在編號為1、2、3……、N的盤子裡(假設盤子足夠大,能放下所有的蘋果),問一共有多少種放法?

 

算法分析:

用符號F(i,j)表示i個蘋果放在j個盤子裡的放法數

如果1號盤子裡沒有蘋果,則i個蘋果要放在剩余的j-1個盤子裡

如果1號盤裡有1個蘋果,則剩余的i-1個蘋果放在剩余的j-1個盤子裡

如果1號盤裡有2個蘋果,則剩余的i-2個蘋果放在剩余的j-1個盤子裡

以此類推

如果1號盤裡有i-1個蘋果,則剩下的1個蘋果放在j-1個盤子裡

如果1號盤裡有i個蘋果,則剩下的j-1個盤子裡沒有蘋果

 

於是得到以下的關系式

① F(i,j)=F(i,j-1)+F(i-1,j-1)+F(i-2,j-1)+……+F(1,j-1)+F(0,j-1)

由上面的式子可以得出

② F(i-1,j)=F(i-1,j-1)+F(i-2,j-1)+……+F(1,j-1)+F(0,j-1)

回代到①可知

③ F(i,j)=F(i,j-1)+F(i-1,j)

 

另由定義可知,

④ F(i,1)=1

⑤ F(1,i)=i

 

根據式子③④⑤,推測F(i,j)的計算公式為

⑥ F(i,j)=C(i,i+j-1) 注:C(M,N)表示組合數,表示N個裡面選M的個數。組合數的計算公式這裡不描述了

 

下面用數學歸納法證明式子⑥的正確性

證明:

F(i,1)=C(i,i+1-1)=C(i,i)=1 式子④滿足式子⑥

F(1,i)=C(1,1+i-1)=C(1,i)=i 式子⑤滿足式子⑥

 

假設F(i,j-1)、F(i-1,j)滿足式子⑥

F(i,j-1)=C(i,i+j-1-1)=C(i,i+j-2)

F(i-1,j)=C(i-1,i-1+j-1)=C(i-1,i+j-2)

 

則由式子③可知

F(i,j)=F(i,j-1)+F(i-1,j)=C(i,i+j-2)+C(i-1,i+j-2)=C(i,i+j-1) 滿足式子⑥

 

由此證明式子⑥的正確性

 

故計算公式為

F(i,j)=C(i,i+j-1)

 

那麼

3個蘋果放在3個盤子裡的放法數為F(3,3)=C(3,3+3-1)=C(3,5)=10

2個蘋果放在4個盤子裡的放法數為F(2,4)=C(2,2+4-1)=C(2,5)=10

7個蘋果放在7個盤子裡的放法數為F(7,7)=C(7,7+7-1)=C(7,13)=1716

10個蘋果放在10個盤子裡的放法數為F(10,10)=C(10,10+10-1)=C(10,19)=92378

 

N個蘋果放在N個盤子裡的放法數為F(N,N)=C(N,2N-1)
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved