有没有办法在运行时方面优化此C程序

时间:2018-03-12 15:13:29

标签: c linux performance performance-testing

其目标是将所有斐波那契数字打印到第93位

#include<stdio.h>

void main(){
  unsigned long long first=0,second=1,sum;
  printf("%llu,%llu",first,second);
  unsigned char hops=1;
  while (hops<93) {
    sum=first+second;
    printf(",%llu",sum);
    first=second;
    second=sum;
    hops++;
  }
  printf("\n");
}

2 个答案:

答案 0 :(得分:3)

当然,你可以。只需打印预先计算的数字串。

#include <stdio.h>
int main()
{
    puts("0,1,1,2,3,5,...");
    return 0;
}

答案 1 :(得分:2)

如果您需要优化整个操作,您需要考虑空间和时间复杂性。从这一点开始,你可以想到它们会有多好。

现在打印n数字将需要一个具有时间复杂度O(n)的迭代。有没有更好的方法呢?问题是,如果你多次这样做,你可以通过将其存储在某处来摆脱添加。但是,这不会给你提供更好的阿斯莫特时间复杂度改进 - 相反,你将面临O(n)空间复杂性 - 如果打印只是你做的事情,这将是一个过头。 (并且必须进行预先计算)。

所以是的,这个解决方案足以实现你想要做的事情。

如果您需要扫描某些输入 - 那么我会要求您使用getchar获取输入,然后从中形成数字(如果需要)。如果您在SPOJ或竞争性编程判断服务器中考虑这一点,这些往往会提供更好的结果。 (在大量输入案例中,时间再次小于scanf的时间 - 10 ^ 7等。