最優二叉查詢樹

2022-05-17 18:48:01 字數 1011 閱讀 9465

問題描述:對於給定的一組改路,構造乙個期望搜尋代價最小的二叉查詢樹。

《演算法導論》第二版213頁。

#include #include using namespace std;

#define key_number 5

#define infinity 1000

//期望搜尋代價,只使用1<=i<=n+1,0<=j<=n的表項

// 其中expected_cost[i,i-1]表示i為根的搜尋樹的期望搜尋代價,該搜尋樹只包含虛擬鍵d[i-1]

float expected_cost[key_number + 2][key_number + 2];

//只使用1<=i<=j<=n的表項

int root[key_number + 1][key_number + 1];

//概率和陣列

float w[key_number + 2][key_number + 2];

/* *先根遍歷最優二叉查詢樹

* start: 待遍歷的子樹的起始關鍵字

* end:待遍歷的子樹的結束關鍵字

* mid:待遍歷的子樹的樹根對應的關鍵字

* leaf_index:下乙個訪問的虛擬鍵下標

*/void constructrecursively(int start,int end,int mid,int& leaf_index)

else

}else

else

}}void construct(int n)

void optimalsearch(float *p,float *q,int n)

for(int len = 1;len <= n;++ len)}}

}}int main()

; float q[6] = ;

optimalsearch(p,q,5);

construct(5);

return 0;

}

看來看去,還是演算法導論寫得好~~

最優二叉查詢樹

1.演算法講解見 演算法設計與分析基礎 p223 p227 2.關於如何確定迴圈的值,見下圖 可得到下表 很顯然,d作為最外層迴圈,i為次外層,而j作為i的因變數存在。i 1 n d 相應的j i d k作為最記憶體迴圈,每次開始迴圈時,始終用temp儲存此次迴圈的最小值,即 3.如下 includ...

最優二叉查詢樹(optimal BST)

最優二叉查詢樹 一棵有n個結點的二叉查詢樹,已知每個結點的查詢概率pi 且 pi 1 要使查詢操作的平均比較次數最小。這裡討論的是成功查詢,不討論不成功的查詢 動態規劃 c i j 表示由結點i j組成的bst成功查詢的最小平均查詢次數。r i j 表示由結點i j構成最優二叉查詢樹時的樹根結點。轉...

最優二叉檢索樹

給定資料集 s x1 x2 xn 及s 的訪問概率分布如下 p a0 b1 a1 b2 a2 bn,an 求一棵最優的 即平均比較次數最少的 二分檢索樹.令w i,j 是p i,j 中所有概率 資料與空隙 之和 設m i,j 是相對於輸入s i,j 和p i,j 的最優二叉搜尋樹的平均比較次數 遞推...