《图解算法》阅读11—散列表的冲突和性能

冲突

当给两个键分配的位置相同时就会出现冲突。
处理冲突最简单的方法就是,如果两个键映射到了同一个位置,就在这个位置存储一个链表。
总结如下:

  1. 散列函数很重要。最理想的情况是散列函数将键均匀地映射到散列表的不同位置。
  2. 如果散列表存储的链表很长,散列表的速度将急剧下降。

性能

散列表执行各种操作的时间都为O(1)。O(1)被称为常量时间。常量时间并不意味着马上,而是说不管散列表多大,所需的时间都相同。
在平均情况下,散列表的查找速度和数组一样快,插入、删除的速度和链表一样快。
但是在最糟糕的情况下,散列表的查找、插入、删除的时间复杂度是O(n)。因此在使用列表时,避开最糟糕情况至关重要。为了避免冲突,需要有:

  • 较低的填装因子
  • 良好的散列函数

填装因子

散列表采用数组来存储数据,填装因子等于散列表中包含的元素数除以数组中被占用的位置数。填装因子度量的是散列表中有多少位置是空的。
填装因子越低,发生冲突的可能性越小,散列表的性能越高。一旦填装因子大于0.7,就调整散列表的长度。

良好的散列函数

良好的散列函数让数组中的值呈均匀分布

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值