gpt4 book ai didi

c++ - 如何增量更新哈希值?

转载 作者:行者123 更新时间:2023-11-28 06:50:30 24 4
gpt4 key购买 nike

我正在寻找一个简单的增量哈希函数 (C++),这样它就可以使用以下方式进行更新:

               hash = hash_function(hash, update_value)

例如,update_value 可以是一位。

例如,为了计算数组的散列,我会这样做:

              hash = 0
foreach element a in array { hash = hash_function(hash, a) }

(最好是不会导致太多碰撞,但速度相对较快的东西。)

最佳答案

如果您要散列一个位数组:

你可以实现一个 Cyclic redundancy check.CRC 多项式将确定散列长度并(粗略地)控制冲突的可能性。许多示例软件 CRC 算法都经过优化,可以对比位更宽的事物进行操作,但核心的、未优化的算法一次只工作一点。算法大致是:

  1. 从累加器中的一些恒定种子值开始
  2. 将数组中的一点移到累加器中。
  3. 有条件地,对多项式执行异或运算。不同的实现要么使用您刚移出的位,要么使用您刚移入的位作为条件。
  4. 重复后续位(转到 2)。

您提出的方法会将当前累加器值作为第一个参数,并返回下一个累加器值。

多项式选择很重要。有一些多项式被认为不适合哈希。

如果数组包含更宽的内容(如整数或对象):

您可以只散列每个元素,然后将每个元素的散列与异或之类的东西组合在一起。如果单个对象的散列算法很好,那么数组的散列结果也应该相对不错。请注意,首先对单个对象进行哈希处理非常重要。

关于c++ - 如何增量更新哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047228/

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