今天上网的时候看到了这种算法,简单记录一下。
普通的hash解决hash冲突的方法是使用链表,比如java中的HashMap。HashMap中只使用了一次hash,但暴雪hash算中用到了三个hash,三个hash都重叠的概率有多大?1:18889465931478580854784,一般的应用里怎么都够用了。
简单描述一下算法过程,其实很简单,也懒得去写代码了。
- 计算出字符串的三个哈希值(一个用来确定位置,另外两个用来校验)
- 察看哈希表中的这个位置
- 哈希表中这个位置为空吗?如果为空,则肯定该字符串不存在,返回-1。
- 如果存在,则检查其他两个哈希值是否也匹配,如果匹配,则表示找到了该字符串,返回其Hash值。
- 移到下一个位置,如果已经移到了表的末尾,则反绕到表的开始位置起继续查询
- 看看是不是又回到了原来的位置,如果是,则返回没找到
- 回到3。