来学校交流学习的第一个正式的小项目作业就是软件工程老师所提出的词频统计了,具体要求如下。
要求:
写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。
解决思路:
刚看到这个问题,我脑海浮现的问题就是如何存储如此大量的数据呢,然后如何进行有效的统计。
我在想解决方案时,也有参考以前学姐学长们的例子,发现大多数好像都是用数组或者是链表来实现。
虽然老师所要求的文章大小并不算大,但是,推而广之考虑到文件大小更大的文章呢。所以单词量不是像原来所读取的那样少,若简单用数组链表实现的话,每匹配一个词就要把所有的单词遍历一遍显然是效率不高的,且读取以后要遍历多次进行单词的匹配,以便统计相同单词的个数。所以就考虑到一个效率的问题,恰好最近看到有关海量数据处理的相关文章,所以这里我首先就想到用字典树来存储数据。
字典树我就不详细介绍了,前一篇博文有详细介绍。Trie的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie的典型应用是统计和排序大量的字符串,所以经常被搜索引擎系统用于文本词频统计。
(以上仅是个人见解,有任何异议错漏欢迎提出,谢谢。)
整个开发时间历时两天左右