旋转哈希

✍ dations ◷ 2025-11-22 16:28:42 #散列函数

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

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

主要应用之一是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进行哈希处理,可以在线性时间内完成。

相关

  • 疟原虫疟原虫属(Plasmodium)是一类单细胞、寄生性的囊泡虫。本属生物通称为疟原虫。本属生物中有五种疟原虫会使人类感染疟疾,包括恶性疟原虫(Plasmodium falciparum)、三日疟原虫(Plasm
  • Pongo猩猩属(学名:Pongo),也叫人猿、红猩猩、红毛猩猩,灵长目人科的一属,与猴子最大不同的地方就是没有尾巴,能用手或脚拿东西。马来语和印尼语叫做Orang utan,意思 “森林中的人”。与人
  • 主板微处理器通过:存储器通过:周边设备通过:扩展卡通过:主板(英语:Motherboard, Mainboard,简称Mobo);又称主机板、系统板、逻辑板(logic board)、母板、底板等,是构成复杂电子系统例如电
  • 清莱清莱市(英文名称:Chiang Rai;泰文名称: เชียงราย)是泰国最北方的都府,人口约223,725人。清莱市(东经99°48′ 北纬19°54′)高海拔395米,位处清迈东北面约180公里、泰国首
  • 耒阳市耒阳市(汉语拼音:lěiyáng;注音:ㄌㄟˇ ㄧㄤˊ),别称纸都,是中华人民共和国湖南省衡阳市下辖县级市,因古代神农氏在此地发明创造耒耜(古代农耕工具)而得名,亦有耒水贯穿其中。耒阳也是
  • 天平节度使天平军节度使,简称天平节度使,为唐朝、五代、北宋今山东省西南部地方的藩镇节度使之一。唐宪宗元和十四年(819年)二月,唐军平定淄青节度使李师道;三月,从淄青节度所领分出曹州、郓
  • 僧王僧伽拉者(巴利语:Sangha-raja;高棉语:សង្ឃរាជ ;泰语:พระสังฆราช ),意译为僧王,上座部佛教名词,是泰国和柬埔寨等东南亚国家巴利语系佛教的最高领袖的名称,名义上是全
  • 前黎朝前黎朝(越南语:Nhà Tiền Lê),为越南历史的朝代之一,由黎桓建立,立国期间为980年-1009年。黎桓原为丁朝的十道将军,在丁废帝继位后独揽大权。980年黎桓受朝臣拥护,篡位建立前黎朝(疆
  • 卡尚卡尚或柯伤 (波斯语:کاشان‎)是伊朗伊斯法罕省的一座城市。
  • 李国强李国强可以指: