如何加快程序执行速度

时间:2015-02-19 14:17:35

标签: c++ c

这是一个非常简单的问题,但不幸的是,我被困住了,不知道该怎么办。我的程序是一个简单的程序,它继续接受3个数字并输出3中最大的数字。程序一直运行直到用户输入一个字符。

正如tittle所说,我的问题是如何让它更快地执行(将有大量的输入数据)。可以使用任何类型的帮助,包括使用不同的算法或使用不同的功能或更改整个代码。

我在C ++ Standard方面经验不足,因此不了解不同库中可用的所有不同功能,所以请解释一下你的理由,如果你太忙,至少试试并提供一个链接。

这是我的代码

#include<stdio.h>
int main()
  {
    int a,b,c;
    while(scanf("%d %d %d",&a,&b,&c))
      {
         if(a>=b && a>=c) 
            printf("%d\n",a);
         else if(b>=a && b>=c) 
            printf("%d\n",b);
         else 
            printf("%d\n",c);
      }
    return 0;
  }

它的工作非常简单。 while循环将继续执行,直到用户输入一个字符。正如我之前解释的那样,该程序接受3个数字并输出最大的数字。这个代码没有其他部分,这就是全部。我试图尽可能多地解释它。如果你需要更多的东西,请问,(我会尽可能多地尝试)。

我正在使用CPP 4.9.2在互联网平台上编译(那里的内容是什么)

任何形式的帮助都将受到高度赞赏。提前致谢

修改

输入由计算机完成,因此输入没有延迟。

另外,我会接受c和c ++中的答案。

更新

我还想问一下,是否有任何通用的库函数或算法,或任何其他类型的建议(我们必须要做的事情和我们必须做的事情)才能加速执行(不仅仅是这段代码,但总的来说)。任何帮助,将不胜感激。 (很抱歉在没有提供任何参考资料的情况下提出这样一个尴尬的问题)

2 个答案:

答案 0 :(得分:6)

您的&#34;算法&#34;非常简单,我会使用max()函数编写它,因为它的风格更好。

但无论如何......

最耗费时间的是scanf。这是你的瓶颈。您应该编写自己的读取函数,该函数使用fread读取一个巨大的块并对其进行处理。您可以考虑异步执行此操作 - 但我不建议将其作为第一步(某些异步实现确实比同步实现慢)。

所以基本上你做了以下事情:

  1. 从文件中读取一个巨大的块到内存中(这是磁盘IO,所以这是瓶颈)
  2. 解析那个块并找到你的三个整数(注意块边界!前两个整数可能位于一个块内,第三个位于下一个块中 - 或者块边界在中间分割整数,所以让你的解析器只是抓住那些东西)
  3. 进行比较 - 与磁盘IO相比,运行得如此糟糕,因此无需改进

答案 1 :(得分:1)

除非您保证三个输入数字都不同,否则我担心让程序获得正确的输出。如上所述,除了输入和输出缓冲之外,几乎没有任何东西可以加速,并且可能通过使用自定义解析和格式化代码来加速十进制转换,而不是通用scanf和{{1 }}

现在,如果您收到输入值a = 5,b = 5,c = 1,您的代码将报告1是这三个值中最大的一个。更改&gt;比较&gt; =来解决这个问题。

您可以通过记住以前的结果来最小化比较次数。你可以这样做:

printf

这恰好进行了两次比较,找到d的值为int d; if (a >= b) if (a >= c) d = a; else d = c; else if (b >= c) d = b; else d = c; [then output d as your maximum]

您的代码至少使用两个,最多可能使用4.