Project: Individual Project - Word frequency program----11061192zmx
Description & Requirements
http://www.cnblogs.com/jiel/p/3311400.html
项目时间估计
理解项目要求: 1小时
构建项目逻辑: 1小时
查阅相关资料: 1小时
编写&调试程序: 2小时
样例测试&功能完善: 1小时
项目效率分析: 1小时
项目优化: 2小时
总结&提交: 1小时
项目实际完成时间
实际完成时间很是蛋疼,题目意思不难理解,实现起来也不难,本着先实现功能不考虑时间的原则写了用c++里的map实现了一下,但发现debug模式下那个速度简直不能看,但这时已经离截止日期很近了,又有些错误,这两天花在改代码测数据上的时间很多。。。主要是数据如果不大没有代表性,如果大了的话又不好调试,很是蛋疼。。。
写代码:n小时
调试: n小时
测试数据按照我对题目的理解应该是能输出正确结果的,在release模式下100+M的小说大约用了30s左右,相对于薛大神的12s还是8s简直就是奇慢无比,详细的性能分析写在后面。
开发过程
开发过程其实不能算充满艰辛,但做无用功的时间太多了。一开始先花了好多时间翻了翻C++Primer看了看容器什么,然后没看清楚题意没有递归遍历文件,最后功能实现后再把递归遍历部分加进去导致代码很乱,接着就是一些不知道从哪里冒出来的问题(运行时间过慢等,估计是我不小心点到了debug模式然后没有发现),因为这已经花了很多时间了,实在是不耐烦了,就直接重写了一遍代码,算是一个阶段完成了。但后来和小伙伴们对数据的时候竟然发现对题意理解错了,最后改了一下觉得应该没问题了。。。总之整个过程充满了艰辛,实在是无力了。。
关于算法实现,我是用一个word_list来存储单词,用word_com来存储单词统一的形式(如file和File我在word_com里都存成FILE)。最后根据word_com里的频率将word_list里的单词排个序,将每个单词的最小字典序的形式提出来,这时单词的顺序不是按照题目要求的字典序的,而是按照真正字典里的顺序,这里再对其进行一次字典序的排序,输出结果。
性能分析
由于是直接用map做的,觉得map的insert操作应该比下标创建要快一点,于是在加单词的时候还加了hash。。其实应该是没什么区别的(只是优化了复杂度的常数,最后性能分析结果也显示没优化多少。。。)
可以看到,100+M的数据跑了30s,而且中间cpu使用率的曲线也很诡异。。

占有样本数比较多的函数是pass,这是用来遍历文件夹的,里面调用了addword是向map里面加单词记录频率的。


总结
真的是学到了很多,主要是调试方面提高了许多心理承受能力。
由于看了几遍c++primer里容器的介绍,对c++里各种容器也算有了个详细的了解,方便以后使用。
学会了如何遍历文件夹,以及对一些函数的运行速度有了更深的了解。
总的来说是一次很不错的实践。完
Project: Individual Project - Word frequency program----11061192zmx的更多相关文章
- SoftwareEngineering Individual Project - Word frequency program
说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...
- Individual Project - Word frequency program by HJB
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...
- Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering
11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...
- Individual Project - Word frequency program - Multi Thread And Optimization
作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...
- Individual Project - Word frequency program——12061154Joy
Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...
- Individual Project - Word frequency program
1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...
- Record for Individual Project ( Word frequency program )
1. 预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2. 实际用时 ● 对 ...
- THE First Individual Project - Word frequency program
第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...
- Project: Individual Project - Word frequency program-11061160顾泽鹏
一.预计用时: (1)明确要求:15min: (2)文件的遍历:1h: (3)Simple mode 词频统计:0.5h: (4)extend mode 词频统计:1h: (5)对单词词频排序输出:0 ...
随机推荐
- Android GridView、ListView、ScrollView上下拉刷新
实现方法是将显示的内容最外层的ViewGroup做成一个LinearLayout,并扩展它,使其可以上下拖动. 重点是实现View的onTouch方法. 下载:http://files.cnblogs ...
- linux bash_profile和.bashrc区别
经常在一些技术类的文章中提到修改bash_profile和.bashrc这两个文件,也算是使用频率比较高的两个文件吧,但实现同样一个功能,有的教程里说修改bash_profile这个文件,有的教程里却 ...
- C#一个简单下载程序实例(可用于更新)
运行时的界面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat ...
- cocos2d-x 多分辨率适配详解(转载),以前北京团队设计的游戏,也是用这套方案
http://blog.csdn.net/kyo7552/article/details/17163487 多种分辨率的适配一直都是一个蛋疼的问题,各家公司可能都有自己的一套方案.今天我为大家介绍的是 ...
- Django用户认证系统(一)User对象
User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类,例如超级用户('superuser ...
- python函数--传参
一.位置参数 二.关键字参数 三.默认参数 四.任意数量的位置参数: 1. *x 2. 传入的多个参数,最终合并成一个元组 3. 之后的参数必须用关键字参数 五.任意数量的关键字参数 1. **x 2 ...
- Git教程(9)集中式工作方式常用的设计分支的方案
Git是一个复杂的版本管理系统,管理代码有很多工作方式,如集中式,管理者式,司令/副官式 本文是假设选用集中式工作方式时,设计分支的方案. 中小型项目: 维护两个长期分支,分别是master 和 de ...
- linux切换用户
当前使用root账户 [root@localhost chucklu]# cd[root@localhost ~]# pwd/root 切换到普通账户 [root@localhost ~]# su c ...
- notepad++ 编辑器链接地址可点击
很久没用notepad++编辑器,最近因为 sublime 的编码问题,因此用了下 notepad++ .结果发现里面的链接都可以点击,一点都不要编辑,如下图: 那如何把这个功能去掉呢? 我们选择 菜 ...
- bzoj1934 bzoj2768
最小割的经典模型,体现出最小割的基本定义,把两个集合划分的最小代价 把一开始同意的人连源点,不同意的连汇点,有关系的人之间连边,流量都为1 不难发现,割两点(人)间的边就相当于朋友之间发生冲突 割到连 ...