常常遇到这样的一个问题:在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常称为“top K”问题,如:在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载率最高的前10首歌等等。
①: 本人初次学习软件工程,近来便遇到一个类似的问题,问题是关于统计一片文章中统计出现频率最高的前十个单词。其实刚拿到这个程序时,也觉得很容易:无非是文件的导入、单词的分类、以及排序算法。所以便开始编程(因为大学没有养成需求设计的习惯,更加注重编写代码),所以,编着编着便越遍越多,仔细看来不仅代码冗余,而且结构混乱。正如师所说,自己的代码不仅别人看不懂,自己几天后都不知道自己的某个类时期什么作用。于是我便开始着手分析程序(因为自己熟悉java,觉得java的封装做的好,其实论速度还是c语言比较快)。
First:理解这道题做什么的?
这道小程序做的是统计一篇文章出现频率最高的十个词,及相同的次的次数排序。
Second:理解这道题须解决哪些问题?
(1)文件的导入(其实很简单,一个BufferedReader便能搞定)。
(2)单词的读取,因为是一整篇文章,需要分割单词依据“,。?!”等这些进行分割。
(3)相同字数的统计。
(4)排序算法。
Third:功能的实现?
(1)文件的导入,依据java提供的基于字符型的文件的输入输出与缓冲流的应用(相信学过I/O的输入输出都应该会)
关键代码:
File file=new File(path); FileReader fileReader=new FileReader(file); //建立文件输入流 BufferedReader bufferedReader=new BufferedReader(fileReader); //建立缓冲输入流