一.哈希表的函数特征及实现原理
哈希函数的特征
• int fun(string) 输入域无穷大,输出域有限 //f就是哈希函数,哈希函数有很多种
• 不同的输入,可能会有相同的输出 //会产生哈希冲突
• 相同的输入,输入一定相同 //便于查找修改删除元素
• 类似的输入,通过打乱,然后得到均匀
哈希原理
第一步:通过哈希函数得到一个值 buckectnum=fun()%n
第二步:这个值便是桶号 //即桶号为0~n-1;
第三步:把数据对放到相应的桶里面去
哈希冲突的解决方案
•开放地址法 即若相应桶号已有元素便放到下一位 //浪费桶的个数
•再哈希法 即换个哈希函数直到没有冲突为止
•链地址法 即每个桶里面装的是链表的头节点 //节省空间但是如果链表过长会增加时间复杂度 o(n);
•建立一个公共溢出区 // 为所有冲突的关键字记录建立一个公共的溢出区来存放。在查找时,对给定关键字通过散列函数计算出散列地址后,先与基本表的相应位置进行比对,如果相等,则查找成功;如果不相等,则到溢出表进行顺序查找。如果相对于基本表而言,在有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的