当时间复杂度为O(n!)和O(2 ^ n)时?

时间:2019-08-01 07:41:58

标签: algorithm time-complexity computer-science

我正在练习算法,但始终对O(n!)和O(2 ^ n)之间的时间复杂度感到困惑。我知道O(2 ^ n)可以理解为选择或不选择集合中的一项,通常喜欢递归(或回溯?)情况。但是回溯问题有时也标记为O(n!)?

有人可以用简单的语言解释一下吗?

2 个答案:

答案 0 :(得分:2)

2 ^ N:包含/排除每个元素。顺序没关系。

N !:遍历元素的每个排列。顺序很重要。

答案 1 :(得分:2)

Big O表示法不会产生确切的结果,而是通过指定一些上限函数来估计函数的增长。为了表示此类功能的最相关的族,通常使用对数,线性,多态和指数形式的术语。 O(n!)和O(2 ^ n)都属于指数增长类别。只是O(n!)增长更快。

总而言之,Big O可能会有些草率,有时有些函数会更接近上限,但不同的作者可能会使用任一个术语来指代相同的算法。

在回溯方面,每个步骤中解决方案的选择可能会受到前一步中所做选择的限制,因此,按照阶乘模式,每个步骤中可能的选择数量都会减少一个。但是并非所有回溯的情况都属于此类,并且如果每个步骤中解决方案的选择均与先前步骤无关,则可能涉及复杂度O(2 ^ n)甚至O(n ^ n)。

编辑:校正了O(2 ^ n),O(n!)和O(n ^ n)之间的增长关系