查詢演算法總結

2021-06-09 00:46:55 字數 2757 閱讀 2063

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

順序查詢演算法

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

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. 基本思想

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

查詢演算法總結

順序查詢演算法 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...

查詢 演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...