第一次个人编程作业
一,代码链接
二,整体流程

三,核心算法
- 基于动态规划的最长公共子串LCS
LCS的基本实现思想是,取两个字符串的字符一一比对,若两者相同则令S [i] [j] = S [i] [j] + 1,否则S [i] [j] = max(S [i-1] [j] , S [i] [j-1]),这也是符合LCS的推导公式的。而得到最长相同子串的方法是通过数据结构的栈实现的,因为一般的实现会记录字符的方向,而输出字符串是要从S矩阵的右下角逆序输出,因此很契合栈的结构,其规则是:若S1[i] = S2[j],将字符入栈,否则对比S [i] [j-1]和S [i-1] [j]的大小,若前者不大于后者则遍历后者。 - 分词操作Tokenizer
属于核心处理前的预处理,分词,就是基于字符串匹配、理解、统计、规则一系列的方式切好。 - 计算文本相似度的算法Jaro-Whinkle距离
四,性能分析
类的内存消耗

CPU运行时间

堆内存情况

五,PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 40 |
| Estimate | 估计这个任务需要多少时间 | 20 | 25 |
| Development | 开发 | 500 | 300 |
| Analysis | 需求分析 (包括学习新技术) | 300 | 180 |
| Design Spec | 生成设计文档 | 60 | 20 |
| Design Review | 设计复审 | 30 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
| Design | 具体设计 | 60 | 60 |
| Coding | 具体编码 | 300 | 210 |
| Code Review | 代码复审 | 30 | 30 |
| Test | 测试(自我测试,修改代码,提交修改) | 180 | 120 |
| Reporting | 报告 | 90 | 120 |
| Test Report | 测试报告 | 60 | 100 |
| Size Measurement | 计算工作量 | 30 | 10 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 1750 | 1245 |
六,总结
- 怎么说呢,我是完全不会,还好宿舍里全是大佬,在大佬们的帮助下我总算是完成了。
- 收获挺大,最重要的是我不会的开口问大佬很快都能解决,大大提高了学习效率。
- 我存在的问题还是很大,说实话我还没有系统的学完过任何一门语言,所以动手都几乎不会动。接下来的时间我会先认真学完java,然后再把这次题目做一遍,争取真的自己完全掌握。
浙公网安备 33010602011771号