阶乘时间复杂度算法需要递归或堆栈吗?

时间:2014-12-31 13:49:30

标签: algorithm recursion big-o time-complexity

我有一组元素。我需要生成这些元素的所有排列。

我使用的算法的时间复杂度是O(n!),它是基于递归的。当然,每个递归算法都可以使用无限循环和堆栈转换为非递归。

是否可以在不使用递归或堆栈+循环等效的情况下生成所有排列?

2 个答案:

答案 0 :(得分:1)

答案

  

阶乘时间复杂度算法需要递归或堆栈

一般来说是 no ,非常简单。例如,一个代码可以简单地遍历从1到 n 的所有数字!:

for i from 1 to factorial(n):
    play("ni.mp3")

至于

  

是否可以在不使用递归或堆栈+循环等效的情况下生成所有排列?

答案是,你可以找到答案here。根据您希望生成的顺序,有几种不同的可用选项。这是第一个答案中的一个例子:

  

从最右边的数字开始,向左移动一个位置,直到看到小于其邻居的数字。比你在那里放置下一个数字的数字,并在它之后按顺序排列所有剩余的数字。这样做直到没有其他事可做。仔细考虑一下,您可以按照数字的线性时间对数字进行排序。

答案 1 :(得分:1)

之前回答:
不,阶乘时间复杂度算法不需要递归和堆栈。

但是当我阅读你的帖子时,看起来你想问一下

  

是否有可能比O(n!)生成n个元素的所有排列?

答案也是:

因为有n! n个元素的不同排列,每个保存或显示或使用 all n做任何事情的算法!排列,至少需要O(n!)时间。这包括生成排列。