********************
順序查詢演算法
********************
1. 演算法描述
順序比較即可。
2. 平均查詢長度
(n+1)/2, 其中n為表長。
3. 演算法實現
省略4. 優化思想
根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。
如果上述的經驗從概率上來講是成立的,則可以加快順序查詢的速度。
********************
二分查詢演算法
********************
1. 演算法描述
限制:待查表必須是有序的向量(在記憶體中連續儲存)
首先和陣列中點比較,如果等於則返回,如果小於中點則在左邊區間查詢,如果大於中點則在右邊區間查詢。
2. 平均查詢長度
lg(n+1)
3. 演算法實現
(1) 非遞迴方式
[cpp]view plain
copy
static
const
interror = -1;
template
<
typename
t>
intbinary_search(t *array,
const
intsize,
const
t & key)
intlow = 0, high = size - 1;
intmid_index = 0;
while
(low <= high)
else
if(key > array[mid_index])
else
} return
error;
}
(2) 遞迴方式
[cpp]view plain
copy
template
<
typename
t>
intbinary_search_iter(t *array,
const
intlow,
const
inthigh,
const
t & key)
intmid_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(樹的層次)。
********************===
雜湊查詢
********************===
基本思想
將元素的值和其位置直接對應,對應的方法就是雜湊函式(如平方取中,除餘法等等);然而再好的雜湊函式也會引起衝突,則解決衝突的方法是如拉鍊法,線性探測法,二次探測法等等。
二分查詢演算法解析(java版)
1 確定該區間的中點位置 mid low high 2 min代表區間中間的結點的位置,low代表區間最左結點位置,high 代表區間最右結點位置 2 將待查 a值與結點 mid的關鍵字 下面用 r mid key 比較,若相等,則查詢成功,否則確定新的查詢區間 如果 r mid key a 則由表...
Java版A星演算法
a星演算法步驟 1.起點先新增到開啟列表中 2.開啟列表中有節點的話,取出第乙個節點,即最小f值的節點 判斷此節點是否是目標點,是則找到了,跳出 根據此節點取得八個方向的節點,求出g,h,f值 判斷每個節點在地圖中是否能通過,不能通過則加入關閉列表中,跳出 判斷每個節點是否在關閉列表中,在則跳出 判...
排序演算法 java 版
第一 選擇排序 外層迴圈從第i個位置開始尋找最小值與i 1位置的元素進行交換,最終達到有序狀態。有點遞迴的思想,每次都是在i length中尋找最小值放在i 1的位置 第一層for迴圈,從陣列的索引1處開始向後值陣列結束,尋找最小值。public int selectsortmethod int v...