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 二分法查詢是...