个人项目
个人项目
| 作业所属课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
| 这个作业的目标 | 学习计算文本相似度的算法、性能分析、掌握PSP表格的使用、熟悉个人项目开发流程 |
一、github仓库
版本更替情况:

二、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 50 |
| · Estimate | · 估计这个任务需要多少时间 | 30 | 10 |
| Development | 开发 | 300 | 300 |
| · Analysis | · 需求分析 (包括学习新技术) | 240 | 360 |
| · Design Spec | · 生成设计文档 | 30 | 15 |
| · Design Review | · 设计复审 | 20 | 10 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
| · Design | · 具体设计 | 30 | 40 |
| · Coding | · 具体编码 | 240 | 300 |
| · Code Review | · 代码复审 | 30 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 30 |
| Reporting | 报告 | 40 | 60 |
| · Test Repor | · 测试报告 | 40 | 40 |
| · Size Measurement | · 计算工作量 | 30 | 25 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 20 |
| · 合计 | 1210 | 1240 |
三、算法设计
根据知网论文查重原理,抄袭定义为:当该句有超过15个字相同的子序列时,即认为该句抄袭。

最长公共子序列(longest-common-subsequence, LCS)
(1)子序列:一个序列X = x1x2...xn,中任意删除若干项,剩余的序列叫做A的一个子序列。也可以认为是从序列A按原顺序保留任意若干项得到的序列。
例如:对序列 1,3,5,4,2,6,8,7来说,序列3,4,8,7 是它的一个子序列。对于一个长度为n的序列,它一共有2^n 个子序列,有(2^n – 1)个非空子序列。在这里需要提醒大家,子序列不是子集,它和原始序列的元素顺序是相关的。
(2)公共子序列:如果序列Z既是序列X的子序列,同时也是序列Y的子序列,则称它为序列X和序列Y的公共子序列。空序列是任何两个序列的公共子序列。
(3)最长公共子序列:X和Y的公共子序列中长度最长的(包含元素最多的)叫做X和Y的最长公共子序列。
这个问题如果用穷举法时间,最终求出最长公共子序列时,时间复杂度是Ο(2mn),是指数级别的复杂度,对于长序列是不适用的。因此我们使用动态规划法来求解。
LCS算法实现过程略
四、函数接口设计
1、lcs函数

2、记录重复内容的函数(因为不需要已经注释掉了)

3、获取原文章函数

4、获取疑似抄袭文章函数

五、性能分析
使用的时间

内存的使用

cpu使用情况

内存分配

六、单元测试
测试origin_0.8_add.txt

测试origin_0.8_del.txt

测试origin_0.8_dis_1.txt

测试origin_0.8_dis_10.txt

测试origin_0.8_dis_15.txt

七、异常处理
文件输入输出异常处理


浙公网安备 33010602011771号