个人项目github地址:xingzhijie123/202121331099 (github.com)
这个作业属于哪个课程 | 计算21级 |
---|---|
这个作业要求在哪里 | 个人项目 |
这个作业的目标 | 实现论文查重算法,学会使用PSP表格,单元测试,掌握代码质量检测工具和性能分析工具 |
题目要求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
- 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
- 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
- 从命令行参数给出:论文原文的文件的绝对路径。
- 从命令行参数给出:抄袭版论文的文件的绝对路径。
- 从命令行参数给出:输出的答案文件的绝对路径。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
开发环境
操作系统: Windows 11 X86_64
使用语言及版本: java 18.0.2
IDE: IntelliJ IDEA 2021.3.3
实现设计
1.算法原理
最长公共子序列。最长公共子序列是一种常见的字符串匹配问题的算法,它用于寻找两个字符串中的最长共同子序列(不要求连续)。最长公共子序列算法的目标是找到这两个字符串中共同的、非连续的字符序列,这个序列在两个输入字符串中以相同的顺序出现,但不一定相邻。
类:compare
程序通过调用 repeat.check
方法来比较两个文本文件的相似性
类:repeat
通过计算最小公共子序列的长度来确定两个文本文件的相似性
-
minpubilqueue
:这个方法计算两个输入字符串str1
和str2
之间的最小公共子序列的长度,类似于最长公共子序列算法,只不过在初始化时多添加了一个字符。 -
check
该方法用于计算两个文本文件之间的查重率。它在内部调用了
minpubilqueue
该方法用来计算文本的最小公共子序列的长度,然后使用以下步骤计算查重率:
- 读取文本文件的内容,并将其存储在字符串变量
text1
和text2
中。 - 调用
minpubilqueue
方法来计算text1
和text2
之间的最小公共子序列的长度。 - 获取
text1
和text2
的总长度。 - 根据最小公共子序列的长度和文本的总长度计算查重率。
- 最后,将查重率四舍五入到小数点后两位,并以浮点数的形式返回。
- 读取文本文件的内容,并将其存储在字符串变量
2.程序流程图:
接口部分的性能改进
测试结果
异常处理
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟 ) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 40 |
Development | 开发 | 250 | 300 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 25 |
· Design Spec | · 生成设计文档 | 0 | 0 |
· Design Review | · 设计复审 | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 0 | 0 |
· Design | · 具体设计 | 100 | 120 |
· Coding | · 具体编码 | 100 | 140 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 15 |
Reporting | 报告 | 90 | 80 |
· Test Repor | · 测试报告 | 65 | 70 |
· Size Measurement | · 计算工作量 | 10 | 3 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 15 | 7 |
· 合计 | 360 | 420 |