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


    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
    ", min, max, (double)s/n);

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

    对于C语言

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

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

    对于C++

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

  • 相关阅读:
    MySQL 数据类型
    MySQL的相关概念介绍
    遍历Map的四种方法
    Hadoop在win7下部署的问题
    Hbase之shell操作
    问题-"Record not found or changed by another user"
    问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误
    教程-CXGRID之cxDropDownEdit密密
    问题-delphi在某电脑(win7)上是界面超乱 DPL
    教程-Delphi调用C# WEBSERVICE(二)
  • 原文地址:https://www.cnblogs.com/yizhaoAI/p/7042078.html
Copyright © 2020-2023  润新知