[英]How to reduce time-complexity in "put" function
我試圖找到一種方法來使我的算法執行得更快。 這個函數目前正在做的是將值(字符)和鍵(字符串)插入我的帶有 7 個插槽的哈希表中。 它還在運行檢查 A. 是否有東西占據了它的最佳位置,然后將其放置在最佳可用位置。 B. 如果插入了 2 個相同的密鑰,新密鑰只是將它的值轉移到舊密鑰,而不是自己占用一個新插槽。 有沒有辦法在不迭代我的“鍵”數組的情況下做到這一點?
public void put(String key, Character val) {
int z = hash(key);
while(keys[z] != null){
if(key.equals(keys[z])){
vals[z]= val;
break;
}
z ++;
if (z>6){
z=0;
if(key.equals(keys[z])){
vals[z]= val;
break;
}
if(keys[0]==null){
break;
}
else{
z++;
}
}
}
keys[z] = key;
vals[z] = val;
N += 1;
}
更新:這是我的 hash() 函數
public int hash(String key) {
int i;
int v = 0;
for (i = 0; i < key.length(); i++) {
v += key.charAt(i);
}
return v % M;
}
如果我理解你的代碼是正確的,你就有一個帶有線性探測的開放地址哈希表。
線性探測的替代方案(您正在尋找空位的循環)是:
但無論如何,最壞情況下的時間將是線性的。 對於只有 7 個元素的非常小的表格,您的線性方法增量為 1 看起來不錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.