0x00 预先准备和时间规划

  1.因为要用到visual studio 2013,准备学习C#,预计一天时间能基本使用。

  3.了解需求并设计基本数据结构与大致流程  20min

  2.根据提议实现simple mode  30min

  3.扩展simple mode的功能完成extend mode  1h

0x01 实际用时和实现过程

  1.关于C#的学习,看了一下基本模式和C++、Java差不多,而且在写代码的过程中能更快地熟悉语言,实际只准备了20分钟就提刀上阵了。

  2.了解需求并了解需求并设计基本数据结构与大致流程。

      1) 需求分析很快,核心功能是字符串的处理,词频统计,其中需要注意的是大小写的处理、排序、单词长度和单词的模式("^[a-zA-z][0-9]*");

      2)最开始面临的问题是文件的递归扫描,利用如下代码即可得到所有满足要求的文件名称。

Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".txt") || s.EndsWith(".cpp") || s.EndsWith(".h") || s.EndsWith(".cs"));

      3)接下来是字符串的处理,词频统计这一功能是很容易实现的,利用容器Dictionary来存储键值对即可。由于要处理大小写,这里用到了两个Dictionary。

static Dictionary<string, int> wordtable = new Dictionary<string, int>();
static Dictionary<string, string> word = new Dictionary<string, string>();

      4)其中wordtable的key是单词的小写形式,value是频度;word的key是单词的小写形式,value是优先级最高的单词形式,(如word["file"] = "File"; wordtable["file"] = 1;),再考虑到排序是先value在key,即可完成simple mode;

      5)对于extend mode,字符串处理的方法是先从文件中得到形如“word1 wrod2 ... wordn”形式的长字符串,再对这个字符串不断匹配符合要求的“word1 word2”(或“word1 word2 word3”)形式的字符串,把它当作wordtable中的key,其他方法和simple mode中的一样。

      整个过程,大概花了7h左右的时间,主要是C#语言许多方法不熟悉,以及在编程过程中遇到了许多技术问题。其中,为了高效地完成匹配,在正则表达式的学习上就花了不少时间,还有从Simple mode到extend mode的过程中进行了许多尝试、debug。

0x10性能分析及代码优化

  1.Word_frequency.exe D:\test   316ms

  2.Word_frequency.exe -e2 D:\test  475ms

  3.Word_frequency.exe -e3 D:\test  559ms

  由此可见,程序运行的性能主要取决于正则匹配的性能,三次测试时间的变化主要源于匹配的单词的复杂度的提升,但这方面是没有跟多优化空间的,颗星的提升性能的办法就是采用多线程,同时对多个文件进行处理,可以有效减少程序运行时间,牺牲部分内存提升性能。

0x11事后诸葛亮总结

  1) 万万没想到,终于还是在deadlin前完成了。这次作业虽然完成了全部的功能,但从程序性能还是自己代码风格,都没做到很好。C#才接触,多线程实现有心无力,虽然对于少量文件来说没什么影响,但在大量文件测试线表现平平;代码中有很多可以复用的代码段,但我可耻得选择了ctrl C+V,使得代码冗余度很高,希望在下一次项目中能尽量避免。

  2)项目过程中的不足:

     .对于常用类、方法的认识严重不足,查找一个参数都花了很长世间;

     .在码代码的过程中老是想着有现成的方法可以用,算法思想都去哪了?!

     .还是没写出多线程。。。

  3) 收获还是不小,c#使用熟练度上上升了好几个百分点,也终于学到了听起来很厉害的正则表达式,对程序测试的大致流程也有了较多了解。

      

Individual Project - Word_frequency的更多相关文章

  1. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  2. Note: SE Class's Individual Project

    虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...

  3. Individual Project Records

    At the midnight of September 20, I finished my individual projcet -- a word frequency program. You c ...

  4. 《软件工程》individual project开发小记(一)

    今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c++和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一 ...

  5. SoftwareEngineering Individual Project - Word frequency program

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

  6. Individual Project - Word frequency program

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

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

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

  8. 1415-2个人项目Individual Project

    作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...

  9. Project: Individual Project - Word frequency program----11061192zmx

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

随机推荐

  1. box-shadow的动效制作

    突然发现原来box-shadow的功能很强大,还能做动效,下面整理下box-shadow几个效果 案例1:hover效果 <a href="/app/list">WEB ...

  2. Handler基本运行机制

    Handler,Looper,MessageQueue的基本原理(三个组成一个消息处理机制)最大的作用就是实现线程间的通信 Handler负责把消息对象加入到消息队列当中 Looper(循环器)是一个 ...

  3. Graphviz安装及简单使用

    Graphviz Windows环境安装: 1.官网下载 官网下载地址 2.配置环境变量 将graphviz安装目录下的bin文件夹添加到Path环境变量中: 3.验证是否安装并配置成功 进入wind ...

  4. 文件上传之Servlet

    导包 commons-fileupload-1.3.1.jar commons-io-2.2.jar import java.io.File; import java.io.FileOutputStr ...

  5. python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))

    昨日内容回顾 python中启动子进程并发编程并发 :多段程序看起来是同时运行的ftp 网盘不支持并发socketserver 多进程 并发异步 两个进程 分别做不同的事情 创建新进程join :阻塞 ...

  6. mysql试题

    drop,delete与truncate的区别:优先级: drop > truncate > deleteTRUNCATE 按行删除并不把删除操作记录记入日志保存(不可恢复)DELETE ...

  7. 云主机被拿去挖矿,cpu暴涨,tcp连接突增

    1.云主机被拿去挖矿,cpu暴涨,tcp连接突增 2.现象:top -c 3.然后我再查看pstree进程树 4.查找文件来源 ind  / -name '*suppoie*' 5. 然后删除 sup ...

  8. IntelliJ IDEA 常用设置 (二)

    一. 代码提示和补充功能有一个特性:区分大小写. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的, ...

  9. [01] AJAX

    1.概述 AJAX,"Asynchronous JavaScript And XML"的简称,即"异步的JavaScript和XML".AJAX的作用在于页面中 ...

  10. click事件和mousedown、mouseup事件

    点击select标签元素的时候,会弹出下拉.然而当option中没有元素时,就不希望弹出下拉(比如在某些浏览器中,点击select会默认出一个罩层效果,而此时没有数据选择的话,弹出比较不友好). 首先 ...