以下包含了Rabin指纹的非常快速和优雅的Java实现 https://github.com/themadcreator/rabinfingerprint
然而,可以在优化实现中使用的最大多项式是54位。
我想减少错误的可能性。
Rabin [1]提出了两种降低错误概率的方法: •通过增加k的值,可以降低输出错误的概率。这个 将需要更大的字长。 •通过使用两个不同的不可约多项式也可以降低概率 相同度数k的P1(t)和P2(t)。然后通过交错运行算法两次 步骤,P1(t)一次,P2(t)另一次。由于错误概率 是独立的.... (来自CMPUT690学期项目)
如果我运行算法两次,如何在不破坏我的目标的情况下组合2个指纹以减少错误概率?
我不清楚“交错步骤是什么”。我需要将指纹保存为64位长的数字。
感谢。
答案 0 :(得分:1)
你做不到。 Rabin建议使用不同的不可简化多项式有效地运行算法两次,然后连接输出,这样就可以得到108位。事实是,没有办法将其压缩到64位而不会丢失大部分的错误减少:通过文件原理,你希望用任何算法的绝对最低错误概率是
并且由于Rabin的算法接近那些边界,从54到64位指纹将最多给出~2 ^ 10 = 误差减少约1,000倍。
如果这种改进值得您花费时间,那么您最好的选择是计算两个54位指纹,从每个指纹中丢弃最高位的20位(以获得两个32位指纹),然后将它们连接到获得64位指纹。