Rabin Karp Rolling Hash生成的哈希没有反映在文本上

时间:2012-01-15 07:09:22

标签: ruby algorithm plagiarism-detection rabin-karp

注意:很多可能的重复,但似乎没有解决我的问题。

我正在根据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

这是我正在处理的碰撞问题吗?有关如何解决问题的任何指示?

1 个答案:

答案 0 :(得分:2)

我注意到q = 101时,只有101个可能的哈希值 - 0,1,2 ... 100。你试过增加q吗?另一种方法是查看并查看哈希值是否在0,1..q-1的可能值内随机选择的值。

当然,您也应该在有重复字符串要查找的情况下测试您的程序 - 失败可能会导致任何问题的另一个症状也会导致冲突,并且查找和调试会更容易。< / p>