【问题标题】:How to improve accuracy of Rabin Fingerprint如何提高拉宾指纹的准确性
【发布时间】:2014-01-15 22:02:15
【问题描述】:

以下包含一个非常快速和优雅的 Rabin 指纹的 Java 实现 https://github.com/themadcreator/rabinfingerprint

但是,优化实现中可能使用的最大多项式是 54 位。

我想减少出错的概率。

Rabin [1] 提出了两种降低错误概率的方法: • 增加k 的值会降低错误输出的概率。这 将需要更大的字长。 • 概率也可以通过使用两个不同的不可约多项式来降低 P1(t) 和 P2(t) 的度数 k 相同。然后算法通过交错运行两次 步骤,一次使用 P1(t),另一次使用 P2(t)。由于错误概率 是独立的...... (来自 CMPUT690 学期项目)

如果我运行该算法两次,如何在不破坏目标的情况下合并 2 个指纹以降低出错概率?

  • 只需添加或复制 2 个指纹?
  • 使用第一次运行的输出作为第二次运行的基础指纹?

我不清楚什么是“交错步骤”。我需要将指纹保存为 64 位长的数字。

谢谢。

【问题讨论】:

    标签: algorithm fingerprint rabin


    【解决方案1】:

    你不能。 Rabin 建议使用不同的不可约多项式有效地运行该算法两次,然后将输出连接起来,在您的情况下这将为您提供 108 位。问题是,没有办法将它压缩到 64 位而不丢掉大部分的错误减少:根据鸽巢原理,您希望使用 any 算法的绝对最低错误概率是

    • 使用 56 位指纹时约为 1/2^56
    • 使用 64 位指纹时约为 1/2^64
    • 使用 128 位指纹时约为 1/2^128

    并且由于 Rabin 的算法接近这些界限,从 54 位指纹到 64 位指纹最多将给出 ~2^10 = 误差减少约 1,000 倍。

    如果这种改进值得您花时间,您最好的选择是计算两个 54 位指纹,丢弃每个最高位的 20 位(以获得两个 32 位指纹),然后将它们连接到获取 64 位指纹。

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 2020-12-08
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      相关资源
      最近更新 更多