《数据结构与算法分析-C语言描述》([url=http://users.cis.fiu.edu/~weiss/#dsaac2e]Data Structures and Algorithm Analysis in C[/url])习题2.6
该题要求计算几个循环的复杂度,并用程序计算出程序的执行时间。我在linux下的c程序如下:

/* exercise 2.6  in <data structures and algorithm in c>*/#include <stdio.h>#include <sys/time.h>#include <math.h>

#define MAXINPUT 260#define STEP (MAXINPUT/20)#define ZOOMIN 100000000

int Fun1(int n){  int sum = 0;  int i;

  for(i = 0; i < n; i++)    sum++;  return sum;}int Fun2(int n){  int sum = 0;  int i,j;

  for(i = 0; i < n; i++)    for(j = 0; j < n; j++)      sum++;

  return sum;}int Fun3(int n){  int sum = 0;  int i,j;

  for(i = 0; i < n; i++)    for(j = 0; j < n*n; j++)      sum++;  return sum;}int Fun4(int n){  int sum = 0;  int i,j;

  for(i = 0; i < n; i++)    for(j = 0; j < i; j++)      sum++;  return sum;}int Fun5(int n){  int sum = 0;  int i,j,k;

  for(i = 0; i < n; i++)    for(j = 0; j < i*i; j++)      for(k = 0; k < j; k++)    sum++;  return sum;}int Fun6(int n){  int sum = 0;  int i,j,k;

  for(i = 0; i < n; i++)    for(j = 0; j < i*i; j++)      if(j%i == 0)    for(k = 0; k < j; k++)      sum++;  return sum;}int GetSpendTime(int (* f)(int ), int n){  struct timeval StartTimer,EndTimer;  double SpendTime;  double NPow3,NPow4,NPow5,NPow4LogN;

  NPow3 = pow(n,3);  NPow4 = pow(n,4);  NPow5 = pow(n,5);  NPow4LogN = pow(n,4)*log(n);  gettimeofday(&StartTimer,NULL);  (*f)(n);  gettimeofday(&EndTimer,NULL);  SpendTime = EndTimer.tv_sec - StartTimer.tv_sec +(EndTimer.tv_usec - StartTimer.tv_usec)/1000000.0;  printf("N=%d,SpendTime=%.6f,T/N3=%.6f,T/N4=%.6f,T/N5=%.6f,T/N4logN=%.6f\n",     n,SpendTime,SpendTime*(ZOOMIN/NPow3),SpendTime*(ZOOMIN/NPow4),     SpendTime*(ZOOMIN/NPow5),SpendTime*(ZOOMIN/NPow4LogN));  return 0;}

int main(void){  int i;  for(i = MAXINPUT/4; i < MAXINPUT; i+=STEP)    GetSpendTime(Fun5,i);  /*  GetSpendTime(Fun5,20);*/  return 0;}

输出结果为:
N=65,SpendTime=0.497344,T/N3=181.099317,T/N4=2.786143,T/N5=0.042864,T/N4logN=0.667438
N=78,SpendTime=1.194641,T/N3=251.740800,T/N4=3.227446,T/N5=0.041378,T/N4logN=0.740799
N=91,SpendTime=2.600523,T/N3=345.093296,T/N4=3.792234,T/N5=0.041673,T/N4logN=0.840690
N=104,SpendTime=5.029540,T/N3=447.124275,T/N4=4.299272,T/N5=0.041339,T/N4logN=0.925691
N=117,SpendTime=9.153871,T/N3=571.540753,T/N4=4.884964,T/N5=0.041752,T/N4logN=1.025784
N=130,SpendTime=15.069480,T/N3=685.911698,T/N4=5.276244,T/N5=0.040586,T/N4logN=1.083966
N=143,SpendTime=24.084789,T/N3=823.634886,T/N4=5.759685,T/N5=0.040278,T/N4logN=1.160561
N=156,SpendTime=37.684631,T/N3=992.637029,T/N4=6.363058,T/N5=0.040789,T/N4logN=1.260047
N=169,SpendTime=55.917730,T/N3=1158.482343,T/N4=6.854925,T/N5=0.040562,T/N4logN=1.336269
N=182,SpendTime=82.133201,T/N3=1362.399844,T/N4=7.485713,T/N5=0.041130,T/N4logN=1.438452
N=195,SpendTime=115.332322,T/N3=1555.418291,T/N4=7.976504,T/N5=0.040905,T/N4logN=1.512707
N=208,SpendTime=159.712267,T/N3=1774.795297,T/N4=8.532670,T/N5=0.041022,T/N4logN=1.598615
N=221,SpendTime=217.001617,T/N3=2010.417005,T/N4=9.096910,T/N5=0.041162,T/N4logN=1.685186
N=234,SpendTime=337.556033,T/N3=2634.500602,T/N4=11.258550,T/N5=0.048113,T/N4logN=2.063774
N=247,SpendTime=408.777333,T/N3=2712.663639,T/N4=10.982444,T/N5=0.044463,T/N4logN=1.993405

此程序中计算第五个函数func5的运行时间,并将此时间分别除以(N^3),(N^4),(N^5)和(N^4*long(N))。因为N^5的值很大,而执行时间通常比较小,我又使用了一个放大系数ZOOMIN使得除法运算的结果不至于误差太大。还需要注意的是,如果换成其他的函数,可以根据需要调节ZOOMIN和MAXINPUT的值,使得程序运行结果能更准确的反映该函数的算法执行复杂度。
从输出结果来看,T/N5的值趋向于一个比较固定的数,所以func5应该是O(N^5)左右,这个算法可以用来验证自己计算的算法复杂度是否正确。
可惜的是,上面的算法只能用于unix/linux下,windows下测量函数段的执行时间可以使用其他的方法,例如:[url]http://stackoverflow.com/questions/2215744/c-programming-how-can-i-get-execution-time-of-a-program-in-milliseconds[/url]

《数据结构与算法分析-C语言描述》习题2.6相关推荐

  1. 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss

    数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:https://p ...

  2. 算法 c语言实现 英文版 pdf,数据结构与算法分析++C语言描述++英文版++..pdf-得力文库...

    数据结构与算法分析++C语言描述++英文版++....pdf General Ination 书名数据结构与算法分析 C语言描述 英文版 第2版 作者(美)韦斯著 页数512 出版社机械工业出版社 出 ...

  3. s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...

    <数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...

  4. 数据结构(c语言版) 计算机科学丛书,数据结构与算法分析--C语言描述(原书第2版)(计算机科学丛书)...

    摘要: 本书讨论数据结构和算法分析.数据结构主要研究组织大量数据的方法,而算法分析则是对算法运行时间的评估.随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益急切.可是,由于在输入 ...

  5. 《数据结构与算法分析—Java语言描述》pdf

    下载地址:网盘下载 内容简介 编辑 "数据结构"是计算机专业的基础与核心课程之一,Java是现今一种热门的语言.本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Jav ...

  6. 数据结构与算法分析C++语言描述(第四版)图论学习记录

    我对 9.3.1节中无权最短路径算法,进行了一点修改,对书中例子也进行了测试,发现居然也适用于有权最短路径求解. 对 赋权图最短路径求解,我仍然使用和 9.3.1节中求解无权图最短路径同样的方式,参见 ...

  7. c语言将数组的列项向左移动,【数据结构与算法分析——C语言描述】第六章:优先队列(堆)...

    第六章:优先队列(堆) [TOC] 思考如下场景,老师布置了很多作业,现在你需要将作业打印出来,你将作业文件依照队列的形式放入待打印列表中,但此时,你希望最重要(或者是马上就要上交)的作业优先打印出来 ...

  8. 数据结构与算法分析——C语言描述

    P1.1 选择问题,选择出第K大的数,并画出N为不同值的运行时间,K=N/2 毕业两年半,重写排序,感觉良好.代码使用冒泡排序,库函数clock计算大致运行时间. 1 // P1_1.cpp : De ...

  9. a lt b lt c c语言描述,《数据结构与算法分析――c语言描述》读后笔记 4

    栈: 中缀到后缀的转换.我们只允许操作+,*,(,). 中缀表达式:a+b*c+(d*e+f)*g,后缀表达式:abc*+de*f+g*+ 程序如下,stack.h如上篇博文中所示: #include ...

最新文章

  1. 第八章 工厂方法模式
  2. 如何通过css控制内容显示顺序 第二行的内容优先显示
  3. it招聘的一些门道与招聘数据分析(持续更新)
  4. php post防止hash攻击,MyBB editpost.php脚本'posthash' 参数SQL注入漏洞
  5. js形参(parameter)和实参(argument)
  6. hibernate整合mysql配置文件_springboot整合hibernate配置
  7. qtableview选中第一行时表头会变色_超新颖的Word目录制作法,包你一看就会!【Word教程】...
  8. paip..net代码生成器使用总结
  9. Linux安装教程(超详细版)
  10. 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
  11. python爬虫--下载酷我音乐
  12. ubantu 终端屏幕查找字符串
  13. 高数_第3章重积分_三重积分的奇偶性
  14. 教你如何简单快速有效的添加微信好友
  15. 基于搜狗微信爬取微信公众号的文章
  16. IFS认证辅导,国际食品企业认证BRC和IFS起源和发展
  17. html5 input搜索框样式修改,修改input搜索框默认叉号的样式为自定义图片
  18. 启嘉春秋:《三字经》
  19. .bin文件 .hex文件和.s19文件区别
  20. 超级兔子升级天使 - XP/2003 完整升级补丁集(2007.10)

热门文章

  1. scala:对象object
  2. ubuntu下修改时区和时间
  3. EMC VMAX的磁盘构成,fast policy(重要)
  4. wdcp支持两种安装方式
  5. MapReduce二次排序
  6. iOS之 开发常用到的宏定义
  7. percona-toolkit工具包的使用教程
  8. 更新MySQL复制 自动监控脚本
  9. 中西方对时间的差异_中西方时间观念差异 英文
  10. python高维数据_t-SNE高维数据可视化(python)