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

      首先,我下载ptime.exe,不知道什么原因我下载下来以后运行老出现闪退现象。一直没法使用。我就接下来开始下载visual studio 2015,但是下载了一下午就是下不下来,我也很苦恼啊,电脑还是变成了巨难用,我下载的时候大概是缺少很多插件,我也不懂了。然后通过请教学长和同学,我使用了Very Sleepy CS软件来对功能进行效能分析。

由于我上次作业功能四没有实现,我没办法完成以战争与和平作为输入文件,重读向由文件系统读入进行效能分析,这部分功能我现在一直在研究学习,通过看C教程和视频学习字符串、排序和文件部分,单个部分会了,但是这三部分连起来写代码这三个功能我还是实现不了。

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

根据代码猜测瓶颈应该在排序算法上,用的快速排序,时间复杂度为O(nlogn),如果文件大的话,把单词进行排序取前十个工作量是很大的。也是影响程序运行效率的重要部分。

void quick(struct f_word *f, int i, int j)
{int m, n,temp,k;                             char b[18];m = i;n = j;k = f[(i + j) / 2].num;                            do{while (f[m].num>k&&m<j) m++;           while (f[n].num<k&&n>i) n--;            if (m <= n){                                       temp = f[m].num;strcpy(b, f[m].a);f[m].num = f[n].num;strcpy(f[m].a, f[n].a);f[n].num = temp;strcpy(f[n].a, b);m++;n--;}} while (m <= n);if (m<j) quick(f, m, j);                      if (n>i) quick(f, i, n);
}

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

如下图所示:

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

   现在是对排序算法进行优化,在对文件进行排序时,需要排序的数量小于一个数值的时候使用直接插入排序,大于的时候使用快速排序。涉及到swapf(),med3(),vecswap()三个函数,如下代码所示:

void swapf(struct f_word *f, int a, int b)
{int temp;char x[word_size];temp = f[b].num;strcpy(x, f[b].wd);f[b].num = f[a].num;strcpy(f[b].wd, f[a].wd);f[a].num = temp;strcpy(f[a].wd, x);
}void vecswap(f_word *f, int a, int b, int n)
{for (int i = 0; i < n; i++, a++, b++)swapf(f, a, b);
}int med3(struct f_word *f, int a, int b, int c)
{return f[a].num< f[b].num ? (f[b].num < f[c].num ? b : f[a].num < f[c].num ? c : a) : f[b].num > f[c].num ? b : f[a].num > f[c].num ? c : a;
}void quick(struct f_word *f, int g, int h)
{int m, n, temp, k;char b[word_size];m = g;n = h;k = f[g].num; if (g >= h)return;do{while (f[m].num>k&&m<h) m++;             while (f[n].num<k&&n>g) n--;            if (m <= n){                                       temp = f[m].num;strcpy(b, f[m].wd);f[m].num = f[n].num;strcpy(f[m].wd, f[n].wd);f[n].num = temp;strcpy(f[n].wd, b);m++;n--;}} while (m <= n);quick(f, m, h);                     quick(f, g, n);
}void qsort7(struct f_word *f, int p, int r)
{char x[word_size];int len = r - p + 1;if (p >= r)return;if (len< 7){for (int i = p; i <= r; i++){for (int j = i; j > p && f[j - 1].num > f[j].num; j--){swapf(f, j, j - 1);}}return;}int m = p + (len >> 1);if (len > 7){int l = p;int n = r;if (len > 40){int s = len / 8;int s2 = 2 * s;l = med3(f, l, l + s, l + s2);m = med3(f, m - s, m, m + s);n = med3(f, n - s2, n - s, n);}m = med3(f, l, m, n);}int v = f[m].num;strcpy(x, f[m].wd);int a = p, b = a, c = p + len - 1, d = c;while (true){while (b <= c && f[b].num <= v){if (f[b].num == v)swapf(f, a++, b);b++;}while (c >= b && f[c].num >= v){if (f[c].num == v)swapf(f, c, d--);c--;}if (b > c)break;swapf(f, b++, c--);}int s, n = p + len;s = (a - p)>(b - a) ? (b - a) : (a - p);vecswap(f, p, b - s, s);s = (d - c)>(n - d - 1) ? (n - d - 1) : (d - c);vecswap(f, b, n - s, s);if ((s = b - a) > 1)qsort7(f, p, s + p - 1);if ((s = d - c) > 1)qsort7(f, n - s, n - 1);}

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

改进前

改进后

经过两次效能分析一对比,发现优化前和优化后并没有太大提高,或许是我猜测错误,与排序算法并没有很大的关系。因为算法执行时间并没有太大的改变。可能影响性能的是整个程序并不能特定的说是排序算法。上次作业我就是调试的学长的代码,这次对学长代码进行性能分析,收获还是很大的。处理了原本程序里存在的bug,对程序进行了优化,再接再厉。

