上传者: gwlbjfu
|
上传时间: 2021-12-06 23:44:41
|
文件大小: 19KB
|
文件类型: -
本人的数据结构实习作业“基于Hash表的代码相似度度量”,代码简洁明了,可读性强,并附带较多的注释,方便他人查看。一般通过查看注释便能了解程序的结构与功能,方便进行修改。以下是实习作业的具体要求:
对于两个C++程序,设计并实现两种不同的基于Hash表的检测算法(开地址法和链地址法),计算两个程序的相似度,并分析比较两种算法的效率。
分别读取两个C++程序文件(p1.cpp, p2.cpp),自行设计哈希函数,分别利用开放地址法和链地址法的冲突解决方案,构建C++语言关键字的Hash表。在扫描源程序的过程中,每遇到关键字就查找相应Hash表,并累加相应关键字出现的频度。
根据统计的两个程序中关键字不同频度,可以得到两个向量X1,X2。通过计算向量X1和X2的相对距离来判断两个源程序的相似性,相对距离s的计算方法是( T表示向量的转置)
|X1—X2| ((X1—X2)(X1—X2)T)1/2
s= ———————— = ———————————————
|X1|1/2•|X2|1/2 (X1•X1T)1/2(X2•X2T)1/2
利用开放地址法和链地址法两种不同的冲突解决方案构建,分别输出s和两种方法计算s所用的时间。
读取C++程序时,过滤注释,不考虑注释中的内容。(两种注释//和/*…*/)
采用二叉排序树来统计其中的关键字及其频度,按照上述公式计算s,同时给出计算s所用的时间。