【发布时间】:2017-01-09 05:02:39
【问题描述】:
我有一个嵌套循环来查找 1 和 x 之间的所有可能的数字组合,每组 4 个,其中 a
当发现每个组时调用一个方法来对这些数字的总和进行简单的等价测试。
该循环确实有效并产生了预期的输出(这个特定 x 的一组数字),但是需要 12 秒以上才能找到这个答案,另外需要大约 5 秒来测试剩余的可能性,考虑到 x,这绝对是不好的值为
我尝试让外部循环迭代 a
改变这个循环有什么更好的方法?
for (a = 1; a < x; a++) {
for (b = a + 1; b < x; b++) {
for (c = b + 1; c < x; c++) {
for (d = c + 1; d < x; d++) {
check(a, b, c, d);
}
}
}
}
【问题讨论】:
-
你认为你检查了多少种组合?您认为每次组合检查花费多少时间是合理的?
-
你只是想计算每组四个数字的总和吗?我认为如果您对您在这里尝试做的事情进行更多解释,这可能会有所帮助。我想大部分优化机会都在
check()函数中,您在这里没有透露。 -
整个循环应该在一秒钟内运行。至于组合,我在循环中放了一个打印语句,我相信我得到了任何给定 x 的正确数字。如果需要,我可以添加方法代码,但它会检查是否 a+b+c+d && a * b * c * d == x,如果为真则打印这些数字。
-
您希望它在一秒钟内运行吗?如果 x 为 1000,则内部循环将迭代(999 次选择 4)次,除非我弄错了,否则超过 410 亿次。你需要一个非常快的处理器来做到这一点。
-
如果您希望您的计算在 1 秒内运行,那么您很可能需要一种完全不同于枚举和测试每个可能组合的方法。
标签: c for-loop optimization