旋转哈希

✍ dations ◷ 2025-04-26 12:39:40 #散列函数

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

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

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

相关

  • 角苔门角藓门(学名:Anthocerotophyta),是构成苔藓植物的一个门的一组非维管植物。俗名“角藓”是指细长的角状结构,即角状的孢子体。如在苔藓植物门和地钱门中,角藓的扁平的绿色植物体是
  • 那加兰那加兰邦(印地语:नागालैण्ड,拉丁字母转写:Nāgāland)是印度的一个邦,位于印度东北部的喜马拉亚山脉,西连阿萨姆邦,南接曼尼普尔邦。该邦名称“那加兰”字面意为“那加人(居
  • 吉里贾·普拉萨德·柯伊拉腊吉里贾·普拉萨德·柯伊拉腊(尼泊尔语:गिरिजा प्रसाद कोइराला,IAST:Girija Prasad Koirala  听发音 帮助·信息;1925年2月20日-2010年3月20日),尼泊尔政治家,曾
  • 蜜罐 (计算机科学)蜜罐(英语:honeypot)是一个电脑术语,专指用来侦测或抵御未经授权操作或者是黑客攻击的陷阱,因原理类似诱捕昆虫的蜜罐因而得名。蜜罐通常伪装成看似有利用价值的网络、数据、电脑
  • 妮裳马戏团 (歌曲)妮裳马戏团是布兰妮第六张专辑中妮裳马戏团的单曲。该单曲于2008年12月由Jive唱片公司发行,是该张专辑中的第二支单曲。
  • 地名信息系统地理名称信息系统(英语:Geographic Names Information System,缩写:GNIS),是一个美国地理名称信息数据库,包含美国全境以及其领地内的地理实体及文化标志信息的名称与方位信息。GNI
  • NicalisNicalis是坐落于美国加利福尼亚圣安娜的电子游戏开发、发行商。公司主要开发独立游戏,同时也开发发行原创与移植游戏。公司由泰隆·罗德里格斯(原IGN编辑、GolinHarris/任天堂
  • 花亭湖花亭湖即花凉亭水库,位于中国安徽省安庆市太湖县,是以防洪、灌溉为主,结合发电、供水、养殖、航运、旅游等功能的大(一)型水库。花亭湖是国家重点风景名胜区、国家4A级旅游景区、
  • 扎西顿珠扎西顿珠(藏语:.mw-parser-output .uchen{font-family:"Qomolangma-Dunhuang","Qomolangma-Uchen Sarchen","Qomolangma-Uchen Sarchung","Qomolangma-Uchen Suring","Qomolan
  • 万爱花万爱花(1929年2月-2013年9月4日),本名刘春莲,原籍内蒙古和林格尔县韭菜沟村,现居山西省太原市。她是少数愿意公开承认在抗日战争时曾被日军性侵犯,也是第一个指证日军性暴力罪行,并