梅小雨20190919-3效能分析

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

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

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

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

第一次测试时间截图:

 第二次测试时间截图:

 第三次测试时间截图:

 统计表:

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

瓶颈:字符转换过程中所用时间过多,可以通过函数封装的方法进行代码效率的优化

while True:
        lastchar = word1[-1:]
        if lastchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
            word2 = word1.rstrip(lastchar)
            word1 = word2
        else:
            word2 = word1
            break
 
    while True:
        firstchar = word2[0:]
        if firstchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
            word3 = word2.lstrip(firstchar)
            word2 = word3
        else:
            word3 = word2
            break

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

要求 分析为什么此处是瓶颈。要求 profile需要得到函数的运行时间和次数。仅得到CPU和内存占用,不得分。

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

最耗费时间的3个函数:

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

 修改后的代码片段:

while True:
               lastchar = word1[-1:]
               for lastchar in '
 .,"':
                   word2 = word1.rstrip(lastchar)
                   word1 = word2
               else:
                   word2 = word1
                   break
 
           while True:
               firstchar = word2[0:]
               for lastchar in '
 .,"':
                   word3 = word2.lstrip(firstchar)
                   word2 = word3
               else:
                   word3 = word2
                   break
                   # build a wordList of lower case modified words
           word_list2.append(word3)

对单词格式化部分的字符进行封装

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

 此时三个函数的花费:

 再测试三次:

 

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

供老师测试的git地址为

https://e.coding.net/meixiaoyu/xn.git


原文地址:https://www.cnblogs.com/MAY6/p/11576061.html