• 康哲 20190919-3 效能分析


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

    git链接:https://e.coding.net/kangzhe/wf.git

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

    连续三次运行效果如下:

    第一次运行:

     CPU参数:Intel(R)Core(TM)i5-8300H CPU @ 2.30GHz 2.30 GHz

    第一次运行时间:0.685s

    第二次运行:

    CPU参数:Intel(R)Core(TM)i5-8300H CPU @ 2.30GHz 2.30 GHz

    第二次运行时间:0.492s

    第三次运行:

    CPU参数:Intel(R)Core(TM)i5-8300H CPU @ 2.30GHz 2.30 GHz

    第二次运行时间:0.512s

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

    代码片段:

    def test_four(redirect_words):
        total = 0
        words = re.findall(r'[a-z0-9^-]+', redirect_words.lower())
        counts = collections.Counter(words)
        total += len(words)
        # 计算相同单词的数量
        for key, value in counts.most_common():
            if counts[key] > 1:
                total = total - counts[key] + 1
        print("total", total)
        print("
    ")
        # 输出键值对
        for key, value in counts.most_common(10):
            print(key, value)

    瓶颈:对文档进行正则化时,可能会相对消耗时间,在计算单词数时需要对单词列表进行遍历,同时在输出单词和统计字数时又对列表进行了遍历,这两处相对的消耗时间。

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

    运行截图如下:

    其中最好费时间的函数是:test_four,findall和collections,Counter函数。时间分别为0.257s,0.150s,0.50s,通过以上运行截图中数据来看,瓶颈处于第四个功能的遍历文件查找单词上。

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

    修改前代码:

    def test_four(redirect_words):
        total = 0
        words = re.findall(r'[a-z0-9^-]+', redirect_words.lower())
        counts = collections.Counter(words)
        total += len(words)
        # 计算相同单词的数量
        for key, value in counts.most_common():
            if counts[key] > 1:
                total = total - counts[key] + 1
        print("total", total)
        print("
    ")
        # 输出键值对
        for key, value in counts.most_common(10):
            print(key, value)

    修改后代码:

    def test_four(redirect_words):
        words = re.findall(r'[a-z0-9^-]+', redirect_words.lower())
        count(words)

    改进:将功能四中的大部分代码都装进一个函数中,在功能四读取完单词后计数交到了另一个函数中执行,降低了功能4执行的时间,也增加了读取文本内容的效率。

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

     在要求一中的三个函数test_four,findall和collections,Counter函数执行时间分别为:0.230,0.145,0.50。在代码中将功能四的代码装在了一个可调用的函数中,能尽量降低查找单词和功能四的执行效率。

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

  • 相关阅读:
    vue中用解构赋值的方法引入组件
    es6--promise
    VUE设置浏览器icon图标
    vue项目之购物车
    vue之组件通信
    hbulider 快捷键
    Redis详解(3)--5大数据类型
    Redis详解(1)--redis简介与安装
    Redis详解(2)--redis配置文件介绍
    Python面试综合--web相关
  • 原文地址:https://www.cnblogs.com/kangzhe-nenu/p/11570435.html
Copyright © 2020-2023  润新知