演算法之美 遞推之不犯錯不難,難的是全錯

2021-04-20 08:10:21 字數 1534 閱讀 1474

從零開始學演算法。

眼下又是開學的季節,回首當年風流往事,唏噓不已啊~~~吾曾經將一套英語卷子的單選題做錯14道。。。一共才15道題啊!-_||  難道之大,水準之高,我不由得對自己公升起一股敬佩之情。。。外加感動-_||

各位看官英語都這麼好,要做個全對也不是難事,像我這種接近全錯的怕是少有古人與來者了。

何以見得?不妨再算我狠一點,15道全錯!我們今天就來算算這個概率有多大。

的確夠簡單,每道題做錯的概率3/4,15道題,全部乘起來,ok,解決。。。(這次是真的解決了,沒忽悠大家)。

既然說到這個全錯的問題,就不能不想到經典的「錯排問題」。

what是錯拍?。。。是錯排-_||。。。

簡單地舉乙個例子,比如fcl同志在某個季節突然心血來潮,想給tumm,nkmm,等等一共15位mm寫情書(夠狠哈,一次同時寫這麼多),奮鬥多個不眠之夜,寫好了。親自送?算了,不好意思(也分不了身啊)。那就寄信吧,找來15個信封,填好裝上,ok,搞定!然後望眼欲穿。。。

完了,fcl同志的世界就要亂了。。。他繼承了15道英語題做錯14道的優良傳統,15個信全部裝錯,沒乙個裝對的,寫給tumm的結果發給了nkmm。。。結果可想而知。。。同志們!血的教訓啊!即使分身乏術也萬不可裝錯情書啊~~~-_||

那麼,現在問,fcl同志的信封到底有多少種裝錯的組合?

行了,還算簡單明瞭吧,這就是所謂的「錯排問題」。

下面來幫fcl同志解決實際問題,到底有多少種組合呢?

不妨假設這裡只有tumm,nkmm,jsmm三位mm,那麼對應有多少種不同的組合呢,請看下表:(注意:是全部裝錯!)

我們用1,2,3分別對應寫給上述三位mm的情書,那麼錯誤的組合:

tumm    nkmm   jsmm

2         3          1

3         1          2

於是有兩種錯排的可能性。

ok,現在推廣一下,n位mm的信都裝錯,多少種組合?

貌似一下想不明白。。。沒關係,我們來案情重組一下fcl同志犯下滔天罪行的情景。

不妨假設,n個裝錯的組合數由f(n)表示,且我們為每封信和信封都編上號,1~n,1號信封當然應該對應1號信。

第一步:現在我們在前n-1個信封中取出乙個信封k,將n裝進去(當然是裝錯了的)。現在還剩n-1封信要裝。

第二步,下面有兩種可能性:

1. 將k號信裝在n的信封裡,於是剩下了1~n-1號信(除開k),和1~n-1的信封(除開k),一共是n-2封信要我們裝,咦仔細一看,這不就是f(n-2)麼?對的,就是要將這剩下n-2封信錯排。

2. 對於第二種可能性,既然前面一種可能性已經考慮了將k裝在n號信封的情況,那麼現在k就不能裝在n號信封了,咦,又一想,現在剩下n-1封信,既不能將1~n-1(除開k)放在自己的信封裡,也不能將k號信放在n號信封裡,那這不就是n-1封信的錯排嗎?ok,就是f(n-1)了!

好了,在n-1封信中取一封信有(n-1)種可能,那麼錯排公式就要隆重出場了:

f(n) = (n-1)*( f(n-2) + f(n-1) )     (n>2)

思維很巧妙,犯錯也犯得有理有據。

copy?over。

貪心演算法並不難,難的是證明。

貪心算 法並不難 難的是 證明 貪心演算法並不難,難的是證明。貪心演算法並不 難,難的 是證明。heidoudou 基本思路 先將陣列sor tsort sort 一遍,然後用雙指標i 1,j n,if ai a j w if a i a j w if ai aj w 則將a ja j aj 單獨分...

演算法之美 遞推之兔子的計畫生育

程式1 fibonacci數列的遞迴實現code in c c int fibonacci int n ok,搞定,輕鬆解決!慢點,跑跑試一試,n 12,ok!n 40,還行。n 50,夠慢了吧!怎麼會這麼慢呢?我們來仔細分析分析。看看這句 return fibonacci n 1 fibonacc...

數學之美介紹的 公開金鑰演算法

coding utf 8 author qinwenchao 公開金鑰的原理其實很簡單,我們以給上面的單詞 caesar 加解密來說明它的原理。我們先把它變成一組數,比如它的 ascii x 099097101115097114 每三位代表乙個字母 做明碼。現在我們來設計乙個密碼系統,對這個明碼加密...