Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 捕获可疑相似代码的最佳字符串比较算法_String_Algorithm - Fatal编程技术网

String 捕获可疑相似代码的最佳字符串比较算法

String 捕获可疑相似代码的最佳字符串比较算法,string,algorithm,String,Algorithm,我正在尝试实现一个代码执行系统,我正在寻找一种方法来捕获来自不同用户提交的可疑相似代码。我的想法是使用骰子的系数来比较提交的字符串。在我的案例中可以使用它吗?如果不行,是否有更好的算法。字符串比较算法不是我的主要关注点。Dice、Levenshtein或q-grams应该无关紧要(尽管我不是专家) 主要的事情是将代码转换成一系列标记。将第一个未知标记标记为1,第二个标记为2。然后比较这两个标记字符串。如果一个人所做的只是更改一些变量名,那么这将为您提供一个精确匹配 更复杂的是,如果令牌与的关键字

我正在尝试实现一个代码执行系统,我正在寻找一种方法来捕获来自不同用户提交的可疑相似代码。我的想法是使用骰子的系数来比较提交的字符串。在我的案例中可以使用它吗?如果不行,是否有更好的算法。

字符串比较算法不是我的主要关注点。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的已处理令牌

是否有特定的目标语言?如果有一种特定的语言,转换成抽象语法树并比较逻辑可能会产生更好的结果不,没有目标语言有多个软件具有这种功能,为什么要重新设计轮子?你能给我一个例子吗?可能是