注意:很多可能的重复,但似乎没有解决我的问题。
我正在根据MOSS进行抄袭检测。
成功实现过滤器,删除所有必要的细节(注释,标点符号等)后,我使用Rolling Hash Implementation(Rabin Karp)散列内容
然而,在源代码的两个文本文件中匹配的哈希,具有非常不同的基础文本(没有抄袭和相同的哈希)
我实现的算法(Ruby) - > (部分代码段)
#Preprocessing from RobinKarp Algorithm
for c in 0...k do
text_hash=(radix*text_hash+text_to_process[c].ord)%q
end
#Main loop
for c in 0...loop do
text_hash=((radix*text_hash-(text_to_process[c].ord)*highorder)+(text_hash[c+k].ord))%q
我的实施有问题吗?或者我指定的参数可能有问题?
我接受radix = 34 (我不确定它是否是正确的值,我假设剥离的文本只包含字母+一些特殊的字符,如'+',' - ','*','/'所以粗略估计总数为34字符)
我服用q(素数)为101
这是我正在处理的碰撞问题吗?有关如何解决问题的任何指示?
答案 0 :(得分:2)
我注意到q = 101时,只有101个可能的哈希值 - 0,1,2 ... 100。你试过增加q吗?另一种方法是查看并查看哈希值是否在0,1..q-1的可能值内随机选择的值。
当然,您也应该在有重复字符串要查找的情况下测试您的程序 - 失败可能会导致任何问题的另一个症状也会导致冲突,并且查找和调试会更容易。< / p>