比较具有相同逻辑的 2 个源代码
Posted
技术标签:
【中文标题】比较具有相同逻辑的 2 个源代码【英文标题】:Comparing 2 source codes with same logic 【发布时间】:2016-10-06 19:31:57 【问题描述】:这是我在hackerearth 的“生命、宇宙和一切”的代码
为什么“我的解决方案”比“最佳解决方案”慢,即使逻辑 用的是一样的!
事实上,我认为我的逻辑应该更快,因为我在n!=42
时打印了答案,但“最佳解决方案”必须首先检查n==42
,然后在数组中插入元素(执行“else”部分)。
请告诉我为什么“最佳解决方案”更快。
my solution :-
#include <iostream>
using namespace std;
int main()
int n;
while(1)
scanf("%d",&n);
if(n!=42)
printf("%d\n",n);
else
break;
return 0;
Time Taken: 1.010669 seconds
---------------------------------------------------------
best solution:-
#include <iostream>
using namespace std;
int main()
int n,a[10001],i=0,j;
while(1)
cin>>n;
if(n==42)
break;
else
a[i++]=n;
for(j=0;j<i;j++)
cout<<a[j]<<endl;
return 0;
Time Taken: 1.004222 seconds
【问题讨论】:
这可能与刷新标准输出时的(特定于实现的)规则有关 1.输入是什么? 2. 你能发布你的测量代码吗? hackerearth 举办编程竞赛(网站),但没有透露它如何衡量我们的代码。下面是对更多信息的样本输出请访问hackerearth网站: - 782 796 272 344 108 168 847 268 973 95 429 797 687 689 209 603 410 385 770 481 934 742 926 911 875 690 273 102 955 505 271 553 435 跨度> 【参考方案1】:scanf 和 printf 在处理方面是极其昂贵的函数。他们必须解释格式字符串(你写“%d”的地方可能有各种各样的复杂格式占位符)。仅当这一项完成时,另一个解决方案可能已经完成了它的处理。 scanf函数的源代码有几百行代码,printf也是。
另一方面,在最佳解决方案中,编译器已经知道预期的类型,并且必须处理在运行时完成的更少计算,因此从输入字符串到整数的转换以及反之亦然更有效.
【讨论】:
嘿 早些时候我使用 cin 和 cout 进行输入和输出,但使用 printf 和 scanf 所花费的时间几乎相同。事实上我观察到 printf 和 scanf 更快【参考方案2】:尚未对其进行测试,但您的输出包含两倍于控制台的输出。
对于每个数字“最佳解决方案”打印,您也添加一个 \n
。
更多字符 = 更多时间来处理您的标准输出缓冲区。
【讨论】:
我也用 cout 做的,事实上 printf 更快!以上是关于比较具有相同逻辑的 2 个源代码的主要内容,如果未能解决你的问题,请参考以下文章
如何从 html 源代码中具有相同属性集和相同层次结构的 2 个元素中抓取单个元素(使用 python 的美丽汤)