Individual Project - Word frequency program——12061154Joy
http://www.cnblogs.com/jiel/p/3978727.html
项目时间估计
理解项目要求: 1h
构建项目逻辑: 1h
查阅相关资料: 1h
编写&调试程序: 6h
样例测试&功能完善: 2h
项目效率分析: 1h
项目优化: 2h
总结&提交: 2h
项目实际完成时间
实际完成时间三天,真是佩服自己的效率,题目意思不难理解,实现也起来也不难,各个部分的算法想好应该怎么实现,但是对于完全陌生的C#只能写一写就去Google一下相关的写法,查找资料用了相当长的时间。写完代码以后Debug没有用多长时间,有一个小错误很快就发现了。但是后来题目关于排序的意思理解有点问题,又重新查资料修改。然后再测试样例上的时间比较多,测试数据按照我对题目的理解应该是能输出正确结果的。
开发过程
开发过程其实不能算充满艰辛,因为以前面向对象课的时候写过类似的统计词频的题,知道大概的算法实现,但因为对C#语言的不了解,查相关函数及其用法时用了相当长的时间,不过对于正在拼命学英语的我来说多读读英文文档还是比较有好处的。
关于算法实现,我是用一个dictionary来存储单词,Dictionary<string,<int,string>>(StringComparer.OrdinalIgnoreCase),第一个string是用于判断符合条件的word是否已经出现过,第二个string是用来存放出现过的单词的最小ASCII码的单词。
整个过程就是在指定目录中寻找后缀满足条件(.txt,.cpp,.h,.cs)的文件,读取内容,将内容按规则分割成字符串数组parts,遍历parts,若满足<word>条件(简单模式)、<word word>(-e2模式)或<word word word>(-e3模式)就按规则存入字典dictionary中。全部读取完后,按照模式方式输出在当前exe所在目录下的12061154Joy.txt中。
性能分析
跑了Visual Studio2012 的安装包,大概5.7G,不过只有5858个样本还跑了90+s,真是慢的可以;不过后来跑就只有30+s了,我也不知道是怎么回事。
由图可以看出,独占样本较多的函数主要是Match和Split函数,因为程序运行过程中不断的在分割文件内容和匹配word。
函数非独占样本比例和独占样本比例:
函数使用率细节:
测试样例
1,"123file file123 file File FiLe"
这个“123file”并不符合<word>的要求,但是刚开始我的正则表达式竟然匹配成功了。因为表达式里没有指出三个字母是在word开头,所以出现了错误。
这里的“file”单词单个输出应该是“FiLe”,因为它的ASCII码最小。
期望&输出结果:
2,“In your pattern you group elements with round brackets”
检测“-e2”模式下两个word组合在一起
期望&输出结果:
3,“In your-=pattern you@ ^&group eleme$nts with round brackets”
两或三个word匹配时的限制条件:只能有一个空格符
期望&输出结果:
4,“
txt file
tXt File
tXT file
TxT fiLe
How Are You?
how old are you
hOw oLd aRe yOu
HoW arE YOu?
”
除大小写外相同的单词之间的匹配和排序问题,所有排序都是按照ASCII码顺序排列
期望&输出结果:
5,测试空目录
输出空白txt
期望&输出结果:
6,测试不存在的目录
控制台输出“Directory is not exsiting!!”
7,测试错误模式指令
控制台输出“Command is wrong!!Please check again!”
8,测试.txt & .cpp & .h & .cs 文件中夹杂了其他类型的文件
只输出了这四种文件里面的内容
9,“
E:\Let's study!\创意论文\2013
E:\Let's study!\计算机操作\网页制作
E:\Let's study!\编译原理\编译PPT
E:\Let's study!\计算机操作\网页制作\网页\Templates
E:\Let's study!\编译原理
E:\Let's study!\计算机操作\ppt\PPT音影素材
”
对非字母数字的符号及中文的检测
期望&输出结果:
9,“
how are you
how Are you
fine thank you and YOU
fine Thank you And you
fine thank YOU and
”
小伙伴的测试样例,还好是对的
期望&输出结果:
10,“
between a letter followed bya point comma.
Still it should be included in the result.
”
期望&输出结果:
我学到的
这次的作业又让我被学会了一门语言——C#,和学习面向对象课的时候一样,也是被学会了Java。这次还好有的选择,对于指针的恐惧让我选择了和Java相似的C#,还好语言之间有非常多的相似性,但是一些函数的用法比如Dictionary,list.Sort实在是不甚熟悉,只有每碰到一个问题时就Google一下,也让我在读文档的过程中学到了不少的东西。
结果固然重要,但是学习的过程更重要,在学习函数用法时了解了许多,读下来那么多词的英文文档我都佩服死自己了;熬夜码代码却乐在其中,有些东西不只因为是任务才努力去完成,主要是希望能够收获一些,让自己前进一些。What I have learnt in the process is much greater than just getting the result.