作业二
| 这个作业属于哪个课程 | 软件工程2024(广东工业大学) |
|---|---|
| 这个作业要求在哪里 | 个人项目 |
| 这个作业的目标 |
GitHub
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 10 |
| ·Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
| Development | 开发 | 220 | 150 |
| ·Analysis | · 需求分析 (包括学习新技术) | 20 | 60 |
| ·Design Spec | · 生成设计文档 | 60 | 40 |
| ·Design Review | · 设计复审 | 20 | 5 |
| ·Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
| ·Design | · 具体设计 | 30 | 10 |
| ·Coding | · 具体编码 | 60 | 20 |
| ·Code Review | · 代码复审 | 10 | 5 |
| ·Test | · 测试(自我测试,修改代码,提交修改) | 10 | 5 |
| Reporting | 报告 | 80 | 70 |
| ·Test Repor | · 测试报告 | 40 | 30 |
| ·Size Measurement | · 计算工作量 | 20 | 25 |
| ·Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 15 |
| 合计 | 310 | 230 |
模块设计
预处理
用fgetc()读取txt文件中的每一位字符,并且区分是英文字符还是中文字符。如果是英文字符,就将这一位字符以字符串的形式存储到map中,并记录其出现的次数;如果是中文字符,因为一个中文字符需要占两位字符,所以将这一位字符以及下一位字符一起以字符串的形式存储到map中,并记录其出现的次数。由此可以将文本映射为一个n维的向量
计算重复率
利用余弦相似度算法,求得两个文本映射得到的向量间夹角的余弦值,并以此来表示两个文本的重复率。
性能改进
性能分析图

显然,消耗最大的函数是将文本映射为向量的函数,其中主要都消耗在调用map的过程中,暂时不知道优化方法
附:开销最大的函数
异常处理
命令行参数有误
if (argc != 4) puts("Error");
通过这一行代码来判断输入的命令行参数的个数是否符合要求,若是不符合要求则输出Error
目标路径不存在
if (f1 == NULL) puts("Error");
通过这一行代码来判断目标文件是否存在,若是不存在则输出Error
文本长度为0
求余弦相似度时,余弦值由两个向量的数量积除以两个向量的模长获得,当向量模长为0是,会出现分母为0的情况
if (!v1 || !v2) puts("Error");
通过这一行代码来判断文本长度是否为0,其中v1和v2分别表示两个文本映射得到的向量的模长,当出现向量模长为0的情况时输出Error

浙公网安备 33010602011771号