关于算法运行时间以及“管道”为什么引入

1. 关于算法运行时间以及“管道”为什么引入。

我以前毕设比较不同译码算法的时候,直接用一个clock()来比较不同算法运行速率。现在想起来,这是及其错误了!

《算法竞赛入门经典》P64

一个程序中计时函数clock()的使用。该函数返回程序目前为止运行的时间。这样,在程序结束之前调用此函数,便可获得整个程序的运行时间。这个时间除以常数CLOCKS_PER_SEC之后得到的值以“秒”为单位。

提示2-17:可以使用time.h和clock()函数获得程序运行时间。常数CLOCKS_PER_SEC和操作系统相关,请不要直接使用clock()的返回值,而应总是除以CLOCKS_PER_SEC。

输入“20”,按Enter键后,系统瞬间输出了答案820313。但是,输出的Time used居然不是0!其原因在于,键盘输入的时间也被计算在内——这的确是程序启动之后才进行的。为了避免输入数据的时间影响测试结果,可使用一种称为“管道”的小技巧:在Windows命令行下执行echo 20|abc,操作系统会自动把20输入,其中abc是程序名 。如果不知道如何操作命令行,请参考附录A。笔者建议每个读者都熟悉命令行操作,包括Windows和Linux。

2. 输入输出框架

在做CCF的模拟题的题一,我常用的一个方法是

int n;
cin>>n;
int A[n];

int i;
for(i=0;i<n;i++){
    cin>>A[i];
}

其实这样往往遇到一个问题,如果输入没有先输入n这一个步骤,而是任意输入的数字流,就不知所措了。

在《算法竞赛入门指导》P66,有如下

while(scanf("%d", &x) == 1)
{
s += x;
if(x < min) min = x;
if(x > max) max = x;
n++;
}
printf("%d %d %.3f\n", min, max, (double)s/n);

可以用while(。。。!=0)之类的判断吧。

对于C语言

还记得scanf的输入格式吗?空格、TAB和回车符都是无关紧要的,所以按Enter键并不意味着输入的结束。那如何才能告诉程序输入结束了呢?

提示2-19:在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键,即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。

对于C++

cin会在空格位置就停止的,getline才可以读到回车,网上看到的,以后注意。

时间: 2024-10-13 01:34:13

关于算法运行时间以及“管道”为什么引入的相关文章

计算C++算法运行时间

#include <iostream> #include <ctime> using namespace std; int main() { clock_t start,finish; //先行后列 start=clock(); //执行内容     //....... finish=clock(); //totaltime=(double)()/CLOCKS_PER_SEC; cout<<"先行后列遍历时间为:"<<finish-sta

基于等高线算法绘制几何管道,并显示数据

本文主要是基于数值着色与等高线特征,用数值绘制3D等高线网格图.以下是如何利用LightningChart绘制几何管道图并显示数据,以及提供相应的源代码. 此图是结果图例,显示温度冷热程度及数据 以下是绘制此图的源代码 LightningChartUltimate _chart = new LightningChartUltimate(); _chart.BeginUpdate(); //Create Surface mesh _mesh = new SurfaceMeshSeries3D(v,

FP Tree算法原理总结

在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集,因此提高了算法运行的效率.下面我们就对FP Tree算法做一个总结. 1. FP Tree数据结构 为了减少I/O次数,FP Tree算法引入了一些数据结构来临时存储数据.这个数据结构包括三部分,如下图所示: 第一部分是一个项

中值算法

引言 一个数据集合的中值(Median)通常是很一个很有价值的统计指标,由于它对异常数据不敏感,所以一般会比平均值(Mean)更能体现数据集合数据的“平均水平”.然而,对于无序数据序列求中值在实现上却没有求平均值那样简单优美的O (N)复杂度的算法.最容易想到的做法是先对数据进行排序,然后取中点的值,然而这种做法的时间复杂度是O(NlogN).有没有更快的算法呢? 本文介绍两种更快的算法:第一种是利用快速排序原理的准确的随机选择算法:第二种是一种近似算法,所获得的值虽然可能不是很精确,但一般会比

找到图中最小有向圈的一个时间复杂度为O(mn)的算法

本文介绍一种在n个点 m条边并且没有负长度有向圈的有向图中找到最小有向圈的一个O(mn)时间复杂度的算法,这一结果是对于之前的最好的时间界O(mn+n^2 loglogn)的一个改进. 此算法首先在O(mn)时间复杂度内找到了具有最小平均长度λ^*的圈,因此它选择了点势函数来使得节约成本是λ^*或者更大.之后,该算法解决了所有点对之间的最短路问题,但是接下来将注意力集中于长度最多为nλ^*的最短路,将每一个源点的最短路时间的计算加速到O(m),这样所有的点时间的计算就到了O(mn). 同时,本文

算法复杂度解析

摘要       本文论述了在算法分析领域一个重要问题--时间复杂度分析的基础内容.本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导.从而帮助大家从本质上认清这个概念. 前言       通常,对于一个给定的算法,我们要做 两项分析.第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式.数学归纳法等.而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度.算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程

书籍-算法

第1章 基础1.1 基础编程模型1.2 数据抽象1.3 背包丶队列和栈1.4 算法分析第3章 查找3.1 符号表3.1.1 API3.1.2 有序符号表3.1.3 无序链表实现3.1.4 有序数组的二分查找3.1.5 对二分查找的分析3.2 二叉查找树3.2.1 get()3.2.2 put()3.2.3 分析3.2.4 floor()3.2.5 rank()3.2.6 min()3.2.7 deleteMin()3.2.8 delete()3.2.9 keys()3.2.10 性能分析3.3

我有一个梦想,希望每一位提到算法的人,不再立即紧皱眉头

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书 --异步小编 多年来,我有一个梦想,希望每一位提到算法的人,不再立即紧皱眉头,脑海闪现枯燥的公式.冗长的代码:希望每一位阅读和使用算法的人,体会到算法之美,像躺在法国普罗旺斯小镇的长椅上,呷一口红酒,闭上眼睛,体会舌尖上的美味,感受鼻腔中满溢的薰衣草的芳香-- 打开算法之门 瑞士著名的科学家N.Wirth教授曾提出:数据结构+算法=程序. 数据结构是程序的骨架,算法是程序的灵魂. 在我

检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置. 为了完成这两个任务,目标检测模型分为两类.一类是two-stage,将物体识别和物体定位分为两个步骤,分别完成,这一类的典型代表是R-CNN, fast R-CNN, faster-RCNN家族.他们识别