我正在學習編程抽象數據類型。試圖構建基於自定義哈希表的字典。算法:實現基於自定義散列表的字典
到目前爲止,我創建了一個班級佔位符。
public class HashMapDict implements IDict
{
private var _map:Array;
public function HashMapDict()
{
_map = new Array();
//TODO: implement function
}
public function set(keys:Array):Boolean
{
// 1. For each key in array of keys
// 2. Pass Key.key to hash function
// 3. Write Key to _map[hash(Key.key)]
return true;
}
}
我看到主要的方法集執行以下操作
// 1. For each key in array of keys
// 2. Pass Key.key to hash function
// 3. Write Key to _map[hash(Key.key)]
我所想的是使用加密庫進行哈希生成。但我對它應該如何工作有點困惑。例如試圖看看像as3crypto(http://crypto.hurlant.com/demo/)這樣的幾個庫,它似乎產生散列的方式,我真的不認爲可以用於數組中的索引。
E.g.
http://screencast.com/t/bE1lYQEqp4D
你可以建議我可以用它的lib來產生可用哈希?他們應該如何看起來像
我只是爲了教育目的而做的。在實際應用中,我將使用已經實現的字典。你的代碼的想法是什麼? –
我的哈希碼(這是一個非常標準的哈希碼,我認爲除了可能的選擇13)是一個多項式,字符代碼爲係數,評估爲13.(使用任何其他數字 - 但質數最好。 )[Java的String.hashCode()做了類似的事情,使用31而不是13。](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode()) –
試過這種方法。一般來說,對於key =「bob」,它生成一個哈希碼= 337.所以,通過在數組中插入一個帶有這樣的鍵的項目,例如_map [337] = MYKEY我將得到一個由337個空元素組成的數組(其中一個不爲空)。你認爲沒關係嗎?我只是有點擔心,如果在內存中創建如此大的陣列可以。 –