我正在尝试进行algorithm窃的算法比较。我发现有很多TEXT比较抄袭。
但是在算法上却大不相同。假设某些算法使用了大量的变量,函数和用户定义的结构。如果有人从某人那里复制源代码,他至少会更改变量和函数名称。使用简单的文本比较算法,函数和变量字母的这种差异将被视为“差异”,从而使算法为gives窃提供了“假”。
我想做的是“泛化”(我不知道这是否是对的词)C++源代码中的所有变量,函数和用户定义的结构名称。因此,变量将被命名为“a”,“b”,与函数“... fa(...)”,“... fb(...)”相同。
我在PHP中的字符串变量中使用了c++源算法进行比较。
我知道应该分析许多其他内容以进行准确的源代码比较,但这对我来说已经足够。
最佳答案
这是一个有趣的问题。但是,取决于算法的复杂程度,可能是变量名才是the窃的根源。例如,您实际上可以使用几种方法来编码树遍历?
我认为几年前有一篇论文通过样式识别编码器-研究所有小东西,例如空格,{}
的放置位置等。谁知道,也许那是走的路,寻找否定的匹配项与学生以前的风格保持一致,而不是与已知信息来源进行正面匹配。这样说来,学生在学习的早期就不太可能发展出非常个人化的编码风格。
一个想法-示例用什么语言写?可以编译吗?如果编译C,然后对可执行文件进行二进制比较,那么具有不同局部变量名称的相同程序是否将具有完全相同的二进制文件? (不过,全局var和函数不会)。
关于comparison - 如何混淆C++变量和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226372/