标签:blog http io os 使用 ar for 文件 2014
1)
经过一天的思考,写下了这篇设计报告。
在开始写项目之前,我进行了大量的查阅与测试,主要是与C++语言有关的用法,虽然之前学过,但是没有上机的经验,所以用起来会生疏。
其次就是算法的设计,统计单词频度不难,用map就可以,但是要统计词组就麻烦了,虽然可以套用统计词频的方法,但是占用的存储空间和时间代价将会非常巨大,因为只要求统计出现最频繁的前十个词组。所以,需要进行一些优化,我的优化方法就是提前淘汰一些词组。具体的就是建立一个按出现次数降序的有序集合,每次添加一个新的词组时,先把检查该词组中的2(或3)个单词词频的最小值minFreq与集合中排在第10的词组的出现次数tenthFreq作比较,如果minFreq<tenthFreq那么说明新找到的词组(该词组出现次数targetFreq<minFreq)一定不是最频繁出现的10个词组。
该项目分为以下子过程,括号中的时间是假设在熟练掌握了C/C++的基础上需要的时间。
1.遍历给定目录,返回符合要求的文本文件的绝对路径的string数组(10m)18
_findFirst
_findNext
2.获取单词,建立词频统计map(20m)17
ifstream+getline顺序读取每个文本文件中的每一行
map统计词频,vector<pair>实现按词频排序
3.获取词组,建立词组对应出现次数的有序集合(60m)120
pair+list
4.main函数(30m)
各子过程组装成完整的程序
5.测试与调试(120m)
构造10个测试用例
6.performance analysis (60m)
2)
各个功能模块实际用时
1.遍历目录:18m
2.获取单词,建立词频统计map:17m
3.获取词组,建立词组对应出现次数的有序集合120m(未实现)
各子过程组装成完整的程序60m
由于统计词组的设计不当,浪费了大量时间,最后还是用了与统计单词相同的方式
测试与调试:1天
在测试的时候又不断调整算法,并且C++的某些类使用有误,所以用了很长的时间
构造10个测试用例
performance analysis (2小时)
3)
直接上图,统计VS11安装目录下的Microsoft Visual Studio 11.0\Common7的情况
第一版分析结果见下图,简直是弱爆了
如果没有性能分析的功能,我完全不知道瓶颈竟然是在正则表达式上,看图
于是我自己写了一个读取单词的类,结果快了不止一个数量级
瓶颈被我搞定了
但是add还可以再优化一下,但是我用的是C++中的map,map采用红黑树的结构,而不是更快速的哈希,所以没有什么提高的空间了。
4)
时间紧,我用了别人所有的测试用例。
以后再补充啦
5)
收获很大
一是得到了用C++语言写项目的练习,虽然学了一学期的C++,但是都没有怎么编程,很多理论的东西全忘了,学一门语言最好的方式就是动手自己写。
二是对VS的使用更加熟练了,我从大一上就一直使用VS,但直到现在才知道性能分析怎么用,相信还有很多强大的功能等待着我去发掘。
标签:blog http io os 使用 ar for 文件 2014
原文地址:http://www.cnblogs.com/yxr1993/p/3993443.html