gpt4 book ai didi

c++ - 高效的 'rolling/moving hash' 计算(如移动平均线)

转载 作者:行者123 更新时间:2023-11-30 02:57:44 28 4
gpt4 key购买 nike

我正在尝试优化一个程序,该程序需要在流的每个位置(字节)计算数据流中恒定大小窗口的散列。在比可用 RAM 大得多的磁盘文件中查找重复项需要它。目前我为每个窗口计算单独的 md5 哈希,但是它花费很多时间(窗口大小是几千字节,所以每个字节的数据被处理几千次)。我想知道是否存在一种方法可以在恒定(与窗口大小无关)的时间内计算每个后续散列(例如在移动平均数中加减 1 个元素)?散列函数可以是任何东西,只要它给出的散列不是很长(50-100 位就可以)并且它的计算速度相当快。它还必须在多达数万亿个不那么随机的窗口(TB 数据)上几乎没有冲突 - 在我的情况下,每次冲突都意味着磁盘访问(crc32 太弱了,md5 在这方面还可以)。

如果你指出 linux 上可用的现有库函数,我将不胜感激。

这是我的第一个问题,如果我做错了,请多多包涵。

问候,巴尔托斯

最佳答案

关于 rolling hashes 的维基百科文章有一个链接到 ngramhashing它在 C++ 中实现了一些不同的技术,包括:

  • 随机 Karp-Rabin(有时称为 Rabin-Karp)
  • 循环多项式散列法(也称为 Buzhash)
  • 不可约多项式散列

(也可在 GitHub 上获得)

关于c++ - 高效的 'rolling/moving hash' 计算(如移动平均线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280134/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com