单词频率统计程序性能分析
单词频率统计程序性能分析
伊诗塔 发表于4年前
单词频率统计程序性能分析
  • 发表于 4年前
  • 阅读 352
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 这次是一个软件工程老师布置的一个作业,估计旨在要我们学会分析自己程序的性能。 首先,问题回顾:统计一篇100-300kb英文文章出现频率最高的十个单词。 注意:无需考虑这个单词是否正确的问题。

/**

        编程语言:java

        文档大小:351KB

**/

问题解决步骤如下,首先我想到的是应该写一个类来读取自己电脑上的文本文档。部分代码如下代码所示:

public class ReadTxt {
	/**
	 * 读取文本文件,abs_path表示绝对路径
	 * @param abs_path
	 * @throws IOException
	 */
	public String fileReader(String abs_path) throws IOException{

得到了这篇文章之后,我将其转化为一个字符串数组,这里比较重要的就是如何分词,幸运的是java提供了这个功能,代码如下:

String[] strArray = new String[]{};
strArray = allWords.split("[^a-zA-Z0-9]+");

最后的步骤就是简单的统计每个单词的频率。

//找出每个单词的频率
		for(int j = 0; j < strArray.length;j++){
			for (int k = 0; k < strArray.length; k++) {
				if((strArray[j].equalsIgnoreCase(strArray[k])) && (j != k)){
					counterFrequent[0][j]++;
				}
			}
		}

在main函数里面的运行结果如下:

-----------------出现频率最多的十个单词如下-------------------

       the             出现的频率是      1537 次

        of              出现的频率是      633 次

        to              出现的频率是      624 次

        a                出现的频率是      585 次

        in               出现的频率是      518 次

        said            出现的频率是      507 次

        He              出现的频率是      474 次

        You            出现的频率是      421 次

        it                出现的频率是      405 次

        I                 出现的频率是      330 次

接下来使用VisualVM测试其性能,获得的性能分析结果如下:

cpu使用情况:

从上图可以看到运行时间大概是三秒左右。

堆内存变化情况:

总共加载的类情况:

线程情况:

至此工作基本完成。


不足之处:由于我在排序的时候没有采用比较高效的算法,例如快速排序。而是自己写了一个简单的冒泡排序,因此与之前文档较小时运行时间比起来速度慢了很多。忽略了单词不正确的情况。


改进之处:可以采用高效的排序算法,或者运用java自带的hashMap效率会提高很多。


总结:在这个过程中还是遇到很多问题,比如程序问题,当我在读取文件的时候读取的不完全。还有就是分词的正则表达式的写法。遇到的最大问题算是如何分析性能的问题吧,因为以前从没有接触过。我折腾了整整一天才弄出来一个结果,而且还不知道这个结果是否正确。但是,我很高兴老师布置这样的题目,在这个过程中我学到了很多。

共有 人打赏支持
粉丝 9
博文 2
码字总数 3270
×
伊诗塔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: