Individual Project - Word_frequency

作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html

一.预先准备和时间规划

1.安装Microsoft Visual Studio Ultimate 2012,之前安装过一次,预计2小时左右,但是安装过程中可以继续进行其它任务。

2.阅读题目要求,理解要实现的功能,预计20min左右。

3.根据题目,设计程序框架,预计10min左右。

4.阅读相关文档,学习所需要的类的命名空间,属性和方法,预计1小时左右。

5.初步完成程序编写,预计3小时左右。

6.设计测试数据,对出现的Bug进行改进,预计2小时左右。

二.实际用时和具体过程

1.安装Microsoft Visual Studio Ultimate 2012,网址如下:

  http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30678

网速较快用时1小时。

2.阅读题目要求,理解要实现的功能:实现一个文本词频统计器,可以实现统计单词数目,2联短语数目,3联短语数目。单词比较忽略大小写,输出时按照词频从大到小排序,相等时按字典序排序,用时15min。

3.根据题目,设计程序框架,完善代码:(用时大约4小时)

  (1)根据读入目录路径,获取目录子文件:

  View Code

  (2)读取每个文件的内容:

  View Code

  (3)对于获取的文本信息整理:先将文本拆分成若干行或者句子,设定三个Regex类,分别匹配单个单词,2两个由单个空格隔开的单词,3个由单个单词隔开的单词。调用Regex.Match()方法和Regex.NextMatch方法匹配所有可匹配项:

    数据存放数组定义如下:

  View Code

    模板定义如下:

  View Code

    具体过程如下:

  View Code

   (4)对于存取数据的ArrayList类整理排序:主要运用ArrayList.sort(IComparer)方法,需要自己实现IComparer接口。

  View Code

    设计相关方法去掉重复单词,记录次数:

   

  View Code

 

   (5)对数据调用自定义的Redelete方法和Resort方法,并输出结构到指定文件下

  View Code
  View Code
  View Code

4.设计数据,数据如下:

http://pan.baidu.com/s/1mgyYOTM

三. 性能分析与改进

虽然排序用了ArrayList.Sort()方法,但是删除重复时用了ArrayList.RemoveAt()方法,最坏可能是N^2的复杂度,这导致了算法复杂度极大升高,后来看了才意识到。可以调用Dictionary类,减少运行时间。改进代码如下:(课程网站提交的是源代码,想改时发现错过提交时间了)

 

  View Code

 

 

这组数据在改进前无法运行

改进后运行状态为:

虽然也很慢,而且cpu运行有时比较高,但是可以出结果了,之前的40min也没出结果。

 从上面看出,我的代码主要运行时间在IComparer比较上,排序时的比较总会调用MyStringCompare,比较一次,调用一次。故占用浪费时间较大。

 因代码编写匆忙,故时间主要花费在实现功能上,而忽略了性能。

 

 四.数据验证

 

 此数据可看出,可以显现扫面三联词汇,二连词汇,统计所有单词词频,可以忽略大小写。故程序正确性无误。

五.感想

虽然不是第一次写C#程序了,但是完成这次作业后才发现,自己C#知识不足,写出的代码风格接近java,对C#特有的一些知识没有掌握。而且前期投入时间不足,导致后期忙于赶任务,完成的不是很好,性能不够快,代码全写在主类中,全是静态方法,风格不是很好。希望这次也给自己一个教训,总结经验,更好地完成下一次作业!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值