【发布时间】:2013-09-11 04:58:34
【问题描述】:
我正在编写一个遍历 n 位数字的每个排列的代码段。例如,如果 n = 3,我想遍历以下每个元素:
0, 0, 0
...
0, 1, 0
...
1, 0, 0
...
2、3、4
...
9、9、9
使用嵌套的 for 循环很容易编写代码:
for(digit1 0 to 9)
for(digit2 0 to 9)
for(digit3 0 to 9)
但我想将其概括为 n 位数。例如,如果 n = 10,我现在需要 10 个嵌套的 for 循环。
我已经考虑过这一点,并意识到可以使用递归来解决这个问题(深度优先搜索一棵树,每个节点有 10 个子节点,从 0 到 10,并在深度 n 处停止)。但我的目标是高性能,所以我不想因为开销而使用递归。我还有什么其他选择?
【问题讨论】:
-
我知道您正在寻找高性能,但请仔细阅读,因为答案有一些很好的信息需要考虑。 stackoverflow.com/questions/72209/recursion-or-iteration
-
是什么让你认为使用 for 循环(复杂度 O(10^n))比使用 trie(logn 的一些复杂度)更有效??
-
为什么你认为递归很慢?您是否进行了基准测试?
-
你可以设置一个数字数组(或其他东西),然后像图灵一样上下移动。它是否会比递归快得多还有待观察。
-
为了记录,您正在通过一组数字,而不是通过排列。排列将类似于 123 213 132 321 312 231
标签: c++ performance for-loop recursion tree