[英]Is there a way to optimize this C program in terms of run time
它的目的是打印所有直到第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");
}
当然可以。 只需打印预先计算的数字字符串即可。
#include <stdio.h>
int main()
{
puts("0,1,1,2,3,5,...");
return 0;
}
如果您需要优化整个操作,则需要考虑时间和空间的复杂性。 从现在开始,您可以考虑这些方法可以做的更好。
现在打印n
数字当然需要迭代,该迭代的时间复杂度为O(n)
。 有什么更好的方法吗? 关键是,如果您多次执行此操作,则可以通过将其存储在某个位置来摆脱添加。 但这不会为您带来更好的渐近时间复杂度改进-而是您将面临O(n)
空间复杂度-如果仅执行打印操作,这将是头疼的事情。 (当然,必须进行预计算)。
因此,是的,此解决方案足以实现您要执行的操作。
万一您需要扫描一些输入-那么我会要求您使用getchar
获取输入,然后从中形成数字(如果需要)。 如果您在SPOJ或竞争性编程判断服务器中考虑这一点,则这些往往会带来更好的结果。 (在大量输入情况下,重新开始时间比scanf
短-10 ^ 7等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.