第一次个人编程作业
| 作业所属课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
|这个作业的目标| 学会使用PSP表格 学会用Github来管理源代码和测试用例 学会使用论文查重性能分析工具改进性能|
一、Github地址:https://github.com/catwithcute/catwithcute
二、PSP表格记录估计及实际在程序的各个模块的开发上耗费的时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 80 |
Estimate | 估计这个任务需要多少时间 | 10 | 5 |
Development | 开发 | 300 | 360 |
Analysis | 需求分析 (包括学习新技术) | 60 | 90 |
Design Spec | 生成设计文档 | 60 | 90 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 300 | 360 |
Code Review | 代码复审 | 10 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 90 | 120 |
Test Report | 测试报告 | 15 | 10 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 30 |
Total | 合计 | 1035 | 1335 |
三、计算模块接口的设计与实现过程
1.工程结构
说明:一共有两个类,算法的核心主要在SimHash类中
2.算法原理
·首先基于传统的IR方法,将文章转换为一组加权的特征值构成的向量。
·初始化一个f维的向量V,其中每一个元素初始值为0。
·对于文章的特征向量集中的每一个特征,做如下计算:
利用传统的hash算法映射到一个f-bit的签名。对于这个f- bit的签名,如果签名的第i位上为1,则对向量V中第i维加上这个特征的权值,否则对向量的第i维减去该特征的权值。
·对整个特征向量集合迭代上述运算后,根据V中每一维向量的符号来确定生成的f-bit指纹的值,如果V的第i维为正数,则生成f-bit指纹的第i维为1,否则为0。
原理图:
3.程序流程图
4.程序结果
四、计算模块接口部分的性能
性能分析:
内存消耗:
五、计算模块部分单元测试展示
1.测试代码
public class FileToStringTest {
@Test
public void toStringTest(){
FileToString fileToString = new FileToString();
fileToString.toString("");
}
}
import org.junit.Test;
public class SimHashTest {
SimHash simHash;
@Test
public void simHashTest(){
SimHash simHash = new SimHash("123");
simHash.simHash();
}
@Test
public void hashTest(){
SimHash simHash = new SimHash("123");
simHash.hash("123");
}
@Test
public void subByDistanceTest(){
SimHash simHash=new SimHash("123");
simHash.subByDistance(simHash,3);
}
@Test
public void getDistanceTest(){
SimHash simHash=new SimHash("123");
simHash.getDistance("123","234");
}
@Test
public void hammingDistanceTest(){
SimHash simHash=new SimHash("123");
simHash.hammingDistance(simHash);
}
}
2.单元测试截图: