簡體   English   中英

如何減少“put”函數的時間復雜度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM