我正在学习编程抽象数据类型。试图构建基于自定义哈希表的字典。算法:实现基于自定义散列表的字典
到目前为止,我创建了一个班级占位符。
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个空元素组成的数组(其中一个不为空)。你认为没关系吗?我只是有点担心,如果在内存中创建如此大的阵列可以。 –