如何提高Rabin指纹的准确性

时间:2013-12-28 14:07:18

标签: algorithm fingerprint rabin

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

然而,可以在优化实现中使用的最大多项式是54位。

我想减少错误的可能性。

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

如果我运行算法两次,如何在不破坏我的目标的情况下组合2个指纹以减少错误概率?

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

你做不到。 Rabin建议使用不同的不可简化多项式有效地运行算法两次,然后连接输出,这样就可以得到108位。事实是,没有办法将其压缩到64位而不会丢失大部分的错误减少:通过文件原理,你希望用任何算法的绝对最低错误概率是

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

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

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