admin 管理员组

文章数量: 1087139


2024年4月14日发(作者:目前bootstrap使用最为广泛的版本?)

代码查重方法

一、 代码查重方法

代码查重,其实就是对源代码进行两两比对,发现重复率到了一

定的阈值以上,就可以认定为抄袭。目前代码查重可以应用到学术作

品(论文,计算机程序等),代码复现验证,成绩评估等。

代码查重有多种方式,如常见的 hash 值法,编辑距离法,结构

化程序分析法,规则匹配法,文法分析法,特征向量法等。

1. Hash 值法

把每一段代码都算出一个 hash 值(比如 MD5, SHA-1 等),然

后将代码两两比较,比较 hash 值的差异。如果 hash 值相同,那么

这两段代码很可能是一样的;如果 hash 值不同,则说明代码不一样。

这种方法比较快,但是很容易出现误判,因为 hash 值有可能即

使代码不一样,也会有相同的 hash 值,导致误判为相同代码;另外

hash 值有可能会因为改动一些没有影响代码实际功能的东西(比如

空格之类的)而发生变化,也可能导致误判。

2. 编辑距离法

编辑距离法是在字符串比较中应用的经典算法,其原理是把一个

字符串转换成另一个字符串所需要的最少操作次数。可以将代码拆分

成一个个字符,然后按照编辑距离算法进行比较,计算出相似度最大

的以作为抄袭的比较结果。

3. 结构化程序分析法

结构化程序分析法指的是将代码的结构作为分析的依据,而不是

- 1 -

简单的比较字符串,去寻找代码间的相似度。根据代码的语言特征来

把原始代码转换成抽象语法树,然后比较两棵抽象语法树,计算其相

似度,来判断是否有抄袭现象。

4. 规则匹配法

规则匹配法指的是把代码映射成一项“规则”,然后根据规则与

其它程序进行比较,判断是否相同。

5. 文法分析法

文法分析法是指将代码解析成文法组成单元,再去比较文法组成

单元之间的相似度,从而判断源代码之间是否存在重复。

6. 特征向量法

特征向量法是把代码映射成一个特征向量,然后计算两个特征向

量之间的距离,比较其大小,来判断彼此之间是否存在重复现象。

- 2 -


本文标签: 代码 判断 分析法 编辑 是否