我在练习算法,但总是混淆O(n!)之间的时间复杂度。和O(2^N)。我知道o(2^n)可以理解为从一个集合中选择或不选择一个项,这通常喜欢递归(或回溯?)情况但回溯问题有时也以O(n!)?
有人能用简单的语言解释一下吗?
最佳答案
大O符号并不产生精确的结果,而是通过指定一些上界函数来估计函数的增长为了表示这类函数的最相关的族,常用的术语有对数、线性、多态和指数。两个O(n!)O(2^n)属于指数增长范畴好吧!稍微快一点。
因此,由于外卖结论大O允许一些草率,偶尔有函数匹配更接近上限,但不同的作者可能使用任何一个术语来指代相同的算法。
在回溯问题上,每一步解的选择可能会受到前一步所做选择的限制,因此每一步中可能的选择的数量会按照阶乘模式减少一个。但不是所有回溯的情况都属于这一类,如果每个步骤中的解的选择与先前的步骤无关,则一些可能涉及复杂性O(2 ^ n)或甚至O(n^ n)。
编辑:修正了O(2^n),O(n!)和O(n^n)
关于algorithm - 当时间复杂度为O(n!)和O(2 ^ n)时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57304070/