String 捕获可疑相似代码的最佳字符串比较算法
我正在尝试实现一个代码执行系统,我正在寻找一种方法来捕获来自不同用户提交的可疑相似代码。我的想法是使用骰子的系数来比较提交的字符串。在我的案例中可以使用它吗?如果不行,是否有更好的算法。字符串比较算法不是我的主要关注点。Dice、Levenshtein或q-grams应该无关紧要(尽管我不是专家) 主要的事情是将代码转换成一系列标记。将第一个未知标记标记为1,第二个标记为2。然后比较这两个标记字符串。如果一个人所做的只是更改一些变量名,那么这将为您提供一个精确匹配 更复杂的是,如果令牌与String 捕获可疑相似代码的最佳字符串比较算法,string,algorithm,String,Algorithm,我正在尝试实现一个代码执行系统,我正在寻找一种方法来捕获来自不同用户提交的可疑相似代码。我的想法是使用骰子的系数来比较提交的字符串。在我的案例中可以使用它吗?如果不行,是否有更好的算法。字符串比较算法不是我的主要关注点。Dice、Levenshtein或q-grams应该无关紧要(尽管我不是专家) 主要的事情是将代码转换成一系列标记。将第一个未知标记标记为1,第二个标记为2。然后比较这两个标记字符串。如果一个人所做的只是更改一些变量名,那么这将为您提供一个精确匹配 更复杂的是,如果令牌与的关键字
的
关键字匹配,您可以为
标记唯一的标签。。。(大多数语言都有类似的关键字)。这可以避免误报
例如:
样本1:
name='fred'
印刷品(名称)
样本2:
my_name='harry'
打印(我的名字)
样本1标记:name,=,',fred',print,(,name,)
样本1处理过的代币:1,2,3,4,3,5,6,1,6
样本2标记:my_name,=,',harry',print,(,my_name,)
样本2处理过的代币:1,2,3,4,3,5,6,1,6
现在您匹配来自sample1和sample2的已处理令牌是否有特定的目标语言?如果有一种特定的语言,转换成抽象语法树并比较逻辑可能会产生更好的结果不,没有目标语言有多个软件具有这种功能,为什么要重新设计轮子?你能给我一个例子吗?可能是