我有一组元素。我需要生成这些元素的所有排列。
我使用的算法的时间复杂度是O(n!),它是基于递归的。当然,每个递归算法都可以使用无限循环和堆栈转换为非递归。
是否可以在不使用递归或堆栈+循环等效的情况下生成所有排列?
答案 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!)时间。这包括生成排列。