博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单词频度统计
阅读量:5933 次
发布时间:2019-06-19

本文共 1551 字,大约阅读时间需要 5 分钟。

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安装目录下的Common7的情况

第一版分析结果见下图,简直是弱爆了

如果没有性能分析的功能,我完全不知道瓶颈竟然是在正则表达式上,看图

于是我自己写了一个读取单词的类,结果快了不止一个数量级,第二版分析如下

瓶颈被我搞定了

但是add还可以再优化一下,我用的是C++中的map,map采用红黑树的结构,而不是更快速的哈希,所以没有什么提高的空间了。

4)

时间紧,我用了别人所有的测试用例。

以后再补充啦

5)

收获很大

一是得到了用C++语言写项目的练习,虽然学了一学期的C++,但是都没有怎么编程,很多理论的东西全忘了,学一门语言最好的方式就是动手自己写。

二是对VS的使用更加熟练了,我从大一上就一直使用VS,但直到现在才知道性能分析怎么用,相信还有很多强大的功能等待着我去发掘。

 

当然我在这次项目也记录了遇到的诸多问题。

问题1

类型A包含一个regex成员r,如何在构造函数中根据传入的string参数s构造一个r
目前的做法是赋值:
regex temp(s);
r=temp;
问题2
A类的对象需要调用B类的某个方法
目前的做法是赋值:将B类对象的引用作为A类的成员,并在调用A类的构造函数时传递一个B类对象进来
问题3
头文件中不可以定义函数?出现重定义的错误
问题4
调试时输出一些提示信息,调试后批量注释这些输出语句,有没有什么宏可以实现这样的功能

转载于:https://www.cnblogs.com/yxr1993/p/3993443.html

你可能感兴趣的文章
js/jquery/插件表单验证
查看>>
Bandwidth内存带宽測试工具
查看>>
为Node.js编写组件的几种方式
查看>>
(轉貼) Anders Hejlsberg談C#、Java和C++中的泛型 (.NET) (C#)
查看>>
30天敏捷结果(24):恢复你的精力
查看>>
JNI——访问数组
查看>>
Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题
查看>>
全面理解Git
查看>>
JS敏感信息泄露:不容忽视的WEB漏洞
查看>>
让我们荡起双桨,Android 小船波浪动画
查看>>
ApacheCN 翻译活动进度公告 2019.2.18
查看>>
分布式memcached服务器代理magent安装配置(CentOS6.6)
查看>>
Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)
查看>>
Polar码引发舆论狂欢 5G标准远未定局
查看>>
KSImageNamed-Xcode-master
查看>>
Struts2参数知识点
查看>>
tomcat 8.0虚拟机配置文档
查看>>
轻松实现基于Heartbeat的高可用web服务集群
查看>>
pxc群集搭建
查看>>
JS中加载cssText延时
查看>>