天津科技大学数据结构与算法课程设计报告--源程序的相似性

天津科技大学数据结构与算法课程设计报告--源程序的相似性

ID:31947512

大小:219.50 KB

页数:12页

时间:2019-01-29

天津科技大学数据结构与算法课程设计报告--源程序的相似性_第1页
天津科技大学数据结构与算法课程设计报告--源程序的相似性_第2页
天津科技大学数据结构与算法课程设计报告--源程序的相似性_第3页
天津科技大学数据结构与算法课程设计报告--源程序的相似性_第4页
天津科技大学数据结构与算法课程设计报告--源程序的相似性_第5页
资源描述:

《天津科技大学数据结构与算法课程设计报告--源程序的相似性》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、可编辑版数据结构与算法课程设计报告设计题目:源程序的相似性专业计算机科学与技术学号14101103姓名傅开煤2017年1月10日Word完美格式可编辑版源程序的相似性一、问题描述对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。二、需求分析建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度,得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。例如:   关键字    Void Int For Char if else w

2、hile do break class程序1关键字频度  4  3   0  4  3  0  7  0  0   2程序2关键字频度  4  2   0  5  4  0  5  2  0   1  X1=[4,3,0,4,3,0,7,0,0,2]X2=[4,2,0,5,4,0,5,2,0,1]设s是向量X1和X2的相对距离,s=sqrt(∑(x1[i]-x2[i])2),当X1=X2时,s=0,反映出可能是同一个程序;s值越大,则两个程序的差别可能也越大。三、概要设计为了实现上述功能,可以用结构体表示哈希表,因此需要哈希表的抽象数据类型。哈希表抽象数据

3、类型的定义:ADThashtable{数据对象:D={ai

4、ai∈ElemType,且各不相同,i=1,2...,n,n≥0}数据关系:R=φ基本操作:Hashfunc(charstr[]);Hashfind(char*words);creathash(void);resethash(intn);isletter(charch);readc(char*filename);getkey(char*str,intlen);copycount(intx[],intn);check(int*x1,int*x2);}endADTWord完美格式可编辑版本程序实现模块

5、主程序模块哈希表程序模块:实现哈希表的抽象数据类型调用关系图如下:主程序模块哈希表程序模块计算相似度和向量的几何距离的模块三、详细设计1、各个子函数的设计(1)创建哈希表函数函数原型:voidcreathash(void);输入:读取存储了32个关键字的文件keyword.txt思路:通过对keyword.txt文件逐行赋值给创建的str字符数组,并将该数组调入Hashfunc函数。(2)将关键字根据哈希函数放入哈希表中的指定位置的函数函数原型:voidHashfunc(charstr[]);思路:对调进来的str数组通过调用getkey函数得到该关键词的

6、key值后放入哈希表中的特定位置,并用线性探索来解决冲突。(3)在哈希表中找是否该words为关键字,并统计频度的函数函数原型:intHashfind(char*words);思路:将调进来的word字符数组先调用getkey函数获取key值,然后在哈希表里查找是否存在该字符串,如果存在则该关键字对应的频度加1。(4)重置哈希表函数函数原型:voidresethash(intn);功能:当n为0时,将指向哈希表中关键字的指针置成Null,同时将频度全部置为0.而当n为1时,仅仅将频度置为0。(5)获取单词key的函数函数原型:intgetkey(char*

7、str,intlen);思路:用key1存储关键字的首字母,key2存储关键字的末字母,然后通过哈希函数得到key的值并返回。(6)判断是否为字母的函数函数原型:intisletter(charch);Word完美格式可编辑版思路:如果调进来的ch字符的ASCII值在a~z或A~Z范围内的话则返回1,否则返回0。(7)读取源程序文件中的单词的函数函数原型:intreadc(char*filename);思路:为了读取源程序文件中的单词,所以一个字符一个字符的,如果读的超过最大关键字长度将会跳过当前识别区域,读取下一个单词,将得到的该单词调入Hashfind

8、函数,来判断是否为关键字,并统计频度。(8)将频度拷贝到数组里的函数函数原型:voidcopycount(intx[],intn);功能:将哈希表中关键字的频度复制到x数组中,以便进行后面相似度等的计算。(9)检查两个源程序是否相似的函数函数原型:voidcheck(int*x1,int*x2);思路:对调进来的x1和x2数组进行相似度计算,若相似度大于设定好的阈值,则再进行几何距离计算,最后给出两个文件是否相似的判断。(10)取模函数函数原型:floatMol(int*x);思路:通过求向量模值的数学知识求x数组的模。(11)点积函数函数原型:intDo

9、t(int*x1,int*x2)思路:通过点积的数学知识对两个向量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。