Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 阶乘时间复杂度算法是否需要递归或堆栈?_Algorithm_Recursion_Big O_Time Complexity - Fatal编程技术网

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

Algorithm 阶乘时间复杂度算法是否需要递归或堆栈?,algorithm,recursion,big-o,time-complexity,Algorithm,Recursion,Big O,Time Complexity,我有一套元素。我需要生成这些元素的所有排列 我使用的算法的时间复杂度是O(n!),它是基于递归的。自然地,每个递归算法都可以使用无限循环和堆栈转换为非递归算法 是否可以在不使用递归或堆栈+循环等价的情况下生成所有置换?答案 阶乘时间复杂度算法是否需要递归或堆栈 一般来说是没有的,琐碎的。以一个代码为例,它简单地遍历从1到n的所有数字!: 至于 是否可以在不使用递归或堆栈+循环等价的情况下生成所有置换 答案是肯定的,你可以找到答案。根据您希望生成的顺序,有几种不同的VRA可用。以下是第一个答案中的

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

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

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

答案

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

一般来说是没有的,琐碎的。以一个代码为例,它简单地遍历从1到n的所有数字!:

至于

是否可以在不使用递归或堆栈+循环等价的情况下生成所有置换

答案是肯定的,你可以找到答案。根据您希望生成的顺序,有几种不同的VRA可用。以下是第一个答案中的一个示例:

从最右边的数字开始,向左移动一个位置,直到看到一个比相邻数字小的数字。然后将值中下一个数字放在那里,然后按递增顺序排列所有剩余的数字。这样做,直到没有更多的事情要做。稍微考虑一下,你就可以按照线性时间对数字进行排序

如前所述:
不,对于阶乘时间复杂度算法,递归和堆栈不是必需的

但当我读到你的帖子时,你似乎想问

有可能比O(n!)更快地生成n个元素的所有置换吗

答案也是:


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

对于“阶乘时间复杂度算法是否需要递归或堆栈”的回答通常是否定的。例如,一个代码只需迭代从1到n的所有数字即可!。至于“是否有可能在不使用递归或堆栈+循环等价的情况下生成所有置换?”您可以找到答案。@Rufflewind这可能是一个答案,没有评论:)@AdamStelmaszczyk:我是,但我觉得这个问题可能被认为与我已经链接的问题重复。@Rufflewind发布这样的问题的答案还是可以的。在这种情况下,我认为这不是重复,这里的问题与“如何有效地生成链表的所有可能排列?”不同。
for i from 1 to factorial(n):
    play("ni.mp3")