个人项目总结 by Bin Xia
2012-09-03 13:33
211 查看
本次的个人项目是一个统计词频最高的100词的小程序。
程序的实现并不复杂,简单做了一个设计就开始写。整体架构采取 输入处理+hashtable建立+建立和维护堆+输入4个部分。从周一布置完作业,到周三完成,一共的时间在5-6个小时,附上上交文档的结果和分析:
Compare the final result and the expectation, there do be some different as following:
1. BuildHashTable
Expectation:
Size: 200 lines
Time cost: half word day
Possible Function: CommandAnalyze, FileVist,HashTableAdd
In reality:
Size: 28 lines….
Time cost: one hour
Why: use RegEx to select words and HashTable in System.collection
2. RankSys
Expectation:
Size: 300 lines
Time cost: one day
Possible Function: CommandAnalyze, FileVist,HashTableAdd
In reality:
Size: 2 lines+85 lines
Time cost: two hours
Why: over condition
3. PrintResult
Expectation:
Size: 50 lines
Time cost: 1 hour
Possible Function: PrintResult
In reality:
Size: 11 line
Time cost: 10 minutes
Why: almost right
Overall, I used 4 hours for coding and 1hour for testing. All codes contain 178 lines. It is to my surprise. The reason that I save so much time and codes is that I use HashTable in system.collections, so that I do not need to write the hash table myself. Also I use the RegEx to help me select the “words” which save me much time and work.
It is the first time that I try to evaluate the time and lines about my coding, and seems that I was too conservative. I guess I need more practice to find out my true ability of coding!
然而周末殷老师看过我的程序之后,在第二周的周一给我提了一些建议。主要是在读入参数的格式和细节优化上。于是然后我在之后对第一个版本进行了一些修改。具体update和结果,分析如下:
8/21/2012 Update:
增加了递归寻找目录下所有子目录和文件
修改程序读入为命令行参数读入,而非ReadLine读入
重写单词匹配部分,原匹配为正则表达式匹配,效率很低,新版重写匹配方式。
之前发的为debug版,这次改为release版。
增加大小写模糊(这点值得商榷,在实际测试中,大小写敏感的程序会稍微快一点。从分析来看,模糊减小了hashtable的规模和比较时间,但是由于输入为自然语言,总的词数有限,大写也只会出现在单词的首字母这一种情况。自然语言的hashtable大小本来就有限,而大小写模糊对其减小不大,但是却要增加一倍的IO(每个字符判断大小写),所以造成二者相差不大。如果在随机数据上,模糊大小写效果可能会好很多。由于针对输入相差不过一秒,所以我选择保留大小写模糊)
(多线程优化没有加入,因为程序主要时间在IO和hashtable,多线程对物理磁盘的磁头读入没有提升,hashtable的建立和文件读入同步,也不会有大的提升,反而合并需要加大开销,所以没有加入)
经过优化,对于novel的数据analyze的结果从160s狂减到36s(8核i7 870+8g内存),效果比较令人满意
PS:我觉得数据的要求应该再强一些,从分析来看所有的时间都花在了OI读入和hashtable的部分,而重要的选择top100的过程所有的时间非常少。分析来看,因为100太小,所以在top100近乎稳定的情况下,这100个数的变化很小,所以对于maintain这个list的代价也变得很低。虽然我用了堆(o(n*log 100))实现,但是分析起来和链表往后推(o(n*100))甚至每次排序(o(n*100^2)的复杂度差别不大,因为冲突的部分太少。所以对时间的缩小全部集中在hashtable的建立和对IO的优化上了。
总结:这次的个人项目对我的锻炼意义很大。
其一、我刚刚用c#几周,这次的项目给我了一个很好的更深入了解c#的机会,也让我对c#独有的一些内部变量函数有了更深的理解。比如arraylist,以及我直接使用的hashtable,都给我在编程中带来了极大的便利
其二、从这个项目中我第一次学会了使用性能分析。正是通过性能分析,我发现了我第一个版本中最耗时间的部分—单词匹配。由于之前使用正则表达式,所以效率非常低,占用的时间超过程序整体时间的90%。于是我重写了这个部分,果然程序的时间有了立竿见影的下降。这对我之后对程序的优化和修改都有很好的帮助。
其三、在整个项目的进行过程中,我明白了沟通和交流的重要性。一定要问清楚需求,问清楚要求,再开始设计。这也是我后来改一个版本的最重要的原因。但是如果这个项目是要发布的,可能就没有那么多时间给你修改了。所以在设计的时候就一定要明确,小心。
之后的 项目又要来了,希望我能在之后的项目中得到更好的锻炼。
Bin Xia
程序的实现并不复杂,简单做了一个设计就开始写。整体架构采取 输入处理+hashtable建立+建立和维护堆+输入4个部分。从周一布置完作业,到周三完成,一共的时间在5-6个小时,附上上交文档的结果和分析:
Compare the final result and the expectation, there do be some different as following:
1. BuildHashTable
Expectation:
Size: 200 lines
Time cost: half word day
Possible Function: CommandAnalyze, FileVist,HashTableAdd
In reality:
Size: 28 lines….
Time cost: one hour
Why: use RegEx to select words and HashTable in System.collection
2. RankSys
Expectation:
Size: 300 lines
Time cost: one day
Possible Function: CommandAnalyze, FileVist,HashTableAdd
In reality:
Size: 2 lines+85 lines
Time cost: two hours
Why: over condition
3. PrintResult
Expectation:
Size: 50 lines
Time cost: 1 hour
Possible Function: PrintResult
In reality:
Size: 11 line
Time cost: 10 minutes
Why: almost right
Overall, I used 4 hours for coding and 1hour for testing. All codes contain 178 lines. It is to my surprise. The reason that I save so much time and codes is that I use HashTable in system.collections, so that I do not need to write the hash table myself. Also I use the RegEx to help me select the “words” which save me much time and work.
It is the first time that I try to evaluate the time and lines about my coding, and seems that I was too conservative. I guess I need more practice to find out my true ability of coding!
然而周末殷老师看过我的程序之后,在第二周的周一给我提了一些建议。主要是在读入参数的格式和细节优化上。于是然后我在之后对第一个版本进行了一些修改。具体update和结果,分析如下:
8/21/2012 Update:
增加了递归寻找目录下所有子目录和文件
修改程序读入为命令行参数读入,而非ReadLine读入
重写单词匹配部分,原匹配为正则表达式匹配,效率很低,新版重写匹配方式。
之前发的为debug版,这次改为release版。
增加大小写模糊(这点值得商榷,在实际测试中,大小写敏感的程序会稍微快一点。从分析来看,模糊减小了hashtable的规模和比较时间,但是由于输入为自然语言,总的词数有限,大写也只会出现在单词的首字母这一种情况。自然语言的hashtable大小本来就有限,而大小写模糊对其减小不大,但是却要增加一倍的IO(每个字符判断大小写),所以造成二者相差不大。如果在随机数据上,模糊大小写效果可能会好很多。由于针对输入相差不过一秒,所以我选择保留大小写模糊)
(多线程优化没有加入,因为程序主要时间在IO和hashtable,多线程对物理磁盘的磁头读入没有提升,hashtable的建立和文件读入同步,也不会有大的提升,反而合并需要加大开销,所以没有加入)
经过优化,对于novel的数据analyze的结果从160s狂减到36s(8核i7 870+8g内存),效果比较令人满意
PS:我觉得数据的要求应该再强一些,从分析来看所有的时间都花在了OI读入和hashtable的部分,而重要的选择top100的过程所有的时间非常少。分析来看,因为100太小,所以在top100近乎稳定的情况下,这100个数的变化很小,所以对于maintain这个list的代价也变得很低。虽然我用了堆(o(n*log 100))实现,但是分析起来和链表往后推(o(n*100))甚至每次排序(o(n*100^2)的复杂度差别不大,因为冲突的部分太少。所以对时间的缩小全部集中在hashtable的建立和对IO的优化上了。
总结:这次的个人项目对我的锻炼意义很大。
其一、我刚刚用c#几周,这次的项目给我了一个很好的更深入了解c#的机会,也让我对c#独有的一些内部变量函数有了更深的理解。比如arraylist,以及我直接使用的hashtable,都给我在编程中带来了极大的便利
其二、从这个项目中我第一次学会了使用性能分析。正是通过性能分析,我发现了我第一个版本中最耗时间的部分—单词匹配。由于之前使用正则表达式,所以效率非常低,占用的时间超过程序整体时间的90%。于是我重写了这个部分,果然程序的时间有了立竿见影的下降。这对我之后对程序的优化和修改都有很好的帮助。
其三、在整个项目的进行过程中,我明白了沟通和交流的重要性。一定要问清楚需求,问清楚要求,再开始设计。这也是我后来改一个版本的最重要的原因。但是如果这个项目是要发布的,可能就没有那么多时间给你修改了。所以在设计的时候就一定要明确,小心。
之后的 项目又要来了,希望我能在之后的项目中得到更好的锻炼。
Bin Xia
相关文章推荐
- 个人项目总结by杨希超
- ASE个人项目的总结 by Yupeng Gu
- 个人项目总结 --by Junyuan Xie
- 个人项目总结 by Zishun Liu
- 个人项目总结 by 卢祎
- ASE个人项目总结--By Hongyi Yao
- 个人项目总结 by 陆元伟
- 个人项目总结 By Xiao Li
- ASE个人项目总结 By Guiying Li
- 个人项目总结 By 钟华平
- 个人项目总结 (By Jun Guo)
- 个人项目总结 by Jian Jiang
- 个人项目总结 by 梁飞
- 个人项目总结 By 张雄
- 团队项目个人工作总结(4月19日)
- 团队项目个人每日总结(4.19)
- 概率DP总结 by kuangbin
- 北京移动动感地带收费项目个人使用总结
- 项目管理心得:一个项目经理的个人体会、经验总结
- 项目管理心得:一个项目经理的个人体会、经验总结