zoukankan      html  css  js  c++  java
  • 关于算法运行时间以及“管道”为什么引入

    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才可以读到回车,网上看到的,以后注意。

  • 相关阅读:
    try? try! try do catch try 使用详解
    Swift Write to file 到电脑桌面
    NSLayoutConstraint 使用详解 VFL使用介绍
    automaticallyAdjustsScrollViewInsets 详解
    Swift 给UITableView 写extension 时 报错 does not conform to protocol 'UITableViewDataSource'
    OC Swift中检查代码行数
    Swift中 @objc 使用介绍
    SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案
    Swift 中 insetBy(dx: CGFloat, dy: CGFloat) -> CGRect 用法详解
    求1000之内所有“完数”(注:C程序设计(第四版) 谭浩强/著 P141-9)
  • 原文地址:https://www.cnblogs.com/yizhaoAI/p/7042078.html
Copyright © 2011-2022 走看看