********************
順序查詢演算法
********************
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.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...