git地址:https://coding.net/u/MingZi-/p/cipingtongji/git

转载于:https://www.cnblogs.com/Mingezi/p/7595740.html

2017年软件工程第三次作业-2效能分析相关推荐

  1. 2019软件工程第三次作业

    2019软件工程第三次作业 数独游戏 戳这里进入Github项目 第一眼看到要做数独的时候,脑海里的第一反应就是用深搜.现在好了,确定了算法,接下来就是要去实现它,可是对于将近半年没写过深搜的我要写一 ...

  2. 软件工程第三次作业——软件质量保证鄙见

    阅读教材第14章及课后参考文献  写一篇关于软件质量保障的博文 参考文献: 两种不同的声音(1)https://coolshell.cn/articles/6994.html (2)https://w ...

  3. 软件工程网络15个人作业3——案例分析(201521123107)

    #软件工程网络15个人作业3--案例分析 根据博客要求,写一篇个人随笔 参考来自: http://www.cnblogs.com/xinz/archive/2012/03/26/2417699.htm ...

  4. test软件工程第三次作业

    零.前言 本次作业要求个人编写程序,截止日期2019年9月25日23:00. 请先阅读<构建之法>第一章至第三章的内容,并在下方作业里体现出阅读后的成果.特别是第2章中的效能分析及个人软件 ...

  5. 北航2022软件工程第三次作业——结对编程(最长英语单词链)

    软件工程第三次结对编程作业 项目 内容 这个作业属于哪个课程 北京航空航天大学2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对编程项目-最长英语单词链 我在这个课程的目标是 学习软件工程 ...

  6. 现代软件工程第三周作业——Word Frequence

    本博文是现代软件工程第二次结对编程Word Frequence(作业要求)的总结,本项目的源码在这里 how you collaborate: working separately? pair pro ...

  7. 软件工程第三次作业 结对编程

    结对编程 小组成员: 201521123055 林一心 博客地址 201521123046 张杭镖 博客地址 项目地址 一.分析改进现有代码 1.单元测试: 2.覆盖率: 3.确定当前设计的一个弱点, ...

  8. 第三周作业2——效能测试

    作业要求来自:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/956 git地址: https://git.coding.net/Su ...

  9. 个人第三次软件工程作业-效能分析

    前言 在进行本次作业之前,发现之前编译的程序中,有一处bug:不能完整读取文件,导致词频统计不完整.在进行本次作业之前已经修复. 要求0 -具体要求:以 战争与和平 作为输入文件,重读向由文件系统读入 ...

最新文章

  1. 探讨SQL Server 2005.NET CLR编程
  2. [云炬python3玩转机器学习笔记] 2-5机器学习相关的哲学思考
  3. iOS 用Swipe手势和动画实现循环播放图片
  4. 单片机c语言跑马灯实验报告,单片机跑马灯实验报告
  5. vm-tools install for linux
  6. Python 中的 classmethod 和 staticmethod 有什么具体用途?
  7. html和css设计网页实例,经典网页设计:30个创意的 CSS 应用案例
  8. 2014中国十大管理实践-世界经理人网站
  9. linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化
  10. 汇编/源操作数/目的操作数
  11. 基于Hexo和Github搭建博客
  12. rtx3070ti显卡什么水平 rtx3070ti显卡什么级别 rtx3070ti显卡怎么样
  13. Tensorflow2.3用SaveModel保存训练模型.pb等文件+opencvino转IR文件
  14. Julia 构建对角矩阵 diag matrix
  15. centos1-修改ip地址、更换密码
  16. 纯css3圆柱模板立体图
  17. 设计模式之过滤器模式(摘自菜鸟驿站)
  18. HZNU1883CCJ的直线化简
  19. 微信公众平台消息接口开发(30)大众点评商户信息团购及优惠券查询
  20. 路由与交换-华为eNSP-交换机上配置DHCP技术

热门文章

  1. 企业使用精诚CRMPM可以解决哪些问题?
  2. java 异步线程池_Java - 异步线程池
  3. 数据治理的概念、难点和最佳实践方法
  4. 奥本海默公司利用SOA架构部署取得开发投资回报
  5. update更新excel如何指定列为memo_Excel也能设计回写类报表
  6. Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9
  7. 这哪是NBA球场!简直就是黑科技实验室啊!
  8. 【逗老师带你学IT】PRTG自定义脚本获取H3C Loadbalance负载均衡链路状态
  9. 坚果PRO3搭载Android,意外!坚果Pro3喜提Android10操作系统更新
  10. 从开源框架细节的来分析网络模块的封装丨网络模块|Redis|skynet|多线程|单线程|reactor多核实现|IO多路复用