構造次優查詢樹的演算法

2021-05-24 04:45:01 字數 986 閱讀 6989

根據書上的例子寫出的演算法**:

// 儲存待查詢的內容的結構體元素

typedef struct _elemkey_stru

elemkey;

// 求元素low到元素high的權值和

int sumkey(elemkey elemkey, int low, int high)

return sum;

}// 構造次優查詢樹

void secondoptimal(elemkey elemkey, int low, int high)

int i = low;

int min = abs(sumkey(elemkey, low+1, high) - sumkey(elemkey, 0, low-1));

int fixedsum = sumkey(elemkey, 0, high) + sumkey(elemkey, 0, low-1);

for (int j = low+1; j <= high; j++)

}printf("%c/n", elemkey[i].c);

secondoptimal(elemkey, low, i-1); // 構造左子樹

secondoptimal(elemkey, i+1, high); // 構造右子樹

}void main(int argc, char **argv)

,,,,,,,,,};

secondoptimal(aelem, 1, 9);

}背景理論基礎:

(1) 平均查詢長度:具體見課本

(2) 如果每個元素的查詢概率不相同,則折半查詢不一定是最優的(即平均查詢長度為最小),而且從不同的元素開始的查詢,所得的平均查詢長度是不一樣的,應該找到平均查詢長度最小的那種,本演算法便是解決此問題.

(3) 依據的數學理論是,每個元素的查詢長度由其 左右兩邊 的 元素查詢長度之和 求 差 ,差絕對值最小的,則以此元素為查詢的開始元素

(4) 然後遞迴查詢左右兩邊的這種元素.

構造次優查詢樹

似乎有些錯誤,但是錯在哪了呢?include include using namespace std const int num 9 int value num float weight num float sum weight num void init sum weight struct tre...

資料結構 次優查詢樹的構造

include iostream include iomanip include cmath using namespace std typedef struct treenode treenode,treep intlow 1 high 10 char r int weight int sw 初始...

靜態樹表查詢演算法 次優查詢樹

自 有關在靜態查詢表中對特定關鍵字進行順序查詢 折半查詢或者分塊查詢,都是在查詢表中各關鍵字被查詢概率相同的前提下進行的。例如查詢表中有 n 個關鍵字,表中每個關鍵字被查詢的概率都是 1 n。在等概率的情況,使用折半查詢演算法的效能最優。而在某些情況下,查詢表中各關鍵字被查詢的概率是不同的。例如水果...