散列
散列表的实现常常叫做散列。散列是一直用于以常数平均时间执行插入,删除和查找的技术。
一种简单的散列函数。
int hash( const string & key, int tableSize)
{
int hashVal = 0;
for ( char ch : key )
hashVal += ch; /* 可改进为 hashVal = 37 * hashVal +ch ; 可将结果限定在适当的范围,是一种较好的分布,但不一定最好*/
return hashVal % tableSize;
}
由于ASCII 字符的值最多是127, 因此散列函数只能假设在0 和1016之间,其中1016 为127* 8. 这不是一个均匀分布的函数,所以这个简单的散列函数不是一种合理 分配。
当一个元素被插入时与一个已经插入的元素散列遇到相同的值,那么就产生一个冲突。 解决冲突的最简单两张方式: 分离链接法和开放定址法。