演算法第四版 練習答案 1 4 1

2021-09-11 05:55:53 字數 2192 閱讀 7301

證明從n個數中,取出3個整數的不同組合的總數為n(n-1)(n-2)/6

提示 使用數學歸納法

最簡單和常見的數學歸納法是證明當n等於任意乙個自然數時某命題成立。證明分下面兩步:

證明當n= 1時命題成立。

假設n=m時命題成立,那麼可以推導出在n=m+1時命題也成立。(m代表任意自然數)

這種方法的原理在於:首先證明在某個起點值時命題成立,然後證明從乙個值到下乙個值的過程有效。當這兩點都已經證明,那麼任意值都可以通過反覆使用這個方法推導出來。把這個方法想成多公尺諾效應也許更容易理解一些。

例如:你有一列很長的直立著的多公尺諾骨牌,如果你可以:

證明第一張骨牌會倒。

證明只要任意一張骨牌倒了,那麼與其相鄰的下一張骨牌也會倒。

骨牌乙個接乙個倒下就如同乙個值接下乙個值

骨牌乙個接乙個倒下就如同乙個值接下乙個值

那麼便可以下結論:所有的骨牌都會倒下

解題要點

數學歸納法對解題的形式要求嚴格,數學歸納法解題過程中,

第一步:驗證n取第乙個自然數時成立

第二步:假設n=k時成立,然後以驗證的條件和假設的條件作為論證的依據進行推導,在接下來的推導過程中不能直接將n=k+1代入假設的原式中去。

最後一步總結表述。

證明1:數學歸納法
第一步:證明從n個數中,取出2個整數的不同組合的總數為n(n-1)2

(1)假設n=2和n=3

從2個整數中,取2個整數的總數只有1種,符合21/2=1

從3個整數中,取2個整數的總數3種,32/2=3種,符合

(2)假設a從n個整數中取出2個整數的不同組合的總數為n(n-1)2

那麼從n+1個整數中取出2個整數的不同組合的總數可以分成兩部分

一部分是從n個整數中取出2個整數的不同組合的總數為n(n-1)2

另一部分是必須包含第n+1元素,另外乙個元素可以隨意取的情況(範圍從1到n),那麼這一部分的數量為n

把上述兩個部分相加得到

從n+1個整數中取出2個整數的不同組合的總數為n(n-1)/2+n=n(n+1)/2

(3)而假設二a中f(n)=n(n-1)/2;f(n+1)=(n+1)*2/2

上面兩者是相等的,因此數學歸納法就可以得出證明從n個數中,取出2個整數的不同組合的總數為n(n-1)2

分割下
第二步:證明從n個數中,取出3個整數的不同組合的總數為n(n-1)(n-2)/6

(1)假設n=3和n=4

從3個整數中,取3個整數的總數只有1種,符合321/6=1

從4個整數中,取3個整數的總數4種,符合432/6=4

比如有數字1,2,3,4.那麼只有4種可能(1,2,3);(1,2,4);(1,3,4);(2,3,4)

(2)假設b從n個數中,取出3個整數的不同組合的總數為n(n-1)(n-2)/6

那麼從n+1個整數中取出3個整數的不同組合的總數可以分成兩部分

第一部分:不包含第n+1元素的,有f(n)即假設b…f(n)=n(n-1)(n-2)/6個

第二部分:包含第n+1元素的,那麼另外2個數只能從n個元素中取,即第一步我們證明的結論:從n個數中,取出2個整數的不同組合的總數為n(n-1)2

把上述的一二部分相加n(n-1)(n-2)/6+n(n-1)/2=(n的三次方-n)/6

(3)根據假設f(n)=n(n-1)(n-2)/6,那麼

f(n+1)=(n+1)n(n-1)/6,

上面兩者是相等的,因此數學歸納法就可以得出證明從n個數中,取出3個整數的不同組合的總數為n(n-1)(n-2)/6

證明方法2
區別

combine,組合,不分順序,組合比排列所取得的種數更少。如5取3,c(5,3)=5!/(3!(5-3)!)=5!/(3!2!)=(543)/(321)

arrange,排列,區分順序,因而排列比組合取得的種數更多。比如5取3。a(5,3)=5!/(5-3)!=5!/2!=543

公式:n>m,即從n中取m個

排列:a(n,m)=n!/(n-m)!

組合:c(n,m)=n!/(m!*(n-m)!) 即c(n,m)=a(n,m)/m!

演算法 第四版 練習1 4 2

修改threesum,正確處理兩個較大的int值相加可能溢位的情況 首先jdk中定義int佔4個位元組,32位 後面全部的計算都是以此為根據的 32位就是jvm僅僅給分配32個格仔的空間,用以存放資料。總所周知計算機中用0和1存放資料。那麼,32個格仔中放滿0或1的方法 有2的32次方種 或者說32...

演算法 第四版 練習1 3 40解答

前移編碼。從標準輸入讀取一串字元,使用鍊錶儲存這些字元並清除重複字元。當你讀取了乙個從未見過的字元時,將它插入表頭。當你讀取了乙個重複的字元時,將它從鍊錶中刪去並再次插入表頭。將你的程式命名為movetofront 它實現了著名的前移編碼策略,這種策略假設最近訪問過的元素很可能會再次訪問,因此可以用...

演算法 第四版 練習1 2 10解答

1.編寫乙個類visualcounter,支援加一和減一操作。2.它的建構函式接受兩個引數n和max,其中n指定了 操作的最大次數,max指定了計數器的最大絕對值。3.作為 用影象顯示每次計數器變化後的值。看得懂1和2,看不懂3,1和2的函式好寫,3不知道什麼意思 通過看別人的答案才知道3就是函式 ...