prime frequency java_软件工程个人项目--Word frequency program

(一)工程设计时间预计

1.代码编写:1小时30分钟

(1)文件夹的遍历以及筛选;

(2)文件夹的读取,以及对读取字符的操作。

(3)所得结果排序,以及文件输出。

2.程序调试:1小时

(1)编写数据。

(2)测试以及调试。

3.程序优化:1小时;

程序优化主要通过以下几个方面:

(1)排序的优化;

(2)存储数据的优化:通过开更大的空间以换取时间上的优化;

(3)查找算法的优化;

预计总时间:3小时30分钟

(二)工程所用实际时间

1.代码编写:2小时30分钟

(1)文件夹的遍历以及筛选:1小时30分钟;

(2)文件夹的读取,以及对读取字符的操作:1小时;

(3)所得结果排序,以及文件输出:30分钟;

2.程序调试:1小时

(1)编写数据:15分钟;

(2)测试以及调试:45分钟;

3.程序优化:1小时;

程序优化主要通过以下几个方面:

(1)排序的优化;

(2)存储数据的优化:通过开更大的空间以换取时间上的优化;

(3)查找算法的优化;

实际所用总时间:4小时30分钟。

(三)关于实际时间比预计时间长的分析

在这一次的程序编写过程中,代码编写实际所用时间比预计时间多了1个小时,这一个小时主要多在文件夹的遍历以及筛选这一部分上,

由于平时c++用的比较少,所以对于c++的文件操作不太了解,在文件夹的遍历以及筛选这一部分上遇到了很大的问题,

通过查阅《c++prime》,在网上搜索相关答案,以及请教同学顺利的解决了这个问题,虽然在这一部分比预计多花了很多时间,

但是通过这一过程,让我对c++对文件的操作有了更深的了解。

(四)程序优化

1.代码优化分析

通过分析,代码主要分为两部分进行优化:

(1)记录一个单词,与之前所记录的单词进行比较,这一部分的优化是整个程序性能提升的最重要部分。

(2)记录完所有单词之后,进行排序,排序算法可以进行优化。

2.可优化部分代码:

(1)单词查找部分代码

1 if (y6==1) //为拓展

2 {3 while ((y2

4 {5 if (a[y2]==a[m])6 {7 x4=0;8 for (y3=0;y3<=a[m];y3++) //不区分大小写比较

9 {10 ch1=hjk[m][y3];ch2=hjk[y2][y3];11 if (hjk[m][y3]<=90) ch1=hjk[m][y3]+32;12 if (hjk[y2][y3]<=90) ch2=hjk[y2][y3]+32;13 if (ch1!=ch2) x4=1;14 }15

16 if (x4==0) //找到匹配

17 {18 x3=1;19 if (hjk[m]

28 {29 len1=hjk[m].length ();30 while ((y2

36 {37 ch1=hjk[m][y3];ch2=hjk[y2][y3];38 if (hjk[m][y3]<=90) ch1=hjk[m][y3]+32;39 if (hjk[y2][y3]<=90) ch2=hjk[y2][y3]+32;40 if (ch1!=ch2) x4=1;41 }42 if (x4==0) //找到匹配

43 {44 x3=1;45 if (hjk[m]

(2)排序代码

1 for (i=1;i<=m-1;i++)2 for (j=i+1;j<=m;j++)3 if (b[i]

13 {14 if (b[i]==b[j])15 {16 if (hjk[i]>hjk[j])17 {18 xy=b[i];19 b[i]=b[j];20 b[j]=xy;21 sw=hjk[i];22 hjk[i]=hjk[j];23 hjk[j]=sw;24 }25 }26 }

3.优化方法

将记录单词的方式变为有序的记录,这样查找时可以根据当前单词的ASCII码值进行快速的查找,而不必从头到尾逐一查找,

并且由于是有序的存储,在之后的排序过程中省去了字典序的排序,只需要将频率高的单词移动至输出的前端即可。

4.优化前后性能对比

(1)所使用的测试用例:

0c71ad91d1893b937b51b40686a309a9.png

(2)优化前分析报告

6c3e994b42cb23437e0361643d9b7d4d.png

ab4f6d752c7f45cb05812558d9a16fdc.png

848a9f78c3efaa5efac59bd7b588f043.png

(3)优化后分析报告

9eaf4ff1268f8a91e6f875a872cd7a40.png

1b05daf71ef0d2420681771036ccc576.png

0539ec0e0639a0376e9bfddf085c1aff.png

(4)优化分析

可以看到,同用一个测试用例,优化前后效率有较大的差距,优化前需要22秒左右,优化后只需要10秒,同时可以认定越大的测试用例优化效果越明显。

(五)所使用的测试用例

(1)测试空文件夹

6c290bc8d97c4b4f0a761e05e98fa25a.png

d7242e864fccc937f91d6c4b43bafa7f.png

(2)测试有相同单词的文件

a0a6f0b2305a2366a28c1fe9b9aeda45.png

b03ba8dc147bfa6909eae1d958ed2ecc.png

(3)测试有文件中包含文件的文件

61b6f2ad354b4b65510037ab886a3969.png

4f1ba12abfbd5e65c46bcca32a0774dc.png

(4)测试有不符合后缀的文件

deb866596f7af31d85dd3c2ee785f07f.png

479d5ff3e502b83f617524b5125e621a.png

(5)测试-e中数字不同,单词相同的文件

d6da3992ec1c9429d59897be06fb7fa0.png

a49cc8022d42c8701bd61cc53515d52e.png

(6)测试-e中大小写不同的文件

797509269b8c756a72d890e65ce98d87.png

7b12a9c8f3a5c66f575ad89ee58ea7f8.png

(7)测试字母+数字+字母+数字的文件

3cbcf9782a73d9a3bae0dfaa18909666.png

64910efcaa99268b4b569e2643c1bd3e.png

(8)大规模数据监测

(9)大规模数据监测

(10)大规模数据监测

(六)收获与感想

在这次软件工程作业中,回顾了很多c++的相关知识,尤其是c++的字符串操作和文件操作,在文件夹的遍历以及筛选这一

部分上遇到了很大的问题,通过查阅《c++prime》,在网上搜索相关答案,以及请教同学顺利的解决了这个问题,虽然在这一

部分比预计多花了很多时间,但是通过这一过程,让我对c++对文件的操作有了更深的了解。

总之通过这一次练习,巩固了很多之前学过的知识,也学到了一些新的知识,希望能够在今后的课程中学到更多新的知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值