单词统计
任务要求 : 实现一个程序太控制的,输出指定文件夹中*.cs , *.txt . *.cpp , *.h 中单词的统计
1、项目预计时间
因为这是我的第一个有些用处的C++程序,所以要多分配一些时间给准备
构思:构思没给多少时间,大体分了一下模块,1小时
查资料:分完模块发现好多想用的都不知道有没有这样的函数或者类,于是决定3小时查资料
第一次代码:先想用最简单的方法去做这个程序,先写出一个再说(其实是怕难得做不出来……) 预计4小时
第二次代码:对代码进行改进,改一改数据结构和一些算法,预计5小时
总共13小时
2、实际上……
构思基本没多少时间,忽略就好了……
查资料:什么乱八七糟的啊啊啊啊啊啊啊啊啊啊啊啊啊,查得心里都烦了。不过时间还好,总共前前后后加起来4小时左右
第一次代码:好久不写代码,果然很不行。。。。。。第一次用最简单的程序,什么优化都没有,硬生生用了我一下午加一晚上,大约6个小时吧
第二次代码:第一次运行速度实在是太!慢!了!不忍直视!!!于是写了第二个代码(后面会讲怎么改的),时间变快了好多有木有!!!花了好长时间有木有!!!其实也就8个小时左右吧
第三次代码:小伙伴们都太强大了,速度都太快,让我不忍直视,于是在其进行了改进,花了大约3小时改完的
于是总共就变成了21小时,快一天了……
3、代码质量分析
没有问题,真的好开心(之前被虐的好惨)
4、性能分析
这里以扫描D:\VS2012\Common7 为例(1.05G)
第一次代码:好慢好慢好慢好慢好慢好慢
根本扫不出来,扫了10分钟还是没有出来,不过小的测试点都是对的
第二次代码:
这次优化是优化了查找的数据结构和一些算法的调整。其实算法方面从时间复杂度来考虑没有改进很多,是把原本混合在一起的步骤(分词+插入)分成了两部分,分开进行,不过快了不少。数据结构方面,将原来线性查找改为了实用二叉树查找,时间复杂度降了将近1维,所以在气氛多种就跑了出来。
第三次代码:
在第一次优化之后,我的每次查找插入单词的时候都是用一个函数来比较大小,其中有两次强制转换。由于比较次数实在是多,占用了大量的时间,所以在树的每个结点的结构中加入了一个字符串,记录了每个单词转成小写之后的样子,方便比较。结果程序就变成了一分多钟。
5、测试用例
(1)最简单的测试
一个文档
The Kite Runner
Maybe life is a process of running
结果正确
(2)同样是上个分档, mode2
(3)额,还是上个,mode3
(4)测试一下数量
一个文件
cat cat caT dog Dog dOg
(5)测试一下多个文件
在文件夹中,一个和上个测试同样的文件,和一个文件夹a,
文件夹a有这个测试文件和文件夹b
文件夹b有有两个这个测试文件
(6)输入格式不对
控制台输出的(截屏好不容易弄到个清晰地……)
(7)非空格分隔
一个文件
jghbh8li[ykukvjh'bkuyjygb'
(8)强一点的,D:\VS2012\Common7
(9)单个大文件,mode1
The Kite Runner这本书
(10)还是上个文件,mode3
6、个人总结
很久没有去写程序了,手有些生,编码的速度明显不如从前。而且C++还是一门基本没有摸过的语言,感觉编写十分的生硬。要多加练习。
查资料的能力也需要加强。首先,在这次作业中,有的小伙伴使用了C++自带的哈希表的类,速度非常的快。这是我在编程之前根本就没有去想的一点。虽然听说编码相对复杂,但是速度快的惊人。应该在编程前查资料的时候更加全面的寻找解决办法。其次,在我查找资料到后来使用的的时候才发现,自己找到的资料有些没用,有些还不够,这点需要提高。
还有在程序运行速度上也需要提高。