靜態查詢表

2021-06-21 10:53:34 字數 1514 閱讀 6495

查詢表(search table)

靜態查詢表: 只進行查詢操作

動態查詢表: 在查詢表上可以進行刪除和插入操作

1.靜態查詢表的順序查詢

int search_seq(sstable *t, keytype key)

2.有序表的查詢

2.1折半查詢 binary search

int search_bin(sstable *t, keytype key)

return 0;

}可以用二叉樹來描述折半查詢的過程,這棵二叉樹稱為判定樹。查詢的次數是結點在樹上的層次,最大的查詢次數不過是樹的層次。

2.2 斐波那契查詢

2.3 適合關鍵字均勻分布的插值查詢

3.靜態樹表的查詢

如果記錄被查詢到的概率不同,查詢效能最佳的是帶權路徑長度之和最小的二叉樹,靜態最優查詢樹。

靜態最優查詢樹,是所有結點帶權路徑長度之和最小的查詢樹。其中權為每乙個記錄被查詢到的概率。

最優二叉樹,如赫夫曼樹,是樹的帶權路徑長度最小的樹,是所有葉子結點的帶權路徑長度之和。

構造最優二叉查詢樹有些難度,轉而構造次優二叉查詢樹secondary optimal search tree (sostree)

構造次優二叉查詢樹時,由於序列已經有序,只有盡量讓左右子樹權值和之差絕對值最小。

次優二叉查詢樹查詢類似於折半查詢,時間複雜度為o(logn)

typedef bitree sostree;

//由有序表構造一棵次優查詢樹

status createsostree(sostree *t,sstable *st)

}//差值計算方法: fabs(sw[high] + sw[low-1] - sw[j] - sw[j-1])

status secondoptimal(bitree *t,elemtype r,float sw,int low,int high)

}if(!(t = (bitree)malloc(sizeof(btnode)))) return overflow;

t->data = r[i];

if(i == low) t->lchild = null;

else secondoptimal(t->lchild,t->lchild.r,sw,int low,i-1);

if(i == high) t->rchild = null;

else secondoptimal(t->rchild,t->rchild.r,sw,int i+1,high);

return ok;

}4.索引順序表的查詢

索引順序查詢 or 分塊查詢

索引表為每乙個子表建立乙個索引項,每乙個索引項中包括關鍵字項和指標項。

關鍵字項:  子表中最大關鍵字        指標項:  指向子表中第乙個記錄

分塊有序:在索引表中關鍵字項有序

分塊查詢的兩個步驟:

1.在順序索引表中查詢到關鍵字所在的塊  :對順序表的查詢

2.在所在塊中查詢記錄                  :對未知順序的表查詢

靜態表查詢

靜態查詢表是指表結構不是在查詢過程中動態生成的,它可分為 順序查詢 無序 二分查詢 有序 分塊查詢 索引順序查詢 時間複雜度 o n public static int seqsearch int array,int key return 1 時間複雜度 o log2n 非遞迴實現 public s...

靜態查詢表演算法

演算法1 採用順序儲存結構建立靜態查詢表,對查詢表進行順序查詢和改進的順序查詢,並對其查詢效率進行比較 演算法2 採用順序儲存結構建立靜態查詢表 有序表,對有序表進行二分查詢 include include typedef int keytype typedef float keytype type...

靜態查詢表 順序查詢 折半查詢 分塊查詢

引言 除去各種線性和非線性的資料結構外,還有一種在實際應用中大量使用的資料結構 查詢表。查詢表是由同一型別的資料元素構成的集合。對查詢表經常進行的操作有 1 查詢某個 特定的 資料元素是否在查詢表中 2 檢索某個 特定的 資料元素的各種屬性 3 在查詢表中插入乙個資料元素 4 從查詢表中刪去某個資料...