此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628
修改后的代码地址为:https://e.coding.net/Eustia/wf.git
要求0
以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
cpu参数:Intel Core i7-4710MQ 2.50GHz
消耗时间:4.872s,4.811s,4.818s
平均消耗时间:4.834s
截图如下:
要求1
给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
对字符出现次数的排序进行了很多次无用排序,导致时间增多。我认为在此处优化会有最佳效果。
//对单词出现频次进行排序 for(i=0;i<50000;i++) { q[i]=wd[i].time; } sort(q,q+50000,greater<int>());
要求2
通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。
由于上周使用的codeblocks进行编程,这周为了效能分析把代码迁到了vs2017上面,但是经过了好几个小时的调试依旧无法成功进行效能分析,于是无法给出截图。猜测程序运行中最花费时间的3个函数或代码片段为:
for(i=0;i<total+1;i++) { q[i]=wd[i].time; } sort(q,q+total+1,greater<int>());
for(j=0;j<total;j++) { if(wd[j].time==q[i]) { j=j+flag; while(wd[j].time!=q[i]) { j=j+1; flag++; } printf("%s",wd[j].s_wd); strcpy(c_temp,wd[j].s_wd); len=strlen(wd[j].s_wd); s=15-len; temp=q[i]; break; } }
while((c=getchar())!=EOF) { if(fflag==1) { if((c>=65&&c<=90)||(c>=97&&c<=122)) { if(c>=65&&c<=90) { c=c+32; } word[ii]=c; ii++; } fflag=0; } else { if((c>=65&&c<=90)||(c>=97&&c<=122)||(c==39)||(c==45)) { if(c>=65&&c<=90) { c=c+32; } word[ii]=c; ii++; } else { if(ii>0) { wdcount(word); memset(word, 0, sizeof(word)); ii=0; fflag=1; } } } }
要求3
根据瓶颈,"尽力而为"地优化程序性能。
由于该功能较为简单,只需修改参数即可,修改后的代码如下:
for(i=0;i<total+1;i++) { q[i]=wd[i].time; } sort(q,q+total+1,greater<int>());
优化后的程序运行截图如下:
运行时间为:4.776s,4.790s,4.796s
平均运行时间为:4.787s
要求4
再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。
无法成功进行效能分析,故此题无法完成。