爲了學習的目的,我正在編寫自己的哈希映射實現。我使用separate chaining with list heads作爲我的主題。我該如何改進我自己的哈希映射的實現
這是結構會是什麼樣子:
| 0 | ---> | 11 | ---> | 33 | ---> | -- | ---> | 121 | ---> | TAIL |
| 1 | ---> | 12 | ---> | 34 | ---> | -- | ---> | 122 | ---> | TAIL |
| - |
| - |
| - |
| D-1 | ---> | -- | ---> | -- | ---> | -- | ---> | -- | ---> | TAIL |
這是鏈表,其中的一個陣列,
d =大小的數組,
| 11 | =帶鍵的元素; 11和元素插入排序方式
算法:
void Insert(key, value):
int bucket = hash_fn(key); // key % D, for now
// accessing this bucket or array-index in array is O(1)
// insert in linked list at the right position
LL[bucket]->insert(new object(key, value))
bool Lookup(key):
int bucket = hash_fn(key); // key % D, for now
// search for key in LL[bucket]
關注:如果很多的元素被映射到同一個桶中,搜索將不會是O(1),事實上,它可能傾向於O(n)。
我該如何改進?
你幾乎讀了我的想法,自我平衡樹的想法,以獲得O(日誌(米))的行爲。但是,我很欣賞使用一個好的散列函數的智慧。調查散列表的工作方式是一種非常實用的學習體驗!謝謝。 – brainydexter 2012-01-19 05:41:40