“最佳情况表现Θ(1) - >运行时间≠Θ(log n)”是否有效?

时间:2015-03-30 05:23:38

标签: performance big-o time-complexity complexity-theory big-theta

这是一个论证,证明算法的运行时间不能被视为Θ(f(n)),而应该是O(f(n))

E.g。关于二元搜索的问题:Is binary search theta log (n) or big O log(n)

MartinStettner的response更令人困惑。

考虑*-case表演:

最佳表现:Θ(1)
平均情况表现:Θ(log n)
最坏情况表现:Θ(log n)

然后他引用 Cormen,Leiserson,Rivest:“算法简介”

  

当我们说“运行时间是O(n ^ 2)”时,我们的意思是最坏情况下的运行时间(n的函数)是O(n ^ 2)...

这是否表明running timeworst-case running time这两个词是同义词?

此外,如果running time引用具有自然输入f(n)的函数,则必须有Θ类包含它,例如Θ(f(n)),对吧?这表示只有在非常精确地知道运行时间时才有义务使用O表示法(即只知道上限)。

2 个答案:

答案 0 :(得分:0)

当您编写O(f(n))时,表示算法的运行时间超出了函数c*f(n),其中c是常量。这也意味着您的算法可以比c*f(n)少得多的步骤完成。我们经常使用Big-O表示法,因为我们希望包含算法比我们指示的更快完成的可能性。另一方面,Theta(f(n))表示算法始终以c*f(n)步骤完成。二进制搜索为O(log(n)),因为它通常会在log(n)步骤中完成,但如果您获得幸运,则可以完成一步(最佳情况)。

答案 1 :(得分:0)

如果我读到有关运行时间的话,我总是感到困惑。

对我来说,运行时间是需要在计算机上执行算法的时间。这可能在很多方面有所不同,因此是一件复杂的事情。

所以我认为算法的复杂性是一个更好的词。

现在, 复杂度(在大多数情况下)是最坏情况下的复杂性。如果你知道最坏情况的上限,你也知道它只会在其他情况下变得更好。

所以,如果你知道,存在一些(可能是微不足道的)情况,你的算法只执行一些(常数)步骤和停止,你不必关心下限,所以你(正常) )使用大的上限 - O或小 - o符号。

如果您巧妙地进行计算,也可以使用Θ表示法。

但请注意:所有复杂性仅适用于他们所附带的案件。这意味着:如果你做出像“输入是最好的情况”这样的假设,这会影响你的计算以及由此产生的复杂性。在二进制搜索的情况下,您发布了三种不同的复杂性的复杂性。 您可以通过说:“二进制搜索的复杂性在O(log n)中进行概括,因为Θ(log n)表示“Ω(log n)O(log n)”和O(1)O(log n)的一部分。

总结一下: - 如果您知道复杂性的非常精确的函数,则可以使用Θ - 符号表示复杂性 - 如果要获得整体上限,则必须使用O - 表示法,直到所有输入情况的下限与上限没有区别。 - 在大多数情况下,您必须使用O - 表示法,因为算法太复杂而无法获得接近的上限和下限。