查詢表(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 從查詢表中刪去某個資料...