從平方探測法引申——平方數列取模的規律數列
阿新 • • 發佈:2019-02-17
- 今天跟人複習了散列表中的平方探測法,發現一個十分有趣的事實
自然數列 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | …… |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
平方數列 | 1 | 4 | 9 | 16 | 25 | 36 | 49 | 64 | 81 | 100 | 121 | 144 | 169 | 196 | 255 | 265 | 289 | …… |
mod 6 | 1 | 4 | 3 | 4 | 1 | 0 | 1 | 4 | 3 | 4 | 1 | 0 | 1 | 4 | 3 | 4 | 1 | …… |
mod 7 | 1 | 4 | 2 | 2 | 4 | 1 | 0 | 1 | 4 | 2 | 2 | 4 | 1 | 0 | 1 | 4 | 2 | …… |
mod 17 | 1 | 4 | 9 | 16 | 8 | 2 | 15 | 13 | 13 | 15 | 2 | 8 | 16 | 9 | 4 | 1 | 0 | …… |
可以發現 對6取餘,是一個迴圈數列,迴圈節是143410.
並且除掉0之後,這串子數列是對稱的
這個結論對於7和17也是成立的
那麼 是不是對於任意的正整數k>2,都是成立的呢?
對於任意的自然數n來說,總可以表示成n=a*k±r,其中a是商,r是餘數
所以
所以
對於一個k的週期來說
(k為偶數。k為奇數時只是多處理一個數字,原理是一樣的)
Mod k | 1 | 2 | 3 | 4 | …… | k/2 | k/2+1 | k/2+2 | …… | k-1 | 0 |
---|
我們有
……
Mod k | 1 | 2 | 3 | 4 | …… | k/2 | -k/2+1 | -k/2+2 | …… | k-1 | 0 |
---|
可以看到 餘數是從1,2……,k/2,-k/2+1……-2,-1,0這樣變化的。
又有
自然就會看到這是個對稱的變化了。
那麼,形如
這樣的數列呢?
容易得到當λ 是偶數的時候,還是有這樣的性質。
當λ 是奇數的時候
此時就不是對稱的了。
對於平方探測法
當
這就產生了衝突,這個衝突是必定存在的。
於是,Hash的可選空位必定小於等於k/2.