20190919-3 效能分析

作业地址:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628

 

要求0:以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。 (2分)

测试代码地址:https://e.coding.net/gitli/ceshikangzhedaima.git

CPU:Inter(R) Core(TM) i5-4210U CPU @ 1.70GHz  2.40 GHz

耗费时间:6.295s,6.266s,6.283s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。

在单词读取中,会遇到空格,标点符号,在遍历单词的过程中应该会耗费较多的时间。

if(isalpha(ch)||(isdigit(ch)))
        {
            flag = 1;
            tmp[i++]=ch;
        }
        else
        {
            if(flag)
            {
                    if((ch=='-')||(ch=='\''))
                {
                    tmp[i++]=ch;
                    flag = 1;
                }
                else
                {
                    flag=0;
                    tmp[i]='\0';
                    i=0;
                    for(j=0;j<num;j++)
                    {
                        if(strcmp((words+j)->w,tmp)==0)
                        {
                            (words+j)->fre++;
                            break;
                        }
                    }
                    if(j==num)
                    {
                        (words+num)->fre=1;
                        strcpy((words+num)->w,tmp);
                        num++;
                    }
                    if(num==500*p)
                    {
                        p++;
                        words=(wordnode*)realloc(words,500*p*sizeof(wordnode));
                        for(k=num;k<500*p;k++)
                        {
                            (words+k)->fre=0;
                        }
                    }
                }
            }
        }

        ch = tolower(fgetc(fp));

要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。 (5分)

 

 

 程序最耗费时间的三个函数:strcmp(),fun1(),getc()

 

 while(ch!=EOF)
    {

        if(isalpha(ch)||(isdigit(ch)))
        {
            flag = 1;
            tmp[i++]=ch;
        }
        else
        {
            if(flag)
            {
                    if((ch=='-')||(ch=='\''))
                {
                    tmp[i++]=ch;
                    flag = 1;
                }
                else
                {
                    flag=0;
                    tmp[i]='\0';
                    i=0;
                    for(j=0;j<num;j++)
                    {
                        if(strcmp((words+j)->w,tmp)==0)
                        {
                            (words+j)->fre++;
                            break;
                        }
                    }
                    if(j==num)
                    {
                        (words+num)->fre=1;
                        strcpy((words+num)->w,tmp);
                        num++;
                    }
                    if(num==500*p)
                    {
                        p++;
                        words=(wordnode*)realloc(words,500*p*sizeof(wordnode));
                        for(k=num;k<500*p;k++)
                        {
                            (words+k)->fre=0;
                        }
                    }
                }
            }
        }

 

要求3 根据瓶颈,"尽力而为"地优化程序性能。 (5分)

针对单词的查找进行优化,但是运行结果都不对。暂时放弃了。

要求4 再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。(2分)

转载于:https://www.cnblogs.com/qiwh/p/11581819.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值