国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【動態(tài)規(guī)劃】最優(yōu)二叉搜索樹——算法設(shè)計(jì)與分析

這篇具有很好參考價值的文章主要介紹了【動態(tài)規(guī)劃】最優(yōu)二叉搜索樹——算法設(shè)計(jì)與分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


一、問題定義

1.1 二叉搜索樹

二叉搜索樹或者是一棵空樹,或者是具有下列性質(zhì)的二叉樹: 若它的左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于它的根結(jié)點(diǎn)的值; 若它的右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于它的根結(jié)點(diǎn)的值; 它的左、右子樹也分別為二叉搜索樹。

最優(yōu)二叉查找樹,算法設(shè)計(jì)與分析,算法,動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu)

規(guī)定樹根為第0層,圓結(jié)點(diǎn)為數(shù)據(jù),方結(jié)點(diǎn)為數(shù)據(jù)之間的空隙。


1.2 概率分布

實(shí)際上每個數(shù)據(jù)出現(xiàn)的概率是不同的,給定序列 S = < x 1 , x 2 , . . . , x n > S=<x_1,x_2,...,x_n> S=<x1?,x2?,...,xn?>,構(gòu)造二叉搜索樹,形成了 n n n個結(jié)點(diǎn) x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1?,x2?,...,xn?,和 n + 1 n+1 n+1個空隙 ( x 0 , x 1 ) , ( x 1 , x 2 ) , . . . , ( x n ? 1 , x n ) , ( x n , x n + 1 ) (x_0,x_1),(x_1,x_2),...,(x_{n-1},x_n),(x_n,x_{n+1}) (x0?,x1?),(x1?,x2?),...,(xn?1?,xn?),(xn?,xn+1?),其中 x 0 = ? ∞ , x n + 1 = + ∞ x_0=-\infin,x_{n+1}=+\infin x0?=?,xn+1?=+

x x x x i x_i xi?出現(xiàn)的概率為 b i b_i bi?,在空隙 ( x i , x i + 1 ) (x_i,x_{i+1}) (xi?,xi+1?)的概率為 a i a_i ai?,則 S S S的存取概率分布為 P = < a 0 , b 1 , a 1 , b 2 , a 2 , . . . , b n , a n > P=<a_0,b_1,a_1,b_2,a_2,...,b_n,a_n> P=<a0?,b1?,a1?,b2?,a2?,...,bn?,an?>


1.3 檢索數(shù)據(jù)的平均時間

對于數(shù)據(jù)集 S = < x 1 , x 2 , . . . , x n > S=<x_1,x_2,...,x_n> S=<x1?,x2?,...,xn?>和存取概率分布 P = < a 0 , b 1 , a 1 , b 2 , a 2 , . . . , b n , a n > P=<a_0,b_1,a_1,b_2,a_2,...,b_n,a_n> P=<a0?,b1?,a1?,b2?,a2?,...,bn?,an?>

規(guī)定樹根為第0層,結(jié)點(diǎn) x i x_i xi? T T T中的深度是 d ( x i ) , i = 1 , 2 , … , n d(x_i), i=1,2,…,n d(xi?),i=1,2,,n,空隙 L j L_j Lj?的深度為 d ( L j ) , j = 0 , 1 , … , n d(L_j),j=0,1,…,n d(Lj?),j=0,1,,n,平均比較次數(shù)為:
m ( T ) = ∑ i = 1 n b i ( 1 + d ( x i ) ) + ∑ j = 0 n a j d ( L j ) m(T)=\sum_{i=1}^{n}b_i(1+d(x_i))+ \sum_{j=0}^{n}a_jd(L_j) m(T)=i=1n?bi?(1+d(xi?))+j=0n?aj?d(Lj?)
例如,給定樹:

最優(yōu)二叉查找樹,算法設(shè)計(jì)與分析,算法,動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu)

