旋转哈希

✍ dations ◷ 2025-11-26 05:50:48 #散列函数

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

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

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

相关

  • 肌细胞肌细胞也称为肌纤维,可以在肌肉组织中见到,这些细胞型态上属于长型且管状,肌肉细胞是从肌肉母细胞发育而来。经过肌肉生成(英语:Myogenesis)后肌细胞会特化成数种型态,包括骨骼肌、
  • 苏格兰博德斯苏格兰边区(英语:Scottish Borders;低地苏格兰语:The Mairches;苏格兰盖尔语:Chrìochan na h-Alba),又音译为博德斯行政区,英国苏格兰32个一级行政区之一。它地处苏格兰和英格兰的交
  • 陕西师范大学坐标:34°9′32.9″N 108°54′10.3″E / 34.159139°N 108.902861°E / 34.159139; 108.902861陕西师范大学(简称:陕西师大、陕师大,英语:Shaanxi Normal University,缩写:SNNU),是
  • 菲尼克斯大学凤凰城大学(University of Phoenix,缩写UPX),位于美国亚利桑那州菲尼克斯市。由约翰·斯珀林(英语:John Sperling)和他所拥有的太阳神教育集团出资建立于1976年。学校拥有34.53万学
  • 普鲁士邦联普鲁士邦联由53名贵族、教士以及19个城市为了对抗条顿骑士团,于1440年2月21日在克维曾创立。它的基础奠基于1397年创立的秘密组织“蜥蜴同盟”(Lizard Union)。1454年,邦联领导
  • .dd.dd(源自德意志民主共和国一词的德语:Deutsche Demokratische Republik中“Deutsche Demokratische”的缩写“DD”)是互联网号码分配局(IANA)计划分配给原德意志民主共和国(即东德
  • 哥本哈根标准哥本哈根标准(英语:Copenhagen criteria)是一系列用来衡量某国家是否有资格加入欧盟的标准。它是由欧洲理事会于1993年6月在丹麦首都哥本哈根制定出。政治方面,它主要要求候选国
  • 罗马之劫 (1527年) 查理五世帝国: 罗马之劫发生于1527年5月6日,是神圣罗马皇帝查理五世属下的军队哗变后,对罗马进行的军事行动。该次事件是查理五世(身兼西班牙国王,史称卡洛斯一世)与1526年-1529
  • 邢岷山邢岷山(1965年8月22日-),男,浙江杭州人,中国大陆演员。代表作《白眉大侠》、《天桥梦》、《青河绝恋》、《重案六组》等。姐姐邢金沙,是中国昆曲演员1965年出生于浙江省杭州市,12岁
  • 小行星10981小行星10981(10981 Fransaris)是一颗绕太阳运转的小行星,为主小行星带小行星。该小行星于1977年10月17日发现。小行星10981的轨道半长轴为2.7918702 UA,离心率为0.244。