五大查詢演算法總結

2021-06-20 18:34:55 字數 2799 閱讀 9945

********************

一、順序查詢演算法

********************

1. 演算法描述

順序比較即可。

2. 平均查詢長度

(n+1)/2, 其中n為表長。

3. 演算法實現

省略4. 優化思想

根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。

如果上述的經驗從概率上來講是成立的,則可以加快順序查詢的速度。

********************

二、二分查詢演算法

********************

1. 演算法描述

限制:待查表必須是有序的向量(在記憶體中連續儲存)

首先和陣列中點比較,如果等於則返回,如果小於中點則在左邊區間查詢,如果大於中點則在右邊區間查詢。

2. 平均查詢長度

lg(n+1)

3. 演算法實現

(1) 非遞迴方式

[cpp]view plain

copy

print?

static

const

int error = -1;   

template

int binary_search(t *array, const

int size, const t & key)  

int low = 0, high = size - 1;  

int mid_index = 0;  

while(low <= high)  

else

if(key > array[mid_index])  

else

}  return error;  

}  

static const int error = -1; 

templateint binary_search(t *array, const int size, const t & key)

int low = 0, high = size - 1;

int mid_index = 0;

while(low <= high)

else if(key > array[mid_index])

else

}return error;

}

(2) 遞迴方式

[cpp]view plain

copy

print?

template

int binary_search_iter(t *array, const

int low, const

int high, const t & key)  

int mid_index = (low+high)/2;  

if(key == array[mid_index])  

else

if(key > array[mid_index])  

else

}  

templateint binary_search_iter(t *array, const int low, const int high, const t & key)

int mid_index = (low+high)/2;

if(key == array[mid_index])

else if(key > array[mid_index])

else

}

********************

三、分塊查詢演算法

********************

1. 基本思想

以增加空間複雜度為代價(儲存每塊中的最大值已經最大值的位置),為原陣列做乙個索引(索引本身是遞增有序的),這樣先查索引,再查塊內位置。如果索引的選擇科學有效,則可以獲得比順序查詢快的速度。

2. 演算法描述

抽取各塊中的最大關鍵字及其起始位置構成乙個索引表id[l..b],即: id[i](1≤i≤b)中存放第i塊的最大關鍵字及該塊在表r中的起始位置。由於表r是分塊有序的,所以索引表是乙個遞增有序表。

先用二分法查到元素可能所在的塊起始位置,而後在塊內進行順序查詢。

3. 平均查詢長度

平均查詢長度在順序查詢和二分查詢之間,並且當結點數為元素數量的平方根時,查詢長度最小。

********************===

四、二叉排序樹上的查詢

********************===

1. 基本思想

由如何改進二分查詢的缺陷(插入和刪除操作需要移動大量的資料)而得出的一種演算法,用二叉排序樹儲存資料,由於二叉樹的插入和刪除操作的時間複雜度相對低,而且也支援二分查詢,所以在動態資料查詢方面優於二分查詢。

2. 演算法描述

二叉樹的特點是中序遍歷可以得到遞增的序列。很容易可以得出在二叉排序樹上進行二分排序的遞迴**。

3. 平均查詢長度

和二叉排序樹的形態有關。在極端情況下,二叉樹只有單一的左或右分支,則查詢長度為(n+1)/2;如果是平衡二叉樹,則查詢長度為lgn(樹的層次)。

********************===

五、雜湊技術下的查詢

********************===

1. 基本思想

將元素的值和其位置直接對應,對應的方法就是雜湊函式(如平方取中,除餘法等等);然而再好的雜湊函式也會引起衝突,則解決衝突的方法是如拉鍊法,線性探測法,二次探測法等等。

演算法之五大查詢演算法

五大經典查詢演算法 線性查詢,通過 遍歷,乙個乙個比較 核心演算法 順序查詢 public static int orderlookup int list,int key return 1 折半查詢 只能用於有順序的陣列 將需要查詢的數與陣列的中值進行比較,若小於,right指標左移,大於則右移,每...

五大常用演算法總結

據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質就是解決問題。當資料量比較小時,其實根本...

五大常用演算法總結

據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質就是解決問題。當資料量比較小時,其實根本...