S = < 1 , 2 , 3 , 4 , 5 , 6 > S = < 1, 2, 3, 4, 5, 6 > S=<1,2,3,4,5,6>, P = < 0.04 , ? 0.1 ? , 0.01 , ? 0.2 ? , 0.05 , ? 0.2 ? , 0.02 , ? 0.1 ? , 0.02 , ? 0.1 ? , 0.07 , ? 0.05 ? , 0.04 > P = < 0.04, *0.1*, 0.01, *0.2*, 0.05,*0.2*, 0.02, *0.1*, 0.02, *0.1*,0.07, *0.05*, 0.04 > P=<0.04,?0.1?,0.01,?0.2?,0.05,?0.2?,0.02,?0.1?,0.02,?0.1?,0.07,?0.05?,0.04> p x i p_{x_i} pxi??用**包圍)

則平均檢索時間為:

m ( T 1 ) = [ 1 × 0.1 + 2 × ( 0.2 + 0.05 ) + 3 × ( 0.1 + 0.2 + 0.1 ) ] + [ 3 × ( 0.04 + 0.01 + 0.05 + 0.02 + 0.02 + 0.07 ) + 2 × 0.04 ] = 2.51 m (T_1)= [1×0.1+2×(0.2+0.05) +3×(0.1+0.2+0.1)]+[3×(0.04+0.01+0.05+0.02+ 0.02+0.07)+2×0.04 ]= 2.51 m(T1?)=[1×0.1+2×(0.2+0.05)+3×(0.1+0.2+0.1)]+[3×(0.04+0.01+0.05+0.02+0.02+0.07)+2×0.04]=2.51


1.4 最優(yōu)二叉搜索樹問題

對于數(shù)據(jù)集 S = < x 1 , x 2 , . . . , x n > S=<x_1,x_2,...,x_n> S=<x1?,x2?,...,xn?>和存取概率分布 P = < a 0 , b 1 , a 1 , b 2 , a 2 , . . . , b n , a n > P=<a_0,b_1,a_1,b_2,a_2,...,b_n,a_n> P=<a0?,b1?,a1?,b2?,a2?,...,bn?,an?>,不同的樹的組織形式會產(chǎn)生不同的平均檢索時間,如何求一棵平均比較次數(shù)最少的二叉搜索樹?



二、算法

2.1 分析問題結(jié)構(gòu)

( i , j ) (i,j) (i,j)為界劃分子問題:

S [ i , j ] = < x i , x i + 1 , … , x j > S [i, j] = < x_i , x_{i+1}, … , x_j > S[i,j]=<xi?,xi+1?,,xj?>,存取概率分布: P = < a i ? , b i , a i , b i + 1 , . . . , b j , a j > P=<a_{i-},b_i,a_i,b_{i+1},...,b_j,a_j> P=<ai??,bi?,ai?,bi+1?,...,bj?,aj?>


2.2 建立遞推關(guān)系

假設(shè)以 x k x_k xk?作為樹的根,則樹被劃分為三部分:

左子樹: S [ i , k ? 1 ] , P [ i , k ? 1 ] S[ i, k?1], P[ i, k?1] S[i,k?1],P[i,k?1]

根: x k x_k xk?

右子樹: S [ k + 1 , j ] , P [ k + 1 , j ] S[ k+1, j ], P[ k+1, j ] S[k+1,j],P[k+1,j]

w [ i , j ] = ∑ p = i ? 1 j a p + ∑ q = i j b q {w[i,j]=\sum_{p=i-1}^{j}a_p+ \sum_{q=i}^{j}b_q } w[i,j]=p=i?1j?ap?+q=ij?bq?,表示 x i x_i xi? x j x_j xj?之間所有概率(數(shù)據(jù)和空隙)之和;設(shè) m [ i , j ] m[i,j] m[i,j]是相對于輸入 S [ i , j ] S[i,j] S[i,j] P [ i , j ] P[i,j] P[i,j]的最優(yōu)二叉搜索樹的平均比較次數(shù)

則可建立遞推方程:
m [ i , j ] = min ? i ≤ k ≤ j { m [ i , k ? 1 ] + m [ k + 1 , j ] + w [ i , j ] } 1 ≤ i ≤ j ≤ n m [ i , i ? 1 ] = 0 , i = 1 , 2 , . . . , n m[i,j]=\min_{i\leq k\leq j}\left \{ m[i,k-1]+m[k+1,j]+w[i,j] \right \} \quad 1\leq i\leq j\leq n \\ m[i,i-1]=0, \quad i=1,2,...,n m[i,j]=ikjmin?{m[i,k?1]+m[k+1,j]+w[i,j]}1ijnm[i,i?1]=0,i=1,2,...,n
最優(yōu)二叉查找樹,算法設(shè)計(jì)與分析,算法,動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu)

