演算法之 查詢演算法 (一) Java

2021-07-14 21:47:00 字數 1343 閱讀 6817

package rte;

/** * 無序鍊錶

* 順序查詢

* @author isc

* * @param * @param */

public class sequentialserarch

} public value get(key key)

} return null;

} public void put(key key,value val)

first = new node(key,val,first);

} }}

符號表的實現使用了乙個私有的內部node類來在鍊錶中儲存鍵和值,get()的實現會順序地搜尋鍊錶查詢給定的鍵,找到則返回相關聯的值,put()的實現也會順序地搜尋鍊錶查詢給定的鍵,如果找到就更新,否則建立新節點,更新到頭部。

package rte;

public class binarysearchst ,value>

public int size()

public value get(key key)

int i = rank(key);

if(i0)lo=mid+1;

else return mid;

} return lo;

} public void put(key key,value val)

keys[i]=key;

vals[i]=val;

n++;

} /**

* 遞迴的二分查詢

* @param key

* @param lo

* @param hi

* @return

*/public int rank(key key,int lo,int hi)

}

它使用的資料結構是一對平行的陣列,乙個儲存鍵乙個儲存值,核心演算法為rank(),返回表中小於給定鍵的鍵的數量,對於get只要給定的鍵存在表中,rank就能精確地告訴我們在**找到它。

對於put()的插入新值,我們將所有更大的鍵向後移動一格來騰出位置(要從後向前移動)並將給定的鍵值對分別插入到各自陣列的合適位置。

rank()的實現由兩種方式,一種遞迴,一種非遞迴,若表中存在該鍵,則其應該返回該鍵的位置,也就是表中少於它的鍵的數量,若不存在,還是返回如此。

我們需要同時能夠支援高效查詢和插入兩種操作的符號表實現,鍊錶進行插入執行效率很高,但是查詢只能遍歷,陣列查詢很方便但是插入需要乙個個移動元素,為了將二分查詢的效率和鍊錶的靈活性結合起來,需要更複雜的資料結構,能夠兩者同時擁有的就是二叉查詢樹。詳細下節介紹

java演算法之折半查詢

int mid low high 2 0 6 2 3 a mid a 3 20 因為 num a mid 所以 low mid 1 4 high 6 step2 mid 4 6 2 5 a mid a 5 35 因為 num a mid 所以 low mid 1 high 6 step3 mid l...

Java 查詢演算法

這個問題有幾個點要先確認 如果知道下標的話就方便了,查詢的複雜度為1.如果是針對值的查詢,那麼順序遍歷是o n 二分查詢 使用二分查詢的話可以減少時間複雜度為 o logn 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。aut...

Java查詢演算法

1 線性查詢演算法 這個就是典型的線性查詢,從頭到尾 查詢資料 我們是根據什麼來查詢呢?我們是根據值來查詢,返回她的所有值 public int search long value 2 二分法查詢演算法 二分法查詢前提是你這個陣列是有序的 比如說一組陣列是 1,3,4,5,7,9,10 二分法查詢是...