3

我正在尝试对抄袭进行一些算法比较。我发现了很多抄袭的文本比较。

但是在算法中它是非常不同的。假设某个算法使用了大量的变量、函数和用户定义的结构。如果有人从某人那里复制源代码,他至少会更改变量和函数名称。使用简单的文本比较算法,函数和变量字母的这种差异将被视为“差异”,从而使算法给出剽窃的“错误”。

我想要做的是“概括”(我不知道这是否正确)C++ 源代码中的所有变量、函数和用户定义的结构名称。所以变量将被命名为“a”、“b”,对于函数“... fa(...)”、“... fb(...)”也是如此。我在 PHP 中的字符串变量中有 c++ 源算法进行比较。

我知道应该分析许多其他事情以进行准确的源代码比较,但这对我来说已经足够了。

4

2 回答 2

1

这是一个有趣的问题。然而,根据算法的复杂程度,变量名可能是让剽窃消失的原因。例如,有多少种方法可以真正编写树遍历?

我认为几年前有一篇关于通过他们的风格识别编码器的论文——查看所有的小东西,比如空格、{}s 的位置等等。谁知道,但也许这就是要走的路,寻找一个否定匹配学生以前的风格而不是与已知来源的积极匹配。话虽如此,学生不太可能在学习的早期阶段就形成了一种非常个人化的编码风格。

一个想法 - 示例是用什么语言编写的?可以编译吗?如果您编译 C 然后对可执行文件进行二进制比较,那么具有不同局部变量名称的相同程序是否具有完全相同的二进制文件?(不过,全局变量和函数不会)。

于 2012-02-10T10:48:17.807 回答
0

我过去使用过 MOSS:http: //theory.stanford.edu/~aiken/moss/来检测抄袭代码。由于它在语义级别上工作,因此它将检测您上面介绍的情况。该工具是语言感知的,因此在分析中不考虑注释,并且它在检测通过简单搜索和替换变量和/或函数名称而修改的代码方面有很长的路要走。

注意:几年前,我在研究生院教授计算机科学时使用了该工具,它在检测从互联网上下载的代码方面表现出色。这是类似应用程序的详细记录:http: //fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

如果你谷歌“测量软件相似性”,你应该会发现一些更有用的点击: http: //www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

于 2012-06-06T19:00:03.410 回答