【发布时间】:2012-01-15 07:09:22
【问题描述】:
注意:很多可能的重复,但似乎没有解决我的问题。
我正在基于MOSS 进行抄袭检测。
在成功实现过滤器去除所有必要的细节(cmets、标点符号等)后,我使用滚动哈希实现(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
这是我正在处理的碰撞问题吗?关于如何解决问题的任何指示?
【问题讨论】:
标签: ruby algorithm plagiarism-detection rabin-karp