欢迎来到知嘟嘟! 联系电话:13095918853 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13095918853
知嘟嘟经纪人
收藏
专利号: 2018100845881
申请人: 华侨大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2024-01-05
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种基于树和序列相似度的编程语言代码查重方法,其特征在于,包括:步骤1,去除代码中干扰相似度准确性的信息,将原程序中的代码转换成变量序列;

步骤2,按照程序结构,构建程序结构树,建立结构树的叶节点;

步骤3,建立叶节点中变量的绝对位置序列集合;

步骤4,比较叶节点,获得两叶节点间的相似度;

步骤5,比较两份程序代码所有的叶节点,获得两程序代码间的相似度。

2.根据权利要求1所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述步骤1,包括:去除程序代码注释;

去除程序代码中输出语句中的字符串;

去除程序代码中控制台输入输出函数名和运算符号。

3.根据权利要求1所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述步骤3,包括:统计叶节点内不同变量出现的个数;

根据每个变量出现的位置创建位置序列,获得变量位置序列集合;对叶节点中的变量做比较时,只比较变量的位置关系,不比较变量名称,对变量的位置序列进行序列分析,按照变量出现的顺序,获取变量的绝对位置序列。

4.根据权利要求1所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述步骤4,包括:步骤4.1,获得变量的相对位置序列;

步骤4.2,基于Levenshtein距离,计算出不同序列间的相似度,求得相似度矩阵;

步骤4.3,依据变量间的相似度矩阵,求出叶节点的相似度。

5.根据权利要求4所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,不同序列间的相似度计算方法如下公式(1):Sim(L1,L2)=1-Leve(L1,L2)/max(|L1|,|L2|)  (1)其中,(L1,L2)表示两变量相对位置序列,Leve(L1,L2)表示两序列的Levenshtein距离,max(|L1|,|L2|)表示两序列间的最大长度;

求得n*m相似度矩阵,其中n和m分别为两个叶节点变量的个数,矩阵元素记录了一组匹配对象和匹配对象之间的相似度。

6.根据权利要求5所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述依据变量间的相似度矩阵,求出叶节点的相似度,包括:将矩阵中的元素按照相似度由大到小排序,多次有序的取其中的一个元素e,记录其匹配对象x、y和相似度s,遍历其他元素并记录各个元素的匹配对象x’、y’和s’;若元素中的x’或y’已经记录,那么跳过该元素,否则s与s’求和赋值于s,并记录x’和y’,计算出最大的s值smax即为所求最大的相似度之和;并根据公式(2)计算出叶节点之间的相似度,如下:S=smax/max(m,n)  (2)

其中,max(m,n)表示m和n最大的一个。

7.根据权利要求2所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述控制台输入输出函数名,包括:printf、scanf、cin和cout。

8.根据权利要求2所述的基于树和序列相似度的编程语言代码查重方法,其特征在于,所述运算符号包括算术运算符、关系运算符和逻辑运算符。