ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

宋晓丽20190919-3 效能分析

2019-09-22 18:02:11  阅读:325  来源: 互联网

标签:截图 效能 宋晓丽 lists num 时间 words input 20190919


此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628]

此项目的git地址为[https://e.coding.net/sxl357/wf.git]

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

测试方法:输入ptime wf -s < war_and_peace.txt

第一次测试时间截图:

 

第二次测试时间截图:

 

 

第三次测试时间截图:

 

 

统计表:

 

 

 

要求1 给出你猜测程序的瓶颈。

瓶颈1:

           readinput=sys.stdin.read()
           

 

读入文本所占时间较长

瓶颈2:

    lists=findall(r'[a-z0-9^-]+',input.lower())
    words=Counter(lists)

通过正则表达式生成单词列表和统计单词个数花费较长时间

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

 

 

 

方法:输入python -m cProfile -s time wf.py -s < war_and_peace.txt

 

最耗费时间的3个函数:

 

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

这三个函数是该功能实现的关键,暂还未找到更好的替代函数,无法直接对这三个瓶颈进行优化。所以在此要求下,我做了两个尝试,想看看封装函数和不同的遍历字典的方式会带来什么运行时间的变化。

 

原代码

def doinput(input):
    lists=findall(r'[a-z0-9^-]+',input.lower())
    words=Counter(lists)
    num=0
    for key,value in words.items():
        num+=1
    print('total'+' '+str(num))
    maxwords=words.most_common(10)
    for i in maxwords:
        print('%-8s%5d'%(i[0],i[1]))

现代码

def tongji(list)
    words=Counter(list)
    num=0
    for i in words:
        num+=1
    print('total'+' '+str(num))
    maxwords=words.most_common(10)
    for i in maxwords:
        print('%-8s%5d'%(i[0],i[1]))

def doinput(input):
    lists=findall(r'[a-z0-9^-]+',input.lower())
    tongji(lists)

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

 

 

 

修改后的三次测试时间:

结论:封装函数后,被封装的counter()的运行时间会增加,总体的运行时间有所减少

要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:截图,效能,宋晓丽,lists,num,时间,words,input,20190919
来源: https://www.cnblogs.com/simpleli66/p/11568491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有