二分查詢對於等概率的查詢的效能是最優的,但是如果我們對於
資料查詢的概率不相等時,顯而易見簡單再用二分查詢不一定能得到最高的效率。
如果只考慮查詢成功的情況,則使查詢效能達最佳的判定樹是其帶權內路徑長度之和ph值(ph=w1h1+w2h2+...+wnhn)取最小值的二叉樹。
這種二叉樹稱為靜態最優查詢樹。
找到最優查詢樹的方法複雜度較高,討論構造乙個ph值"近似最小"的次優查詢樹。大量的實驗研究表明,次優查詢樹和最優查詢樹的查詢效能之差僅為1%-2%,很少超過3%。而構造次優查詢樹的複雜度是o(nlogn)。
下面是實驗**
void secondoptional(bitree &t,elemtype r,float sw,int low,int high)
}t = (bitree)malloc(sizeof(bitnode));
t -> data = r[i];//生成結點
if(i == low) t->lchild = null;//左子樹空
else secondoptimal(t->lchild,r,sw,low,i-1);//構造左子樹
if(i == high) t->rchild = null;//右子樹空
else secondoptimal(t->rchild,r,sw,i+1,high);//構造右子樹
}//secondoptimal
資料結構番外篇 stl應用 1 優先佇列
stl是一種重要技巧,可以極大地簡化程式設計過程 在總結stl之前,我們先簡單介紹一下迭代器。迭代器可以簡單理解為位址的等價物。在不同資料型別中迭代器支援的操作略有不同 其中vector使用的是隨機訪問迭代器,其支援的操作可以參考上述 雖然本文用不上預備知識,但是還是先說一下吧 接下來介紹常用stl...
資料結構 靜態查詢
靜態查詢表,意思是針對這個表進行靜態查詢,何為靜態,那就是不能動態修改表中內容,不能對錶進行增加 刪除。靜態查表表,有哪幾種基本辦法呢?順序查詢法 折半查詢法 分塊查詢法 順序查詢法,從佇列頭部逐個比對到末尾就可以了。儲存資料可以使用陣列或鍊錶,資料通常沒有非遞增 非遞減關係 折半查詢 針對有嚴格大...
資料結構 靜態查詢
主要討論順序表 有序表 索引表和雜湊表查詢的各種實現方法,以及相應查詢方法在等概率情況下的平均查詢長度。查詢表 search table 相同型別的資料元素 物件 組成的集合,每個元素通常由若干資料項構成。關鍵字 key,碼 資料元素中某個 或幾個 資料項的值,它可以標識乙個資料元素。若關鍵字能唯一...