(1)為了不遺漏最優(yōu)解,所以需要從 x 1 x_1 x1? x k x_k xk?依次選取做根嘗試,選出最小值

(2) m [ i , k ? 1 ] m[i,k-1] m[i,k?1]表示以 x k x_k xk?做根的最優(yōu)左子樹的比較次數(shù)

(3) m [ k + 1 , j ] m[k+1,j] m[k+1,j]表示以 x k x_k xk?做根的最優(yōu)右子樹的比較次數(shù)

(4)對于給定的數(shù)據(jù) x x x,需要先與根 x k x_k xk?進(jìn)行比較后才可以進(jìn)入到左子樹或右子樹;而由于使用根 x k x_k xk?將左子樹和右子樹連接起來,子樹的每個結(jié)點(diǎn)高度均增加了一層,所以在比較次數(shù)上也要加1,所以 w [ i , j ] w[i,j] w[i,j]是由增加的左子樹的比較次數(shù)、增加的右子樹的比較次數(shù)、和根的比較次數(shù)之和

w [ i , j ] w[i,j] w[i,j]的證明:

由根 x k x_k xk?引起的比較次數(shù)增加為:
最優(yōu)二叉查找樹,算法設(shè)計(jì)與分析,算法,動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu)


2.3 自底向上計(jì)算

初始化:當(dāng)左子樹或右子樹為空時,其平均查找數(shù)為0
m [ i , i ? 1 ] = 0 , i = 1 , 2 , . . . , n m[i,i-1]=0, \quad i=1,2,...,n m[i,i?1]=0,i=1,2,...,n

