一、预计用时:

(1)明确要求:15min;

(2)文件的遍历:1h;

(3)Simple mode 词频统计:0.5h;

(4)extend mode 词频统计:1h;

(5)对单词词频排序输出:0.5h;

(6)测试与调试:2h;

(7)程序优化:2h;

二、实际用时:

(1)遍历文件夹:本来以为这部分不会很难,结果自己动手的时候才发现对于递归遍历子目录一筹莫展,最终还是参考的网上的数据,用时比较久,4h

(2)Simple词频统计:在这部分中,首先将合法的单词提取了出来,花了1.5h,然后进行统计,花费了0.5h

(3)Extend词频统计:统计部分,比较难的是提取单词,提取出来以后,统计变得非常容易,只不过是增加了扩展模式对于是否是同一个单词的判断,花费了1h

(4)排序与输出:花费了40分钟

(5)测试与调试:3h;

在调试阶段,才发现一开始自己的想法中有许多不成熟的地方,比如说没有考虑到文件读取到末尾时,对于文件到了末尾没有采取判断措施,从而在词频统计时出了错,经过单步调试才发现了错误;其中也有花括号太多(眼花缭乱)配对错误导致bug百出等等;

在这部分花了比较久的时间,但是经过自己的调试,发现了自己先前许多不成熟的想法,我会从中吸取经验教训,这对于今后的编程有很大的警示作用。

经过自己的调试将错误一个一个的找出并最终成功运行,带来了非常大的成就感。

(6)程序优化:3h;

三、程序优化

因为第一次接触VS以及程序优化,所以走了很多弯路;

一开始,我拿简单的测试用例来进行程序分析,发现总是显示采集不到数据,在向别人讨教后,我改用网上下载的英文小说,扩充了样本量,这才开始了我的代码优化之旅~

性能分析如下:

 
 

 

词频统计花费的代价最大;
 
为了优化性能,一开始我想到了改变排序算法;但是测试下来后发现效果不大(如图)

后来,在浏览了其他同学的博客后,我学会了使用map进行词频统计,援引同学博客:“C++里面你可以是用一个东西叫做map(在map头文件中)。用map可以实现一个“数组” arr,这个数组的下表就是单词,保存的内容就是单词出现的次数。比如有一个单词叫buaa,那么通过map定义的“数组”,你可以实现arr["buaa"]++;这个操作。这个“数组”叫做map容器,可以当数组一样使用。定义一个map容器很简单:map的用法建议参考C++ primer。

map<string,int> wordMap;

  还有一个问题是怎么样保存应该输出哪个单词,在这里我是用了另一个map<string, string>保存的。就是所有的单词全换成小写,作为下标。对于某个单词输出的时候,输出的值是该单词在第二个map对应的单词,以及第一个map里对应的次数。”

地址:http://www.cnblogs.com/Z-XML/p/3329234.html

我一开始是开数组实现的,现在使用了map后,经过测试,运行效率提高了不少(较之刚才),但不知道有没有更好地方法,希望作业提交上去之后,会有大神提出指导意见帮助我进一步改进代码。

四、测试用例

 
 1、空文本

 

 
运行结果如下:

2、多种后缀格式

 

运行结果
测试用例:

运行结果:

 

其他类似,不再赘述浪费空间;
3、简单模式大小写测试(含排序)
用例:
 

结果:

4、扩展模式下的大小写测试;
测试用例:

结果:
 

5、字典序测试
用例:
 

结果:

 
6、单词格式测试:
用例:

结果:

7、多个子目录下有文件

结果:

8、扩展模式下多个子目录下有文件
同上(不再赘述);
 
 
9、测试结尾空格以及回车对程序运行的影响:

结果:

 
10、压力测试

运行结果:

