【算法】 排列hash 變進制數 的理解 《Hash函數的設計優化》 李羽修

前言

如標題,學習內容來自《Hash函數的設計優化》-李羽修
論文開頭爲
論文


寫這篇博客的原因只是因爲發現本智障在這個部分停留很久,也希望能對他人有所幫助


正文

關於變進制數

我覺得首先應理解變進制數是什麼
一般所說的k進制數都是在每一位上逢k進一,每一位上的進制都是一樣的,有人稱爲“常數進制”。
而變進制數是這種數的延伸,每一位上的進制都是給出的一個數ai,只在這一位上逢ai進一
有興趣的可以自證一下這種數是可以不矛盾地進位的
理解它的最好方式就是手動模擬一個變進制數與十進制數轉化的過程
現在我們有變進制數n=121 , 每一位進製爲a3=5,a2=4,a1=3 (下標從右向左數)
那麼先考慮第2位的1被進位而來是因爲有3,第3位的1被進位而來是因爲有4個第二位
則轉化爲10進制數即爲 34+32+1=19
十進制數19轉化爲該進制組下的變進制數爲
第三位爲19 / (3 * 4) = 1
第二位爲19 mod (3 * 4) / 3 = 2
第一位爲19 mod (3 * 4) mod 3 = 1

可以被一一對應的原因

理解了變進制數的表示 ,需要知道可以被一一對應的原因
而論文中有詳細講解,我說些我覺得可以注意的地方
首先是p11=(p1)pn1+(p1)pn2++(p1)
一開始沒想明白式子的正確性證明,結合之前寫的這篇博客 的例7,覺得可以將這個式子放在p進制下看,等式左邊是最大值,右邊看作p進制的每一位最大值相加(類比 (2 << 6) + (2 << 16)),就很顯然了。大不了最後再轉回十進制。
其它部分應該跟着論文來就沒問題

也許會有的疑問

至少對我來說,覺得奇怪的是作者在將全排列和更一般的排列與自然數對應的具體方法時,所說的像是突然冒出來的一樣。

一

二

爲什麼要這樣?
後來發現其實這樣只是爲了保證這樣轉化是保證每一位都滿足變進制數要求(個數一定不是負數,結果小於n諸如此類),且這樣轉化是唯一結果(沒有證明,但應該是如此)
所以其實也許我們也可以在瞭解一一對應及變進制數後自己設計同樣“保證每一位都滿足變進制數要求,且這樣轉化是唯一結果”的方法,也可以達到效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章