不妨以 m [ 1 , 4 ] m[1,4] m[1,4]來觀察:
m [ 1 , 4 ] = m i n { m [ 1 , 0 ] + m [ 2 , 4 ] + w [ 1 , 4 ] k = 1 m [ 1 , 1 ] + m [ 3 , 4 ] + w [ 1 , 4 ] k = 2 m [ 1 , 2 ] + m [ 4 , 4 ] + w [ 1 , 4 ] k = 3 m [ 1 , 3 ] + m [ 5 , 4 ] + w [ 1 , 4 ] k = 4 m[1,4]=min\left\{\begin{matrix} m[1,0]+m[2,4]+w[1,4] & k=1\\ m[1,1]+m[3,4]+w[1,4] & k=2\\ m[1,2]+m[4,4]+w[1,4]& k=3\\ m[1,3]+m[5,4]+w[1,4]& k=4 \end{matrix}\right. m[1,4]=min? ? ??m[1,0]+m[2,4]+w[1,4]m[1,1]+m[3,4]+w[1,4]m[1,2]+m[4,4]+w[1,4]m[1,3]+m[5,4]+w[1,4]?k=1k=2k=3k=4?

0 1 2 3 4
0 NULL NULL NULL NULL NULL
1 0
2 NULL 0
3 NULL NULL 0
4 NULL NULL NULL 0
5 NULL NULL NULL NULL

顯然,要計(jì)算一個值,我們需要計(jì)算它一行一列的數(shù)據(jù),因此確定計(jì)算順序:

最優(yōu)二叉查找樹,算法設(shè)計(jì)與分析,算法,動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu)


2.4 追蹤最優(yōu)方案

構(gòu)造追蹤數(shù)組 R e c [ 1.. n , 1.. n ] Rec[1..n,1..n] Rec[1..n,1..n], R e c [ i , j ] Rec[i,j] Rec[i,j]表示 S [ i , j ] S[i,j] S[i,j]的根節(jié)點(diǎn) x k x_k xk?

在計(jì)算 m [ i , j ] m[i,j] m[i,j]的過程中,選出最小的 k k k,記錄 R e c [ i , j ] = k Rec[i,j]=k Rec[i,j]=k

追蹤時,從 R e c [ 1 , n ] Rec[1,n] Rec[1,n]出發(fā),假設(shè) R e c [ 1 , n ] = k Rec[1,n]=k Rec[1,n]=k,則說明在 x k x_k xk?處進(jìn)行了分割,分為子樹 m [ 1 , k ] m[1,k] m[1,k] m [ k + 1 , n ] m[k+1,n] m[k+1,n],再分別查看 R e c [ 1 , k ] Rec[1,k] Rec[1,k] R e c [ k + 1 , n ] Rec[k+1,n] Rec[k+1,n]

如此尋找直至對角線部分。


2.5 復(fù)雜度分析

時間復(fù)雜度 O ( n 3 ) O(n^3) O(n3)

空間復(fù)雜度 O ( n 2 ) O(n^2) O(n2)文章來源地址http://www.zghlxwxcb.cn/news/detail-597272.html

到了這里,關(guān)于【動態(tài)規(guī)劃】最優(yōu)二叉搜索樹——算法設(shè)計(jì)與分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 最優(yōu)二叉搜索樹(Optimal Binary Search Tree)_20230401

    最優(yōu)二叉搜索樹(Optimal Binary Search Tree)_20230401

    前言 如果有序數(shù)組或有序表中的各個元素查找概率相等,那么采用二叉搜索樹(BST)進(jìn)行折半查找,性能最優(yōu)。如果有序表中各個記錄的查找概率不相等,情況又如何呢? 先看一個具體例子。已知有序表keys, 同時給出各個元素的查詢頻率,注意到各個元素的查詢頻率不相同。

    2024年02月12日
    瀏覽(40)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】哈夫曼編碼(最優(yōu)二叉樹)實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)與算法】哈夫曼編碼(最優(yōu)二叉樹)實(shí)現(xiàn)

    哈夫曼編碼 等長編碼:占的位置一樣 變長編碼(不等長編碼):經(jīng)常使用的編碼比較短,不常用的比較短 最優(yōu):總長度最短 最優(yōu)的要求:占用空間盡可能短,不占用多余空間,且不能有二義性 這里給出哈夫曼二叉樹的實(shí)現(xiàn): HuffmanTree.h: 測試數(shù)據(jù)(主函數(shù)): 運(yùn)行結(jié)果截圖

    2024年02月16日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】哈夫曼編碼(最優(yōu)二叉樹實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)與算法】哈夫曼編碼(最優(yōu)二叉樹實(shí)現(xiàn)

    哈夫曼編碼 等長編碼:占的位置一樣 變長編碼(不等長編碼):經(jīng)常使用的編碼比較短,不常用的比較短 最優(yōu):總長度最短 最優(yōu)的要求:占用空間盡可能短,不占用多余空間,且不能有二義性 這里給出哈夫曼二叉樹的實(shí)現(xiàn): HuffmanTree.h: 測試數(shù)據(jù)(主函數(shù)): 運(yùn)行結(jié)果截圖

    2024年02月16日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)-哈夫曼樹(最優(yōu)二叉樹)

    目錄 一、引言 二、哈夫曼樹的概念 三、哈夫曼樹的構(gòu)建 1. 構(gòu)建步驟 2. 構(gòu)建示例 四、哈夫曼編碼 1. 編碼規(guī)則 2. 編碼示例 五、哈夫曼樹的應(yīng)用 1. 數(shù)據(jù)壓縮 2. 文件加密 六、總結(jié) 在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)結(jié)構(gòu)是指計(jì)算機(jī)中數(shù)據(jù)組織、管理和存儲的方式。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)科學(xué)的

    2024年02月07日
    瀏覽(21)
  • LeetCode算法題解(動態(tài)規(guī)劃)|LeetCode343. 整數(shù)拆分、LeetCode96. 不同的二叉搜索樹

    LeetCode算法題解(動態(tài)規(guī)劃)|LeetCode343. 整數(shù)拆分、LeetCode96. 不同的二叉搜索樹

    題目鏈接:343. 整數(shù)拆分 題目描述: 給定一個正整數(shù)? n ?,將其拆分為? k ?個? 正整數(shù) ?的和(? k = 2 ?),并使這些整數(shù)的乘積最大化。 返回? 你可以獲得的最大乘積 ?。 示例 1: 示例?2: 提示: 2 = n = 58 算法分析: 定義dp數(shù)組及下標(biāo)含義: dp[i]表述正整數(shù)i拆分成k個正整數(shù)

    2024年02月04日
    瀏覽(25)
  • 算法訓(xùn)練day41|動態(tài)規(guī)劃 part03(LeetCode343. 整數(shù)拆分、96.不同的二叉搜索樹)

    算法訓(xùn)練day41|動態(tài)規(guī)劃 part03(LeetCode343. 整數(shù)拆分、96.不同的二叉搜索樹)

    題目鏈接???? 給定一個正整數(shù) n,將其拆分為至少兩個正整數(shù)的和,并使這些整數(shù)的乘積最大化。 返回你可以獲得的最大乘積。 示例 1: 輸入: 2 輸出: 1 解釋: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 輸入: 10 輸出: 36 解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 說明: 你可以假設(shè) n 不小于 2 且不大于

    2024年02月10日
    瀏覽(23)
  • 算法分析與設(shè)計(jì)--動態(tài)規(guī)劃

    算法分析與設(shè)計(jì)--動態(tài)規(guī)劃

    一、動態(tài)規(guī)劃簡介 二、動態(tài)規(guī)劃求解步驟 三、動態(tài)規(guī)劃典型應(yīng)用 數(shù)字三角形問題 最大子段和問題 0-1背包問題 四、最長公共子序列問題 動態(tài)規(guī)劃求解 五、總結(jié) 算法語言--java語言 動態(tài)規(guī)劃算法通常用于求解具有某種最優(yōu)性質(zhì)的問題。動態(tài)規(guī)劃與分治算法類似,其基本思想也

    2024年02月07日
    瀏覽(21)
  • 【算法分析與設(shè)計(jì)】動態(tài)規(guī)劃(上)

    【算法分析與設(shè)計(jì)】動態(tài)規(guī)劃(上)

    ?? 理解動態(tài)規(guī)劃算法的概念 。 ?? 掌握動態(tài)規(guī)劃算法的基本要素 : ??(1) 最優(yōu)子結(jié)構(gòu)性質(zhì) ??(2) 重疊子問題性質(zhì) ??掌握設(shè)計(jì)動 態(tài)規(guī)劃算法的步驟 : ??(1) 找出最優(yōu)解的性質(zhì),并刻劃其結(jié)構(gòu)特征 。 ??(2) 遞歸地定義最優(yōu)值 。 ??(3) 以自底向上的方式計(jì)算

    2024年02月08日
    瀏覽(17)
  • 算法設(shè)計(jì)與分析實(shí)驗(yàn)---動態(tài)規(guī)劃

    算法設(shè)計(jì)與分析實(shí)驗(yàn)---動態(tài)規(guī)劃

    任務(wù)描述 沿著河岸擺放 N 堆石子,現(xiàn)要將石子有次序地合并成一堆,規(guī)定每次只能選相鄰的 2 堆合并成新的一堆,并將新的一堆的石子數(shù),記為該次合并的得分。 例如: 4 堆石子 4,5,9,4 ,可以按 (((4,5),9),4) 合并。 第一次合并得分是 9 分,合并之后石子堆是 9,9,4 第二次合并得

    2024年02月08日
    瀏覽(20)
  • 算法設(shè)計(jì)與分析—動態(tài)規(guī)劃例題

    題目描述 求FIB數(shù)列第n項(xiàng)的值 輸入 輸入一個整數(shù)n,表示需要輸出FIB數(shù)列第n項(xiàng)的值 輸出 輸出FIB數(shù)列第n項(xiàng)的值 樣例輸入 ?復(fù)制 樣例輸出 ?復(fù)制 提示 題目描述 長江游艇俱樂部在長江上設(shè)置了n (n=10)個游艇出租站1,2,…,n。游客可在這些游艇出租站租用游艇,并在下游的

    2024年04月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包