gpt4 book ai didi

算法效率——如果需要更多比较,部分展开循环是否有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:43 24 4
gpt4 key购买 nike

如何判断在一个迭代中放置两个额外的赋值是昂贵的还是设置一个 if 条件来测试另一个东西?在这里我详细说明。问题是生成并打印斐波那契数列的前 n 项,其中 n>=1。我在 C 中的实现是:

#include<stdio.h>
void main()
{
int x=0,y=1,output=0,l,n;
printf("Enter the number of terms you need of Fibonacci Sequence ? ");
scanf("%d",&n);
printf("\n");
for (l=1;l<=n;l++)
{
output=output+x;
x=y;
y=output;
printf("%d ",output);
}
}

但是“如何用计算机解决它”一书的作者说它效率低下,因为它为生成的单个斐波那契数使用了两次额外的分配。他建议:

a=0
b=1
loop:
print a,b
a=a+b
b=a+b

我同意这样更有效,因为它始终保持 a 和 b 相关,并且一次分配生成一个数字。但是它一次打印或提供两个斐波那契数。假设问题是生成奇数项,我们会怎么做?作者建议设置一个测试条件来检查 n 是否为奇数。通过在每次迭代中添加 if 测试,我们不会失去减少分配数量的 yield 吗?

最佳答案

我认为作者的建议非常糟糕,甚至在一本针对初级程序员的书中提出这一点。 (编辑:平心而论,这本书最初出版于 1982 年,那时候的编程普遍比现在低级得多。)

99.9% 的代码不需要优化。尤其是在像这样混合了极其廉价的操作(整数算术)和非常昂贵的操作(I/O)的代码中,优化廉价部分完全是浪费时间。

只有在需要从硬件中榨取每一点性能时,才应在时间关键型代码中考虑像这样的微优化。

当您确实需要它时,了解几个选项中哪个选项表现最好的唯一方法是测量。即便如此,结果可能会随着处理器、平台、内存配置的不同而发生变化...

关于算法效率——如果需要更多比较,部分展开循环是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8171141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com