@skiery
定義:在資料集合中尋找滿足某些條件的資料元素過程。
用於查詢的資料集合成查詢表:
1.查詢某個元素是否存在;
2.查詢某個元素的屬性;
1 2屬於靜態查詢表,常用方式:順序查詢表、折半查詢
3.動態查詢表:二叉排序樹、二叉平衡樹
資料元素中某個可以唯一標識該元素的資料項;
在查詢過程中,一次查詢的長度指需要比較的關鍵字的次數,而平均查詢長度是所有查詢過程中進行關鍵字的比較次數的平均值。
asl = σpi*ci n為查詢表中元素個數,pi是查詢第i個元素的概率,一般為等概率查詢,pi的為1/n,ci為找到第i個元素需要比較的關鍵字次數,即查詢長度。
int
search1
(int a,
int n,
int key)
}return0;
}int
search2
(int a,
int n,
int key)
a[0]= key;
while
(a[i]
!=key)
if(i==0)
return0;
return i+1;
}
asl:
1.成功:(n+1)/2
2.失敗:n
時間複雜度:o(n)
演算法思路:首現給定key與表中間元素的關鍵字比較,相等則查詢成功,返回位置;失敗則縮小查詢範圍,在縮小的範圍內繼續進行折半查詢,重複直到找到位置,或確定沒有該元素,查詢失敗。
適用範圍:有序的順序表
int
binary_search
(int a,
int n,
int key)
else
}return0;
}
折半查詢判定樹:可以將查詢過程化為折半查詢二叉樹,查詢的比較次數就是從根節點到該節點經歷的結點數
n個結點的完全二叉樹高度為log(2(n+1)),所以折半查詢時間複雜度為o(logn)。
asl:成功:直接求所有比較成功次數的期望,即每個點所在層數的和除以總點數;
失敗:直接求在每個位置失敗所需的次數,再除以失敗的情況的和,得到結果。
按索引查詢,需要額外建立乙個索引表來儲存索引,每個索引對應表中每一塊,並且每個塊間都是有順序的。
(1)塊間折半查詢,塊內順序查詢:
asl = asl(折半)+asl(順序) = [log2(b+1)] + (1+s)/2
(2)塊間塊內均順序查詢:
asl = asl(塊間順序)+asl(塊內順序) = (1+b)/2 + (1+s)/2
二叉排序樹(binary search tree),也叫二叉搜尋樹,是一顆空樹,或者具有以下性質的樹:
(1)若左子樹不空,則左子樹上所有結點值均小於其根結點的值;
(2)若右子樹不空,則右子樹上所有結點值均大於其根結點的值。
左小右大
與根結點比較,小於根結點向左子樹找,大於根結點向右子樹查詢。
bitnode *
bst_search
(bitnode *t,
int key)
)}
1)空樹:直接插入;
2)樹非空:檢測是否有重複關鍵字結點;
1.存在:不插入,直接返回插入失敗;
2.不存在:檢查根結點值和待插入關鍵字值的大小關係遞迴插入左右子樹
int
bst_insert
(bitnode*
&t,int k)
else
if(t-
>key == k)
return0;
else
if(t-
>key>k)
return
bst_insert
(t->lchild,k)
;else
return
bst_insert
(t->rchild,k)
;}
1.刪除葉子節點:直接刪除;
2.只有乙個孩子節點:用孩子節點替代父節點;
3.有兩個子節點:找到左子樹的最大節點作為前驅節點;找到右子樹的最小節點作為後繼節點,
雜湊表:根據給定的關鍵字計算出關鍵字在表中的位址的資料結構,建立了關鍵字和存貯位址之間的一種直接對映關係。
雜湊函式:乙個把查詢表中的關鍵字對映成為該關鍵字對應的位址的函式,幾位hash(key)=addr
會用即可,這裡面試和應用不會這麼詳細,有興趣大家自己看吧~
查詢演算法總結
順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...
查詢演算法總結
順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...
查詢演算法總結
一 順序查詢 二 二分查詢 int binarysearchrecursion int arry,int value,int start,int end else int binarysearchrecursion int arry,int len,int value int binarysearc...