旋转哈希

✍ dations ◷ 2025-11-29 05:40:01 #散列函数

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

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

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

相关

  • 官方文字官方文字是宪法或其他适用的法律所指定的法定文字。类似官方语言,但官方文字较为罕见,主要是当官方语言有多过一套文字时,才需要官方文字。由于对这些语言来说,人们使用那一套文
  • 胆固醇过高高胆固醇血症(Hypercholesterolemia)是指血液中的胆固醇偏高的情形。高胆固醇血症属于高脂血症及高脂蛋白血症(hyperlipoproteinemia,血液中脂蛋白过高的病症)。血液中非高密度脂
  • 长角亚目长角亚目(学名:Nematocera)是双翅目的一个亚目,身体具有薄的,分段触角,幼虫主要是水生动物,包括蚊、大蚊、蚋和蠓科。长角亚目特征通常是丝状,多节段触角。
  • 底片格式底片格式(英语:Film format)指的是人们定义的,用于摄影或电影的胶片或者感光板的尺寸规格。一种底片格式的最主要特征就是其本身的尺寸与形状。而在用于电影的胶片中,胶片可能同
  • 岸上腔吻鳕岸上腔吻鳕(学名:),又称岸上氏须鳕、胸斑腔吻鳕,为长尾鳕科腔吻鳕属的鱼类。分布于日本南部三崎、骏河湾、高知等外海以及台湾东港西南海域和东中国海琉球海沟北部等,属于西北太平
  • 卵形色雷西蛤卵形色雷西蛤(学名:),是笋螂目色雷西蛤科的一种。主要分布于中国大陆,常栖息在水深46米细砂底。
  • 王隽英王隽英(1908年-1960年12月2日),别号崆峒筱侠,山东海阳人。她是著名物理学家、诺贝尔物理学奖得主丁肇中的母亲。王隽英的名字源于其父王以成所作《箴女诗》中“隽笔绘宏图,英才步
  • 实龙岗北地铁站实龙岗北地铁站(英语:Serangoon North MRT Station,代号CR9)是新加坡地铁跨岛线的一个车站,位于新加坡本岛实龙岗规划区与后港规划区交界处。2019年1月25日,陆交局宣布跨岛线第一
  • 羰基钋羰基钋是一种无机化合物,化学式COPo。有强放射性。羰基钋可由一氧化碳和金属钋直接反应得到。
  • 钱德昌钱德昌,直隶乐亭县人,清朝政治人物、进士出身。咸丰九年(1859年)己未科进士。后河南唐县知县,加运同衔,候补直隶州,赏戴花翎,同治甲子科同考官。