第三次作业2

要求0

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

Windows系统推荐使用 ptime.exe。下载在此[https://coding.net/u/younggift/p/word_count_demo/git/blob/master/ptime.exe]。

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

要求 给出代码片断,并说明为什么你会认为此处是瓶颈,预计优化会有达到多好的效果。

读取输入并将其拼接成字符串的操作
1             while (getline(cin, temp))
2         {
3             if (!temp.empty())
4             {
5
6                 fInputs += temp;
7                 fInputs += ‘ ‘;
8             }
9         }

需要getline读入,并且需要对字符串进行拼接,循环的词数多,同时使用+=进行字符串拼接效率比较低(听同学说的)

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

要求 分析为什么此处是瓶颈。

最初使用cpu采样,得到的结果是这样的

然后进行了“检测”

得到了耗时最长的三个函数

然后发现程序的耗时瓶颈主要在两个部分

其中第一个_memmove发现自己并没有写这个函数,点进去后发现是MSVCR110.dll中的函数

其中调用这个函数最多的是erase函数,我使用这个函数来删除字符串中的各种字符与标点

这个字符串操作会不断改变字符串的长度

后面两个都是getline函数的问题

其中主要就是字符串拼接效率比较低

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

要求 给出如何改进瓶颈,改进后与改进前程序原理上 (而不是效果上的) 的差异。

针对于字符串拼接,换了不同的方式,例如使用append()代替+=

然后发现并没有什么用。从原理上讲好像也没什么区别

然后对于第一个问题,原本的思路是将标点与特殊符号删除,这是整个程序最耗时的一部分,将其改成将其替换成空格,这样减少了字符串操作的词数,速度大幅度提高

git地址https://git.coding.net/Hitagi123/word-count.git
 
				
时间: 2024-08-14 09:33:31

第三次作业2的相关文章

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

第三次作业问卷

看到一个问卷不错,拟作为第三次作业的部分内容. 你对自己的未来有什么规划?做了哪些准备? 答:未来走一步算一步,计划赶不上变化,充实自己的知识,多增加一点自己经验,比起知识,更重要的是社交. 你认为什么是学习?学习有什么用?现在学习动力如何?为什么? 答:学习,就是知道一些以前不知道的事.厉害的人有两点:观察力和文化底蕴,学习就是为了增加知识储备,尽量不出现书到用时方恨少的情况.目前的学习动力很缺乏,因为一到大学开始想着混. 你感觉自己什么事情做的比较成功?有什么经验? 答:并不知道,似乎没有什

第三次作业三总结与心得

知识点总结: 1.调用幂函数pow()生成乘方表 power=pow(); 2.#include<math.h>程序中调用了数学函数,需包含头文件math.h 3.调用自定义函数fact(i)计算i! product=fact(i); 4.double fact(int n);自定义函数的声明,以分号结束 5.double product;变量product用于存放结果(阶乘的值) 6.return product;将结果送回主函数 7.定义求n!的函数double fact(int n)函数

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程

魏昊卿——<Linux内核分析>第三周作业:Linux系统启动过程 一.实验部分 实验指导 使用实验楼的虚拟机打开shell 1 cd LinuxKernel/ 2 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>

第三次作业——个人作业——软件产品案例分析

第三次作业--个人作业--软件产品案例分析 评测产品:K米,安卓端 第一部分 调研,评测 评测 初体验 还没去KTV的时候,刚开始下了这个APP,我按正常软件一样,进行了注册功能,可到要写用户信息的时候,(可能是本着比较随意的思想,只想一直点,只填了一些以外使用其他APP时候的基本信息就一直点进一步),在上传用户头像的时候,我想直接跳过,没想到这一定要上传头像才可以啊!!!然后注册完后点进去,看了下K歌功能都不能用,看了一下用户的社区,发现大部分用户动态都是国庆的,这个时候已经10.17了,可见

职业规划第三次作业

看到一个问卷不错,拟作为第三次作业的部分内容. 你对自己的未来有什么规划?做了哪些准备? 答: 学好大学四年的课程,并积极参加各种活动来锻炼自己的能力.在实习期间认真学习工作经验,学习经验然后争取能自己创业 好好交友,多读书, 你认为什么是学习?学习有什么用?现在学习动力如何?为什么? 答:学习是通过他人的言传身教了解知识,将他人的认识转化为自己的知识.学习能够取他人之长补己之短,丰富自己的认知,还避免了闭门造车和坐井观天的错误.现在的学习动力一般,因为新学知识对我来说比较陌生. 你感觉自己什么

04+罗潇潇+罗潇第三次作业

04+罗潇潇+罗潇第三次作业第四章:项目管理一般知识1.核心知识域有哪些.保障域有哪些?伴随域有哪些?过程域有哪些? (1)核心知识域包括整体管理.范围管理.进度管理.成本管理.质量管理和信息安全管理等. (2)保障域包含人力资源管理.合同管理.采购管理.风险管理.信息(文档)与配置管理.知识产权管理.法律法规标准规范和职业道德规范等. (3)伴随域包含变更管理和沟通管理等. (4)过程域包含科研与立项.启动.计划.实施.监控和收尾等,而其中的监控过程则可能发生在项目生命周期的任一个阶段.2.有

o(︶︿︶)o 唉,第三次作业

                                                                             第三次作业 1.需求分析 (1)从combox控件中,获取各种运算(+.=.*./),用户可以输入运算范围,比如想算0-10以内的,那么就在textbox5和6中输入0和10就行,当然,如果5中的数字比6中的数字小的话,会有消息提示框,并清空他们.用户可以选择算法,设置范围后,点击计算,输入结果,回车就可以. 2.设计思路 (1)思考应该怎么做

第三次作业(毛涛和徐明艳)

第三次作业 题目: 请编写一个能自动生成小学四则运算题目的“软件”.让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 需求分析:      1. 该软件是针对学生有限的计算能力,计算效率,计算精确度而制作的软件: 2. 该软件可以进行简单的四则运算并进行判断: 扩展功能: 1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数. 2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号. 设计:  根据四则运算法则本