作者:怪物-pp_912 | 来源:互联网 | 2023-10-12 15:32
此作业要求参见:https:edu.cnblogs.comcampusenu2019fallhomework7628链接:https:e.coding.nethejw031hej
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628
链接:https://e.coding.net/hejw031/hejw08.git
要求0 以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
第一次运行:
第二次运行:
第三次运行:
第一次运行时间:1.507秒
第二次运行时间:1.274秒
第三次运行时间:1.393秒
要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
def count(words):
collect = collections.Counter(words)
num = 0
for i in collect:
num += 1
print('total %d words\n' % num)
result = collect.most_common(10)
for j in result:
print('%-8s%5d' % (j[0], j[1]))
def doCount(accept):
s = '.txt'
if s in accept:
path = accept
else:
path = accept + '.txt'
f = open(path, encoding='utf-8')
count(words)
words = re.findall(r'[a-z0-9^-]+', f.read().lower())
count(words)
瓶颈:读取文档之后需要对文本进行正则化,然后再对文本中的单词进行遍历,感觉这个过程会花费比较多的时间,属于这个程序的瓶颈吧。
要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。
从截图中可以看出最花费时间的三个函数分别是:read(),findall()和collections().
要求3 根据瓶颈,"尽力而为"地优化程序性能。
优化前代码:
def doCountByPurText(inputText):
words = re.findall(r'[a-z0-9^-]+', inputText.lower())
collect = collections.Counter(words)
num = 0
for i in collect:
num += 1
print('total %d words\n' % num)
result = collect.most_common(10)
for j in result:
print('%-8s%5d' % (j[0], j[1]))
优化后代码:
def doCountByPurText(inputText):
words = re.findall(r'[a-z0-9^-]+', inputText.lower())
count(words)
将统计词频的代码封装成函数,需要计算词频时调用该函数,节省了程序运行时间。
要求4 再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。
findall 0.201s
collections 0.079s
read 0.044s
要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。