散列算法从两个方面来看,一是散列函数的构造,二是冲突的解决方法。散列函数的优劣主要参考因素是装填因子;
散列函数的构造
- 除整留余法, 此方法的核心是找到一个素数作为数组的长度,并且构造的算法为hash(key) = key % M( M 是素数)
- 优点:简单,易于构造。
- 不足:1.)hash(0) 恒等于0,具有不变的项。显然违背了 hash 的要义,随机性不好。2.) 此外,用取余的方法键之间的存在线性的联系,也没有一个好的随机性。
- MAD,hash(key) = (a*key + b) % M
- 数字分析法,此方法抽取 key 中的某几位来作为地址。优势也是简单。但缺点是只取几位作为参考,与其他未被取到的值没有产生联系。
- 折叠法,将数字分成几组,并把每组相加的和作为地址。
- 伪随机法,该方法确实方便快捷而且也满足随机性。但问题在于伪随机数的生成方法存在移植性问题。因此使用时也需谨慎。