查詢演算法總結

2021-09-26 23:07:46 字數 2493 閱讀 7402

@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...