排列組合 直通BAT演算法精講 卡特蘭數

2021-09-25 06:20:47 字數 1398 閱讀 4058

n個數進出棧的順序有多少種?假設棧的容量無限大。

解法和上乙個案例相同:

進棧相當於左括號,出棧相當於右括號,所以答案還是卡特蘭數:

[1/(n+1)] * c(2n, n)

n就是題幹中的n個數

2n個人排隊買票,n個人手拿5塊錢,n個人手拿10塊錢,票價是5塊錢一張,每人買一張票,售票員受理沒有零錢。問有多少種排隊方法可以讓售票員順利賣票。

還是卡特蘭數的應用,5塊錢相當於左括號,10塊錢相當於右括號,答案還是卡特蘭數:

[1/(n+1)] * c(2n, n)

n就是題幹中的n個人

假設n個無差別的節點構成的結構數為f(n)

f(0)表示空樹,所以規定種數為1種

進行下面的分析:

①以1節點作為頭部:結構數1*f(n-1)

②以2節點作為頭部:結構數1*f(n-2)

③以3節點作為頭部:結構數f(2)*f(n-3)

④以4節點作為頭部:結構數f(3)*f(n-4)

……oo o…o o o (n個節點)

ooo…o o o (n個節點)

o ooo…o o (n個節點)

o o ooo…o (n個節點)

……總結如下:

初始值滿足f(0) = f(1) = 1, f(2) = 2, f(3) = 5

下列結構

f(n) = f(0)*f(n-1) + f(1)*f(n-2) + f(2)*f(n-3) + f(3)*f(n-4) + …… + f(n-1)*f(n)

= [1/(n+1)] * c(2n, n)

——上式為卡特蘭數的重要公式2

有12個高矮不同的人,排成兩排,要求:每排必須是從矮到高排列,而且第二排對應比第一排的人高,問排列方式有多少種?

此題又是乙個卡特蘭數問題,只是隱藏的很深。 我們假設:

0:排在第一排

1:排在第二排

則12個人從低到高排列後,可以用0和1表示,示例如下

如果字首(前n個數)出現1比0多的情況,這種排列必然是不合法的。

這時,問題變為任意字首不能出現1比0多的情況,問題又等價於n組括號合法的問題,答案還是[1/(n+1)] * c(2n, n),這裡的n是12/2 = 6.

直通BAT演算法面試 排列組合 概率

題一 已經有乙個能夠利用概率p產生0 1 p 概率產生1的隨機函式f,請你用f函式設計乙個函式m使得m能夠等概論產生0 1 思路 連續呼叫兩次f,會產生四種情況,只要你規定其中兩種情況返回1另外兩種情況返回0就行。題二 已經有乙個能夠能夠隨機產生1 5的隨機函式f,利用f設計乙個能夠隨機產生1 7的...

直通BAT面試演算法精講 排序(1)

注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...

直通BAT面試演算法精講 排序(4)

荷蘭國旗問題 三色排序問題 對只包含0,1,2的整數陣列進行排序,要求使用交換 原地排序,而不是利用計數進行排序,做到0全在陣列左邊,1在中間,2在右邊 本題主要過程和快排劃分過程類似 測試用例 arr 1,1,0,0,2,1,1,0 輸出 0,0,0,1,1,1,1,2 解題思路 在陣列左側設定乙...