動態規劃刷題day01(1 n組二叉搜尋樹)

2021-10-08 14:25:44 字數 1088 閱讀 6235

leetcode 96. 不同的二叉搜尋樹

給定乙個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?

示例:

輸入: 3

輸出: 5

解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:

1 3 3 2 1

\ / / / \ \

3 2 1 1 3 2

/ / \ \

2 1 2 3

思路:考慮動態規劃思維,假如n=1有一種,n=2在n=1的基礎上可以在其右邊放,2種,n=3的時候,,,好,不會做,子狀態考慮不對,這邊應該注意到了有時候能放左邊有時候不能,所以把子狀態考慮為左邊有幾個,右邊有幾個。即

給定乙個有序序列 1 ⋯n,為了構建出一棵二叉搜尋樹,我們可以遍歷每個數字 i,將該數字作為樹根,將 1 ⋯(i−1) 序列作為左子樹,將 (i+1) ⋯n 序列作為右子樹。接著我們可以按照同樣的方式遞迴構建左子樹和右子樹。

完整思路:

假設n個節點存在二叉排序樹的個數是g(n),令f(i)為以i為根的二叉搜尋樹的個數,則

g(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n)

當i為根節點時,其左子樹節點個數為i-1個,右子樹節點為n-i,(必須的,因為二叉搜尋樹左小右大!)則

f(i) = g(i-1)*g(n-i)

綜合兩個公式可以得到 卡特蘭數 公式

g(n) = g(0)*g(n-1)+g(1)*(n-2)+...+g(n-1)*g(0)

class solution 

};

另外卡特蘭數還有乙個通項公式:

動態規劃 最優二叉搜尋樹

動態規劃與分治方法類似,都是通過組合子問題來求解原問題。通常用來求解最優化問題,通常按如下4個步驟設計乙個動態規劃演算法 1.刻畫乙個最優解的結構特徵 2.遞迴的定義最優解的值 3.採用自底向上的方法計算最優解的值 4.利用計算出的資訊構造乙個最優解。二叉搜尋樹 optimal binary sea...

最優二叉搜尋樹動態規劃

最優二叉搜尋樹問題是對於有序集s及其訪問概率或權值 q0,p1,q1,p2,q2,p3,q3 在所有表示有序集s的二叉搜尋樹中找出一顆具有最小平均路長的二叉搜尋樹。解決方法 使用動態規劃方法自底向上逐步構造最優二叉搜尋樹。動態規劃的兩個重要要素是 1 最優子結構。2 重疊子問題。1 所謂最優化子結構...

動態規劃最優二叉搜尋樹

前面的optimal bst還能寫出來,要去construct就不會了,也是理解不夠深刻的原因吧。以下 的construct用了兩種方法,參照了兩位博主,前乙個 風格非常暴力,能看懂以後寫不出來系列。第二種的d的輸出那我沒有看出邏輯,好像是用的輸出的相鄰兩個下標是在同乙個節點上連著?這個的理由我沒想...