Individual Project - Word_frequency
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的更多相关文章
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- Note: SE Class's Individual Project
虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...
- Individual Project Records
At the midnight of September 20, I finished my individual projcet -- a word frequency program. You c ...
- 《软件工程》individual project开发小记(一)
今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c++和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一 ...
- SoftwareEngineering Individual Project - Word frequency program
说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...
- Individual Project - Word frequency program
1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...
- Individual Project - Word frequency program - Multi Thread And Optimization
作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...
- 1415-2个人项目Individual Project
作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...
- Project: Individual Project - Word frequency program----11061192zmx
Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...
随机推荐
- Navicat连接Oracle的几个问题及解决方案
1.用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error 解决方案: ...
- Elasticsearch一些常用操作和一些基础概念
1.查看集群健康状态 [root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/health?v epoch timestamp ...
- beta版本汇总
deta版本五天汇总 day1 day2 day3 day4 day5 GitHub地址 前端代码github地址 后端代码github地址 这里说明一下我们队伍的安排风格: 第一天:明确安排前后端的 ...
- Java基本数据类型转换
一:Java的基本数据类型和引用数据类型 1:基本数据类型 2:引用数据类型 二:基本数据的类型转换 基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型 ...
- WebStorm如何分配运行内存?The IDE is running low on memory...
vue项目做的后台管理系统做得差不多了,安装的依赖包也越来越大,就在春节放假的前两天,突然发现我的电脑居然带不动WebStorm了,查改一些代码,WebStorm运行迟钝,鼠标滑动严重“掉帧”,让我非 ...
- Hibernate Tools生成注释
原文:http://www.blogjava.net/pauliz/archive/2009/11/13/302162.html 有同学需要修改后的Hibernate Tools整个tool我就不上传 ...
- session、cookie 记住登录状态的实现
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- Oracle数据库查询优化(上百万级记录如何提高查询速度)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引 ...
- 使用 Apache Web 配置多个站点
导读 如何在流行而强大的 Apache Web 服务器上托管两个或多个站点.这篇文章的环境是 Fedora 27 虚拟机,配置了 Apache 2.4.29.如果你用另一个发行版或不同的 Fedora ...
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...