旋转哈希

✍ dations ◷ 2025-04-04 11:23:30 #散列函数

旋转哈希(也称为滚动哈希、递归哈希、滚动校验和或滑动哈希)是一种哈希函数,输入的内容在一个窗口中进行移动哈希。

少数哈希函数允许快速计算滚动哈希值 — 只给出旧的哈希值,新的哈希值被快速计算出来,旧的值从窗口中移除,新的值添加到窗口中 — 类似于移动平均函数的计算方式,比其他低通滤波器更快。

主要应用之一是Rabin–Karp字符串搜索算法,该算法使用下面描述的滚动哈希。另一个流行的应用是rsync程序,它使用基于Mark Adler的adler-32的校验和作为滚动哈希。低带宽网络文件系统(LBFS)使用Rabin指纹作为其滚动哈希。

滚动哈希值最多只能是成对独立(英语:pairwise independent)的或强通用(英语:universal hashing)的。例如,它们不能是三向独立(英语:k-independent hashing)的。

通常使用仅包含乘法和加法的滚动哈希函数来解释Rabin–Karp字符串搜索算法:

其中 a {\displaystyle a} , data length , output: cut point ← 2KB //split minimum chunk size is 2KB ← 64KB //split maximum chunk size is 64KB ← ← ← // buffer size is less than minimum chunk size if ≤ then return n; if ≥ then ←     while < do ← ( << 1 ) + ] if !( & ) then return     return

其中

算法从数组下标为 M i n S i z e {\displaystyle MinSize} 开始循环,省去了处理长度不足最小分块所浪费的时间。计算当前字节下对应的指纹信息,当发现指纹信息等于提前预设好的 M a s k {\displaystyle Mask} 时,则进行分段处理。如果计算到最大的 M a x S i z e {\displaystyle MaxSize} 时仍然没有匹配到 M a s k {\displaystyle Mask} 时,此时强行进行分块。


所有滚动哈希函数在字符数上都是线性的,但其复杂度与窗口长度的关系( k {\displaystyle k} )不等。Rabin–Karp滚动哈希需要两个 k {\displaystyle k} 位数字的乘法,整数乘法是在 O ( k log k 2 O ( log k ) ) {\displaystyle O(k\log k2^{O(\log ^{*}k)})} 。通过循环多项式对ngram进行哈希处理,可以在线性时间内完成。

相关

  • 淋巴球淋巴细胞(英语:lymphocyte),也称淋巴球,为白细胞中体积最小的一种,直径6—8微米;在人体约占白细胞的20—30%,圆形细胞核,细胞质很少。某些疾病可以影响淋巴细胞数目的增减,如患肺结核
  • 伊本·赫勒敦伊本·赫勒敦(阿拉伯语:ابن خلدون‎,1332年5月27日-1406年3月19日),全名为阿布·扎伊德·阿卜杜勒拉赫曼·本·穆罕默德·本·赫勒敦·哈德拉米(阿拉伯语:أبو زيد ع
  • 木豆木豆(学名:Cajanus cajan),又名蒲姜豆、木豆、米豆、树豆、柳豆、白树豆、花螺树豆、观音豆、番仔豆、山豆根,为豆科木豆属下的一个种,台湾一般称为树豆,阿美语称 fata'an,泰雅语称
  • 拉斐尔·科雷亚拉斐尔·比森特·科雷亚·德尔加多(西班牙语:Rafael Vicente Correa Delgado;1963年4月6日-),出生于瓜亚基尔,厄瓜多尔经济学家及左翼民粹主义政治人物,曾任厄瓜多尔总统。2005年4月
  • 搜狗浏览器搜狗浏览器是一款由搜狐旗下的搜狗公司开发的网页浏览器,使用IE以及Chromium内核。其特色是内置代理加速功能,可提升联通、电信及教育网三大网段之间的互访速度,适合教育网用户
  • 第一次延坪海战本条目时间均以东九区(UTC+9)为准。第一次延坪海战发生在1999年6月15日,是继1950年朝鲜战争之后韩朝之间最大规模的正规作战。战斗于当日上午9点28分开始,朝鲜人民军海军警备艇
  • 叶绿素c1叶绿素 是六种叶绿素的其中一种,与叶绿素c2有相同的结构。它会使植物形成金黄色或棕色,并且是一种辅助色素。叶绿素c1主要帮助有机体收集光,但不是运用在光合作用上。
  • 刘龙 (明朝)刘龙(1476年-1554年),字舜卿,号紫岩,山西襄垣人,明朝官员。刘龙是孝宗弘治年间进士、刑部员外郎刘凤仪之子。他十岁即能作文,弘治八年(1495年)乙卯科乡试考中第二名举人。弘治十二年(14
  • 帕特·比尔德帕特里克·韦恩·“帕特”·比尔德(英语:Patrick Wayne "Pat" Beard;1947年9月9日-2017年2月7日),是美国的民主党政治人物,前明尼苏达州众议院议员。比尔德于明尼苏达州圣保罗出生,
  • 双福 (翻译进士)双福(19世纪?-?),正黄旗满洲人,清朝政治人物、翻译进士。双福出身监生。同治六年(1867年),乡试中翻译举人;同治七年,登翻译进士。光绪元年(1875年),任总理各国事务衙门章京。光绪四年(1878年