第一次编程作业
| 这个作业属于那个课程 | 班级链接 |
|---|---|
| 这个作业的要求在哪里 | 作业链接 |
| 这个作业的目标 | 论文查重算法设计+学习PSP表格+单元测试+JProfiler性能分析+Git管理 |
一、GitHub
二、原理介绍
SimHash
SimHash本身属于一种局部敏感hash,其主要思想是降维,将高维的特征向量转化成一个f位的指纹(fingerprint),通过算出两个指纹的海明距离(hamming distince)来确定两篇文章的相似度,海明距离越小,相似度越低(根据 Detecting Near-Duplicates for Web Crawling 论文中所说),一般海明距离为3就代表两篇文章相同。
SimHash算法分为5个步骤:1.分词,2.hash,3.加权,4.合并,5.降维
- 分词:本次所使用的分词器是IKAnalysis,需要安装 IKAnalyzer2012_u6.jar包
- hash:通过hash算法把每个词变成hash值
- 加权:通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串
- 合并:把上面各个单词算出来的序列值累加,变成只有一个序列串
- 降维:将第四步计算出来的序列串变为01串,形成我们最终的simhash签名。 如果每一位大于0记为1,小于0记为0。

三、算法实现
工程结构

关键代码

运行结果

四、模块接口的性能展示
-
内存消耗
![]()
-
CPU负载
![]()
-
堆内存消耗情况
![]()
五、计算模块部分单元测试显示
单元测试代码


测试结果

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




浙公网安备 33010602011771号