《数据结构与算法分析-C语言描述》习题2.6
《数据结构与算法分析-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相关推荐
- 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss
数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:https://p ...
- 算法 c语言实现 英文版 pdf,数据结构与算法分析++C语言描述++英文版++..pdf-得力文库...
数据结构与算法分析++C语言描述++英文版++....pdf General Ination 书名数据结构与算法分析 C语言描述 英文版 第2版 作者(美)韦斯著 页数512 出版社机械工业出版社 出 ...
- s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...
<数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...
- 数据结构(c语言版) 计算机科学丛书,数据结构与算法分析--C语言描述(原书第2版)(计算机科学丛书)...
摘要: 本书讨论数据结构和算法分析.数据结构主要研究组织大量数据的方法,而算法分析则是对算法运行时间的评估.随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益急切.可是,由于在输入 ...
- 《数据结构与算法分析—Java语言描述》pdf
下载地址:网盘下载 内容简介 编辑 "数据结构"是计算机专业的基础与核心课程之一,Java是现今一种热门的语言.本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Jav ...
- 数据结构与算法分析C++语言描述(第四版)图论学习记录
我对 9.3.1节中无权最短路径算法,进行了一点修改,对书中例子也进行了测试,发现居然也适用于有权最短路径求解. 对 赋权图最短路径求解,我仍然使用和 9.3.1节中求解无权图最短路径同样的方式,参见 ...
- c语言将数组的列项向左移动,【数据结构与算法分析——C语言描述】第六章:优先队列(堆)...
第六章:优先队列(堆) [TOC] 思考如下场景,老师布置了很多作业,现在你需要将作业打印出来,你将作业文件依照队列的形式放入待打印列表中,但此时,你希望最重要(或者是马上就要上交)的作业优先打印出来 ...
- 数据结构与算法分析——C语言描述
P1.1 选择问题,选择出第K大的数,并画出N为不同值的运行时间,K=N/2 毕业两年半,重写排序,感觉良好.代码使用冒泡排序,库函数clock计算大致运行时间. 1 // P1_1.cpp : De ...
- a lt b lt c c语言描述,《数据结构与算法分析――c语言描述》读后笔记 4
栈: 中缀到后缀的转换.我们只允许操作+,*,(,). 中缀表达式:a+b*c+(d*e+f)*g,后缀表达式:abc*+de*f+g*+ 程序如下,stack.h如上篇博文中所示: #include ...
最新文章
- 第八章 工厂方法模式
- 如何通过css控制内容显示顺序 第二行的内容优先显示
- it招聘的一些门道与招聘数据分析(持续更新)
- php post防止hash攻击,MyBB editpost.php脚本'posthash' 参数SQL注入漏洞
- js形参(parameter)和实参(argument)
- hibernate整合mysql配置文件_springboot整合hibernate配置
- qtableview选中第一行时表头会变色_超新颖的Word目录制作法,包你一看就会!【Word教程】...
- paip..net代码生成器使用总结
- Linux安装教程(超详细版)
- 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
- python爬虫--下载酷我音乐
- ubantu 终端屏幕查找字符串
- 高数_第3章重积分_三重积分的奇偶性
- 教你如何简单快速有效的添加微信好友
- 基于搜狗微信爬取微信公众号的文章
- IFS认证辅导,国际食品企业认证BRC和IFS起源和发展
- html5 input搜索框样式修改,修改input搜索框默认叉号的样式为自定义图片
- 启嘉春秋:《三字经》
- .bin文件 .hex文件和.s19文件区别
- 超级兔子升级天使 - XP/2003 完整升级补丁集(2007.10)