还比较好懂的Hash,线性探测法

本文介绍了Hash如何通过模运算优化桶排序的空间复杂度,并重点讲解了线性探测法的原理。在选择模数时,建议使用质数以减少冲突,并确保模数大于数据总数。通过线性探测法,即使有余数相同的情况,也能找到空位插入数据。同时提到了另一种方法——拉链法,但本文主要聚焦于线性探测法的应用。以洛谷P1102 A-B数对为例,展示了如何使用Hash解决实际问题。
摘要由CSDN通过智能技术生成

Hash其实就是一个优化过的桶,而这种优化是用玄学的 % \% % 运算实现的。

我来直观的讲一讲这个玩意。

就以排序来说,如果最大数是longlong范围,而个数是20000000,HASH就可以将桶排的空间复杂度 O ( 1 ∗ l o n g l o n g ) O(1*long long ) O(1longlong) 优化成 O (大于20000000的模数 ) O\text{(大于20000000的模数}) O(大于20000000的模数。(我这样写对不对?)由于模数越大,得到的余数种类也就越多,在一定在大于数据个数的时候,它的余数种类一定是够塞的。(如果两个数模后余数相同,还有其他的空位够它塞,因为余数个数大于数据个数)。也就是说,用 h a s h hash hash 就相当于把桶排那些用不到的位置都给节约了。

我们先选择一个模数,这个模数最好应该是质数,这样能防止重复。并且这个模数还应该满足比数据总数大,越大越好,这样比较优,(但是我怀疑会较低 % \% %

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值