作业要求 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014 | |
---|---|---|
作业所属课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12?page=11 | ---- |
作业目标 | 了解论文查重机理; Git与GitHub的链接使用;深刻体会个人开发流程 | ---- |
一、Github地址
https://github.com/3120005145aisan/aisan3120005145
二、PSP表格记录估计及实际在程序的各个模块的开发上耗费的时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 120 |
Estimate | 估计这个任务需要多少时间 | 10 | 5 |
Development | 开发 | 360 | 480 |
Analysis | 需求分析 (包括学习新技术) | 90 | 150 |
Design Spec | 生成设计文档 | 90 | 120 |
Design Review | 设计复审 | 10 | 20 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 50 |
Design | 具体设计 | 60 | 90 |
Coding | 具体编码 | 300 | 360 |
Code Review | 代码复审 | 10 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 90 |
Reporting | 报告 | 90 | 150 |
Test Report | 测试报告 | 10 | 20 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 30 |
Total | 合计 | 1160 | 1725 |
三、计算模块接口的设计与实现过程
1.工程结构
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.程序结果
*
四、计算模块接口部分的性能
性能分析
内存消耗
五、计算模块部分单元测试展示
点击查看代码
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);
}
}