查詢演算法Java版

2021-07-16 05:47:58 字數 2326 閱讀 3140

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

順序查詢演算法

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

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