个人项目

个人项目

作业所属课程 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

七、异常处理

文件输入输出异常处理

posted @ 2020-09-24 22:18  Tonispock  阅读(152)  评论(0)    收藏  举报