此作业的要求参见: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个函数此时的花费。要求包括截图。

无法成功进行效能分析,故此题无法完成。

01-22 12:24