| 工程概论 | 计算21级 |
|---|---|
| 作业要求 | 个人项目 |
| 作业目标 | 实现论文查重并测试性能 |
计算模块接口的设计与实现过程
CosineSimilarity类
| 函数 | 功能 |
|---|---|
| float getSimilarity(int[] number1,int[] number2) | 计算两个向量的余弦定理值并返回 |
在函数内部,声明了三个变量square1、square2和product,它们分别用于存储两个向量的平方和和它们的点乘结果。
使用一个循环遍历两个向量的所有维度,计算它们的点乘结果并累加到product中。
在循环中,还计算了两个向量的平方和,分别累加到square1和square2中。
最后,根据余弦相似度的公式,将点乘结果除以两个向量的模长之积,得到它们的余弦值,并将其作为函数的返回值。
计算模块接口部分的性能改进
并行化:输入数组的长度很大,用并行流或者线程来改进性能。在Java 8及以上版本中,使用parallel()方法来实现。
预分配内存:对于square1和square2,在循环之前预先计算他们的大小,然后一次性分配足够的内存,而不是在每次循环时都重新分配内存。这可以通过使用float[]数组来实现。
计算模块部分单元测试展示

计算模块部分异常处理说明
点击查看代码
try {
//打开path路径的文件
File read = new File(path);
InputStreamReader reader = new InputStreamReader(new FileInputStream(read));
BufferedReader r = new BufferedReader(reader);
String line = r.readLine();
//循环读取每一行的文字并加入到表中
while (line != null) {
article.add(line);
line = r.readLine();
}
} catch (IOException e) {
System.out.println("文件打开失败,请检查文件路径是否正确");
}
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 10 |
| · Estimate | · 估计这个任务需要多少时间 | 540 | 835 |
| Development | 开发 | 240 | 300 |
| · Analysis | · 需求分析 (包括学习新技术) | 15 | 10 |
| · Design Spec | · 生成设计文档 | 20 | 40 |
| · Design Review | · 设计复审 | 10 | 10 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 5 |
| · Design | · 具体设计 | 100 | 100 |
| · Coding | · 具体编码 | 140 | 200 |
| · Code Review | · 代码复审 | 10 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | 20 |
| Reporting | 报告 | 30 | 30 |
| · Test Repor | · 测试报告 | 20 | 20 |
| · Size Measurement | · 计算工作量 | 50 | 40 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 30 |
| · 合计 | 540 | 835 |