問題描述:對於給定的一組改路,構造乙個期望搜尋代價最小的二叉查詢樹。
《演算法導論》第二版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 的最優二叉搜尋樹的平均比較次數 遞推...