c++论文查重

github连接

这个作业属于哪个课程 软件工程
这个作业要求在哪里 在这里
这个作业的目标 了解PSP,写一个论文查重程序,使用github管理项目

PSP表

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
Estimate 估计这个任务需要多少时间 480 1640
Development 开发 120 120
Analysis 需求分析(包括学习新技术) 120 480
Design Spec 生成设计文档 10 10
Design Review 设计复审 10 10
Coding Standard 代码规范(为目前的开发指定合适的规范) 10 10
Design 具体设计 120 120
Coding 具体编码 120 120
Code Review 代码复审 60 60
Test 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 60
Test Repor 测试报告 60 60
Size Measurement 计算工作量 30 30
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 30 30
合计 1280 1640

计算模块接口的设计与实现过程

该项目只包含一个main函数,完成输入输出与计算。
使用最长公共子序列算法来计算重复字符的数量。
记两个字符串分别为a,b; dp[i][j]为以a[i]和b[j]结尾的两个字串的最长公共子序列,
则当a[i] = b[j] 时 dp[i][j] = 1 + dp[i-1][j-1]
否则 dp[i][j] = max(dp[i-1][j], dp[i][j-1])

计算模块接口部分的性能改进

  • 假设该算法最多能够处理两个长100000的字符串,直接开一个dp数组所需要的大小为10^10。考虑到每次计算式只需要使用到dp[i]和dp[i-1]两行的数据,因此可以开一个dp[2][100000]数组,用滚动的方式计算。

  • 由VS性能探查器生成的性能分析图:

计算模块单元测试展示

  • 单元测试部分代码截图
  • 该部分代码用来测试最长公共子序列函数能够正常工作
  • 代码覆盖率如下

计算模块异常部分处理说明

  • 空文件处理,用来防止读入空文件。
  • 大文件处理,用来防止程序内存溢出
posted @ 2023-09-16 17:44  世纪末彼岸花丛的死结  阅读(41)  评论(0编辑  收藏  举报