gpt4 book ai didi

c - 算法优化同时

转载 作者:行者123 更新时间:2023-11-30 17:27:03 25 4
gpt4 key购买 nike

这里有两个代码给出相同的结果:代码1

#include <stdio.h>
int main(int argc, char **argv)
{
int res, nbMax = 0, i;
unsigned long j;
for (i = 1; i <= 1000000; i++) {
j = i;
int nb = 1;
while (j != 1) {
nb++;
if (j % 2 == 0) {
j = j / 2;
} else {
j = 3 * j + 1;
}
}

if (nb > nbMax) { // <-
nbMax = nb;
res = i;
}
}
printf("longest: %d (%d)\n", res, nbMax);
return 0;
}

代码2:

#include <stdio.h>
int main(int argc, char **argv)
{
int res, nbMax = 0, i;
unsigned long j;
for (i = 1; i <= 1000000; i++) {
j = i;
int nb = 1;
while (j != 1) {
nb++;

if (nb > nbMax) { // <-
nbMax = nb;
res = i;
}
if (j % 2 == 0) {
j = j / 2;
} else {
j = 3 * j + 1;
}
}

}
printf("longest: %d (%d)\n", res, nbMax);
return 0;
}

区别在于注释 block (if)。第一次是在第二个 while 循环之外,第二次是在里面。第一个算法应该比第二个更快,因为该范围在第二个算法中执行了更多次。然而我在第一个中得到了 1 秒的执行时间,在第二个中得到了 0.9 的执行时间......第二个算法如何比第一个算法更快?

编辑。我在 MinGW(4.7.1) Windows 8.1 intel i7-4500 上工作

最佳答案

我无法在这里重现它,但这取决于您正在使用的平台和编译器。根据编译器中使用的优化算法,代码的某些部分可能会发生变化。如果某些内容不影响您的代码,则可能会退出循环,甚至在编译时的优化阶段从代码中省略。您可以在循环优化中查看编译器优化技术以获得一些见解。

关于c - 算法优化同时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26537707/

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