如何使用java實現Open Addressing
如何使用java實現Open Addressing
你好! 我們這裡總共向您提供三種open addression的方法,分別為linear probing、quadratic probing和double hashing。
Linear Probing
Linear probing是計算機程式解決雜湊表衝突時所採取的一種策略。雜湊表這種資料結構用於儲存鍵值對,並且能通過給出的鍵來查詢表中對應的值。Linear probing這種策略是在1954年由Gene Amdahl, Elaine M. McGraw,和 Arthur Samuel 所發明,並且最早於1963年由Donald Knuth對其進行分析。
- 假設A是雜湊表的一個容量N為15的陣列;
- 將Keys(5、9、12、24、31、40、47、53、62、71)使用linear probing按照順序依次插入到陣列中。
public static void main(String[] args) {
int N = 15;
int[] A = new int [N];
int[] Keys = {5, 9, 12, 24, 31, 40, 47, 53, 62, 71};
for (int i = 0; i < Keys.length; i++) {
int j = 0;
int Position = Keys[i] % N;
while (A[Position] != 0) {
j = j + 1;
Position = Keys[i] % N + j;
}
A[Position] = Keys[i];
}
for (int i = 0; i < A.length; i++) {
System.out.println(A[i]);
}
}
Quadratic Probing
Quadratic probing是計算機程式解決雜湊表衝突時所採取的另一種策略,用於解決雜湊表中的衝突。Quadratic probing通過獲取原始雜湊索引並將任意二次多項式的連續值相加,直到找到一個空槽來進行操作。
- 假設A是雜湊表的一個容量N為15的陣列;
- 將Keys(5、9、12、24、31、40、47、53、62、71)使用quadratic probing按照順序依次插入到陣列中。
public static void main(String[] args) {
int N = 15;
int[] A = new int [N];
int[] Keys = {5, 9, 12, 24, 31, 40, 47, 53, 62, 71};
for (int i = 0; i < Keys.length; i++) {
int j = 0;
int Position = Keys[i] % N;
while (A[Position] != 0) {
j = j + 1;
Position = (Keys[i] % N + j*j) % N;
}
A[Position] = Keys[i];
}
for (int i = 0; i < A.length; i++) {
System.out.println(A[i]);
}
}
Double Hashing
Double hashing是計算機程式解決雜湊表衝突時所採取的另一種策略,與雜湊表中的開放定址結合使用,通過使用金鑰的輔助雜湊作為衝突發生時的偏移來解決雜湊衝突。具有open addressing的double hashing是表上的經典資料結構。
- 假設A是雜湊表的一個容量N為15的陣列;
- 將Keys(5、9、12、24、31、40、47、53、62、71)使用double hashing(我們假設h’(k)為13 - (k mod 13))按照順序依次插入到陣列中。
public static void main(String[] args) {
int N = 15;
int[] A = new int [N];
int[] Keys = {5, 9, 12, 24, 31, 40, 47, 53, 62, 71};
for (int i = 0; i < Keys.length; i++) {
int j = 0;
int Position = (Keys[i] % N + (13 - (Keys[i] % 13)) * j) % N;
while (A[Position] != 0) {
j = j + 1;
Position = (Keys[i] % N + (13 - (Keys[i] % 13)) * j) % N;
}
A[Position] = Keys[i];
}
for (int i = 0; i < A.length; i++) {
System.out.println(A[i]);
}
}
2018-06-17
相關文章
- 如何使用`open-uri`模組
- 如何使用充血模型實現防彈程式碼 - DZone Java模型Java
- 使用 Java實現mTLS呼叫JavaTLS
- The addressing-1.5.mar module, which is not valid, caused null java.lang.ExceptionInInitializerErrorNullJavaExceptionError
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- 使用Java實現WebSocket通訊JavaWeb
- 如何使用 redis 實現限流Redis
- Java 中使用 Failsafe 實現容錯JavaAI
- Java如何實現定時任務?Java
- Java如何實現延時訪問Java
- Java中使用FlatBuffer實現序列化Java
- Java中使用FlatBuffers實現序列化Java
- 使用Java加密與解密實現步驟Java加密解密
- Java使用Netty實現簡單的RPCJavaNettyRPC
- java 如何實現傳送郵件 email?JavaAI
- Java中如何實現執行緒呢?Java執行緒
- Java伺服器端如何實現跨越Java伺服器
- 教你如何用 Java 實現非同步呼叫Java非同步
- 如何在 Java 中實現無向圖Java
- Java檔案上傳如何實現呢?Java
- 如何正確實現 Java 中的 HashCodeJava
- 什麼是Java多型?如何實現Java多型?Java多型
- java大資料處理:如何使用Java技術實現高效的大資料處理Java大資料
- 從如何使用到如何實現一個PromisePromise
- 如何使用Redis實現分散式鎖Redis分散式
- python如何使用字典實現switchPython
- 如何使用 frp 實現內網穿透FRP內網穿透
- 如何使用Python 實現秒錶功能?Python
- 如何使用DeepFake實現影片換臉
- 使用微信wx-open-launch-app標籤實現微信網頁開啟AppAPP網頁
- Java Spi是如何找到你的實現的? ——Java SPI原理與實踐Java
- Java使用HttpClient實現遠端服務呼叫JavaHTTPclient
- 使用Java實現定時任務排程Java
- 使用 Rust 語言編寫 Java JNI 實現RustJava
- 使用Java預處理實現JSON插入PostgreSQLJavaJSONSQL
- Java Web實現使用者登入功能JavaWeb
- 使用Java實現簡單的鬥地主案例Java
- 使用java實現希表的基礎功能Java