頻繁出現在IT面試中的組合計數問題

2021-06-09 13:46:07 字數 1321 閱讀 1479

由於計算機與組合數學有著千絲萬縷的聯絡,所以在很多大公司的筆試題目中,經常就會出現一些組合計數問題,現整理如下:

1. 求5個節點的二叉樹有多少中形態?

該問題最直接的做法是窮舉出所有的可能情況,畢竟只有5個節點。當然還可以利用遞推式進行求解。假設n個節點的二叉樹的形態有f(n)種,則f(0) = f(1) = 1。

當n > 1時,乙個二叉樹有乙個根節點和(n-1)個非根節點,在這(n-1)個非根節點中,左子樹有k個節點,則右子樹有(n-k-1)個節點,則可以得到遞推式: 

而滿足這個遞推式的是卡特蘭數,所以有:

這樣很容易得出5個節點的二叉樹的個數為42種。

2. 小明從座標 為(0,0)的位置走向(m,n),其中m、n為正整數。現已知小明每次只向右走一步,或向上走一步,問有多少種不同的走法?

在這個題目當中,也是採用遞推式進行求解。設f(m,n)為走到點(m,n)的不同走法,則f(m,0) = f(0,n) = 1。

並且由題意可知,要走到點(m,n),則需要從點(m,n-1)向上走一步,或者從點(m-1,n)向右走一步,所以f(m,n) = f(m-1,n) + f(m,n-1)。

根據上述遞推式可以求出所有的走法。當然,如果硬要求出用m與n表示的結果,則需要將問題進行轉換。由於走到點(m,n),無論怎麼走,始終都是向右走了m步,向上走了n步,所以所有不同的走法為c(m+n, m)。

3. 小明走乙個n級樓梯,每次只能走1級或者2級,則小明走到10級有多少種不同的走法?

假設走到n級的不同走法為f(n),則走到n級可以從n-1級走一步,或者從n-2級走兩步,所以f(n) = f(n-1) + f(n-2)。這樣就轉換成了fibonacci數列了。

f(10) = f(9) + f(8) = f(8) + f(7) + f(8) = .. =89。即走到10級有89種走法。

4. 計算表示式x6

+4x4

+2x3

+x+1最少需要做多少次乘法?

5. 字串www.qq.com

所有非空子串(兩個子串如果內容相同則只算乙個)個數是多少?

聚合不應出現在 UPDATE 語句的集合列表中

修改語句 update a set wzcount isnull wzcount,0 select sum wzcount from t pm outstock sub where materialid a.materialid and mainid from t pm materialstock ...

你的出現,幸福曙光即刻出現在了我的眼簾。

你的出現,幸福曙光即刻出現在了我的眼簾。你的在乎,甜蜜曙光即刻照耀在了我的心裡。我們溫暖了彼此.心卻還是靠不進,我們珍惜了彼此.心卻還是靠不上,這個繽紛多彩的花季,我們一直廝守永遠。這個絢爛多姿的雨季,我們永遠一直廝守。花落一百八十度,尋找你在的國度。花開三百六十度,尋找我們的幸福。我想像蠟筆小新一...

謝謝你曾經出現在我的生命裡

熟悉的旋律,無意間又再響起,空氣中盤旋散落著一幅幅關於回憶的畫面。每一段旋律都有屬於它的故事,只是不知道故事裡的人,是否一如以往般孩子氣?還是在歲月的菱角裡漸漸成長?即使歲月變遷,人來人往,總有一些人一些事,讓人們留戀在乙個熟悉而又陌生的城市。喧鬧的街道,匆匆而過的行人,多少人記得你的容顏?人心總是...