C/C++中算法运行时间的三种计算方式(By 虚怀若谷)
算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法。
- 事后统计的方法:该方法利用计算机内部的计时功能,可以精确到毫秒级别,这种方法有两个缺点:一是必须依据算法先编写好程序;二是运行程序的软硬件环境易喧宾夺主,掩盖算法本身的优劣。但是有时候在同一台机器上,想对不同算法进行比较或是想知道一个程序究竟需要运行多长时间,该方法就有了用武之地了。本文主要介绍三种事后计算算法运行时间的方式,具体的可以参见源代码,即time_t/time、timeb/ftime、clock/CLOCKS_PER_SEC。
- 事前分析的方法:该方法考虑如下因素(a)算法选用策略;(b)问题规模;(c)书写程序的语言级别;(d)编译程序产生机器代码质量;(e)机器执行指令的速度。然后对算法进行大O分析。此方法不在本文讨论范围之内。
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/-->#include <stdio.h>#include <tchar.h>#include <cstdlib>#include <iostream>#include <sys/timeb.h>#include <ctime>#include <climits>using namespace std;int _tmain(int argc, _TCHAR* argv[]){//计时方式一time_t start = 0,end = 0;time(&start);for(int i=0; i < numeric_limits<int>::max(); i++){double circle = 3.1415962*i; //浮点运算比较耗时,循环最大整数次数}time(&end);cout << "采用计时方式一(精确到秒):循环语句运行了:" << (end-start) << "秒" << endl;//计时方式二struct timeb startTime , endTime;ftime(&startTime);for(int i=0; i < numeric_limits<int>::max(); i++){double circle = 3.1415962*i; //浮点运算比较耗时,循环最大整数次数}ftime(&endTime);cout << "采用计时方式二(精确到毫秒):循环语句运行了:" << (endTime.time-startTime.time)*1000 + (endTime.millitm - startTime.millitm) << "毫秒" << endl;//计时方式三clock_t startCTime , endCTime; startCTime = clock(); //clock函数返回CPU时钟计时单元(clock tick)数,还有一个常量表示一秒钟有多少个时钟计时单元,可以用clock()/CLOCKS_PER_SEC来求取时间for(int i=0; i < numeric_limits<int>::max(); i++){double circle = 3.1415962*i; //浮点运算比较耗时,循环最大整数次数}endCTime = clock();cout << "采用计时方式三(好像有些延迟,精确到秒):循环语句运行了:" << double((endCTime-startCTime)/CLOCKS_PER_SEC) << "秒" << endl;cout << "综合比较上述三种种计时方式,方式二能够精确到毫秒级别,比方式一和三都较好。此外在Windows API中还有其他的计时函数,用法都大同小异,在此就不做介绍了。" << endl;system("pause");return 0;}
C/C++中算法运行时间的三种计算方式(By 虚怀若谷)相关推荐
- oracle if=,oracle中if/else的三种实现方式详解
1.标准sql规范 1.单个IF IF v=... THEN END IF; 2.IF ... ELSE IF v=... THEN ELSE t....; END IF; 3.多个IF IF v=. ...
- Java中List集合的三种遍历方式(全网最详)
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- MyEclipse网站服务器,MyEclipse中web服务器的三种配置方式
初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...
- 二叉树的前序中序后序三种遍历方式及递归算法介绍
二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...
- Android中夜间模式的三种实现方式
参考:https://www.jianshu.com/p/f3aaed57fa15 在本篇文章中给出了三种实现日间/夜间模式切换的方案: 使用 setTheme 的方法让 Activity 重新设置主 ...
- python中字符串输出的三种简单方式
python字符串输出的三种简单方式 第一种: 用'+'号进行字符串的拼接,但只限于字符串,不能进行其他类型的拼接.但是可以进行强制类型转换(字符串的强制转换为str(名字)),再用加号进行拼接. 比 ...
- Matlab中计算程序运行时间的三种方法
经常我们需要计算我们程序到底运行多长时间,这样可以比较程序的执行效率.当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了. 下面我们就说说MATLAB中计算程序运行时间的三种 ...
- Matlab中计算程序运行时间的三种方法,以及获取系统时间的方法
注意:三种方法由于使用原理不一样,得到结果可能有一定的差距! 1.tic和toc组合(使用最多的) 计算tic和toc之间那段程序之间的运行时间,它的经典格式为 tic .......... toc ...
- JAVA中集合去重的三种基本方式
在学习JAVA的过程中,总是会碰见对集合中的元素进行去重的要求,在这里总结了三种基本的去重方法. 主要的思想就是:先取元素,后进行比较,最后放回去. 案例如下: package eliminate_d ...
最新文章
- 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)
- RNA-Seq Transcriptome Profiling Identifies CRISPLD2 as a Glucocorticoid Responsive Gene that Modulat
- 认证篇——单向散列函数
- Oracle linux R5-U7中YUM 源配置
- stimulsoft入门教程:分层报表(下)
- 无盘服务器 cpu占用,顺网科技网维大师程序占CPU资源多的解决过程
- C++深拷贝与浅拷贝以及写时复制
- 敏捷开发般若敏捷系列之四:如何推广敏捷(上)(无我,无人,无众生)
- SPSS数据录入【SPSS 007期】
- Jersey入门教程
- 一个有意思的在线绘图(像Flash) - zas 的flash blog |闪客,RIA - 歪酷博客 Ycool Blog
- Image.Save 方法
- 四大名著丨折射中国人性的四面镜子
- 跨省游恢复!酒店行业怎么利用小程序抓住机会,应该做哪些?
- linux查看cpu核数和内存指令
- [hdu 6355] Fireflies
- linux 下shell中if的“-e,-d,-f”是什么意思
- 全力加速,绝对实力!从Q3财报看华米科技的逆势而为
- linux 打印4 6照片,linux_2.6.30.4_Makefile_1--显示打印信息
- 西南科技大学城市学院计算机考试试题,西南科技大学城市学院考试试卷高数答案.doc...
热门文章
- 怎么用excel汇总?
- 树--树的轴对称翻转
- 长虹z1Android2.0,颠覆国产智能手机力作 金长虹Z1登场
- 三级文明的代码_文明6作弊码介绍 文明6作弊代码秘籍一览
- 解决pip网速太慢而安装失败的问题
- [人工智能-深度学习-9]:神经网络基础 - 常见loss损失函数之均分误差MSE、绝对值误差MAE、平滑平均绝对误差Huber
- mysql动态SQL用法
- Android-框架-Dagger2-Dagger2从入门到放弃再到恍然大悟
- #输入大圆和小圆半径,输出圆环面积
- 王者s19服务器维护到什么时候,王者荣耀维护几点结束 王者荣耀s19赛季开始时间新英雄介绍 王者荣耀3月31日更新内容汇总...