详细信息:http://www.oschina.net/code/snippet_99767_1217
1.一个Hash算法首先要有一个Hash表:
2.还要有一个压缩算法,把字符串压缩成32位无符号整数:
3.在上面那个压缩算法中有一个cryptTable,我们要先把它处理一下:
4.现在就可以Hash一个字符串了,我们调用了三次压缩算法,获取了三个hash值,第一个hash值用来计算其在hash表中的索引,还有两个用来处理碰撞情况(两个不同的字符串三次hash的结果是一样的概率基本为0)
5.我们还需要一个接口,用来判断一个字符串是否被hash过
至此,一个简单的字符串hash算法就完成了。
---------------------------------------------------------------------------------------------------------------------------------------------------
总结:
一开始对下面的代码不是很理解
其实,就是一个hash值与其他的碰撞了,那就先来后到,挑下面相邻的地方;这并不会影响Hashed()的匹配,匹配时也是按照这样的方法,并且还要匹配那两个hash值,有点像从一个房间开始,挨个敲门,看里面是不是要找的人!
所以说这是一个空间换时间的算法,hash表越大,发生碰撞的可能性就越小,算法复杂度就越接近于O(1);