注意:很多可能的重复项,但似乎没有解决我的问题。
我正在研究基于MOSS的抄袭检测。
在成功实现一个过滤器去除所有必要的细节(评论、标点符号等)后,我使用滚动哈希实现(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(prime) 设为 101
这是我正在处理的碰撞问题吗?关于如何解决问题的任何指示?