五、收获

   从这一次的软件工程作业中,我学到了很多。
   首先就是做一项工作,预期的时间跟实际完成的时间相比有很大差距,有时候,我们在动手前,往往将事物美好化了,觉得一切都很轻易就可以完成,然而当自己亲手去完成,去实践时,才发现处处有问题。所以说,在今后的学习生活中,要多动手,多实践,才能发现更多的不足,不断进步。
   其次,在这次的作业中,我懂得了向别人学习的重要性。在这一次的作业中,需要进行优化,我之前没有接触过优化,所以思维比较狭隘,没有分散思考。一开始,我想可能需要改进的是排序算法,但是我发现改进了算法以后几乎没有提高多少。我很苦恼,不知道该从什么地方下手。向同学请教后,才明白C++还有诸如map容器之类的,用起来比开数组方便多了。相信伴随着今后的课程,我能够在动手实践中学到更多的东西。我觉得结果固然重要,在过程中学习到的知识、拓宽的视野同样让我受益颇丰!
    当然,我知道自己还有很多不足的地方,我会在今后的课程中能够向老师、助教和同学不断学习,不断进步!

Project: Individual Project - Word frequency program-11061160顾泽鹏的更多相关文章

  1. 11061160顾泽鹏homework-01

    我的Github地址是buaa11061160 教材:中文版 代码大全 (第二版) 斯蒂夫·迈克康奈尔 设计思路: 输入了一串数组a[0].a[1]..... 从a[0]开始向后扫,在以数字a[i]结 ...

  2. SoftwareEngineering Individual Project - Word frequency program

    说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...

  3. Individual Project - Word frequency program by HJB

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...

  4. 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 ...

  5. Individual Project - Word frequency program - Multi Thread And Optimization

    作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...

  6. Individual Project - Word frequency program——12061154Joy

    Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...

  7. Individual Project - Word frequency program

    1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...

  8. Record for Individual Project ( Word frequency program )

    1.  预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2.  实际用时 ● 对 ...

  9. THE First Individual Project - Word frequency program

    第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...

随机推荐

  1. List的数据结构

    从这张图片说起:TreeList的实现结构: 首先是构建函数 TreeList(Collection coll),调用增加函数: public void add(int index, Object o ...

  2. 高性能web系统的架构和系统优化

    07年毕业一直都在软件公司,14年来到一个互联网公司,给我的感受,区别主要在于: 软件公司需求相对稳定,能够按照计划按部就班的去实施,互联网公司需求相对来说不稳定,上线比较着急,大部分都是小迭代更新, ...

  3. [Design Pattern] Command Pattern 简单案例

    Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order ...

  4. git init

    git clone git@code.easyunion.net:516059158/cloud-basic-knowledge.git添加codes;git add .;git commit -m ...

  5. Assertions

    JUnit提供了许多重载的断言方法,这些方法均可以通过"import static org.junit.Assert.*"导入.方法的参数顺序一般都是([失败时打印的字符串消息], ...

  6. K - Transformation-hdu 4578(多操作混合区间更新)线段树

    题意:有四种操作 1,  区间 [l, r] 的值都加上 C 2,  区间 [l, r] 的值都乘上 C 3,  区间 [l, r] 的值都变为C 4,  求区间 [l, r]所有数的p次方的和 分析 ...

  7. jquery 定时器

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  8. IOS实现小型计算器

    作为一名初学者,编辑一款能够在IOS操作系统上运行的计算器是一件很值得自豪的事情,网络上虽然后很多相关的文章和代码,功能也很强大但是我感觉相关的计算器比加复杂,晦涩难懂,所以我想通过这个小小的计算器, ...

  9. iOS 跑马灯 之 TXScrollLabelView

    前言 前段时间在开发一个广播的功能,网上也自己找了一些库,没有发现非常好用的,于是自己抽时间写了一个,在 Github 上发布一天收获六十多个 star,这里首先感谢大家在微博上的转发,使得 TXSc ...

  10. Android四大组件——Service

    Service相关链接 Service初涉 Service进阶 Service精通 Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行, ...