从平方探测法引申——平方数列取模的规律数列

  • 今天跟人复习了散列表中的平方探测法,发现一个十分有趣的事实
自然数列1234567891011121314151617……
平方数列149162536496481100121144169196255265289……
mod 614341014341014341……
mod 714224101422410142……
mod 1714916821513131528169410……

可以发现 对6取余,是一个循环数列,循环节是143410.
并且除掉0之后,这串子数列是对称的
这个结论对于7和17也是成立的

那么 是不是对于任意的正整数k>2,都是成立的呢?

对于任意的自然数n来说,总可以表示成n=a*k±r,其中a是商,r是余数
所以

n2=(ak±r)2=a2k2±2ark+r2r[0,k2]
所以
n2r2(modk)

对于一个k的周期来说

(k为偶数。k为奇数时只是多处理一个数字,原理是一样的)

Mod k1234……k/2k/2+1k/2+2……k-10

我们有
k2+1k2+1(modk)
k2+2(k22)(modk)
k2+3(k23)(modk)
……
k11(modk)
k0(modk)

Mod k1234……k/2-k/2+1-k/2+2……k-10

可以看到 余数是从1,2……,k/2,-k/2+1……-2,-1,0这样变化的。
又有

{n2r2(modk)r2=r2

自然就会看到这是个对称的变化了。

那么,形如
{an|an=nλ,λN+}
这样的数列呢?
容易得到当λ 是偶数的时候,还是有这样的性质。
当λ 是奇数的时候
rλ=(r)λ
此时就不是对称的了。

对于平方探测法 F(i)=i2 来说
i>k2 的时候,必定在前面有 i0 使得 Hash(x)+i20Hash(x)+i2(modk)
这就产生了冲突,这个冲突是必定存在的。

于是,Hash的可选空位必定小于等于k/2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值