是否存在大O和大θ不同的算法?我发现它们在同一时间非常相似和令人困惑。
答案 0 :(得分:7)
我认为这里的一部分混乱源于算法没有“大O”或“大-Theta”的事实。 O和Θ表示法用于描述函数的长期增长率,而不是算法。当你听到有人说“二进制搜索是O(log n)”之类的东西时,他们真正说的是“二进制搜索的运行时是O(log n)”或“二进制搜索的最坏情况运行时”。长度为n的输入为O(log n)。“
这可能令人困惑的另一个原因是一个函数可能是许多不同函数的大O.例如,函数f(n)= n是O(n),但它也是O(n 2 ),O(n 3 ),O(2 < sup> n )等。这源于big-O表示法的正式定义,即f(n)= O(g(n))if(直观地)长期f(n)从上面以g(n)的某个常数倍为界。这意味着我们不一定能说出某个函数运行时的“大”O,因为可能有无限多的函数可能适合该法案。
我们可以说如下:如果函数的运行时是Θ(f(n)),那么函数的运行时也是O(f(n))。这是从Θ符号的定义得出的。另一方面,反过来不一定是真的;如果函数具有运行时O(f(n)),则不一定是函数的运行时为Θ(f(n))的情况。我们可以使用像二进制搜索这样的例子 - 二进制搜索在时间O(log n)中运行,但它的运行时也是O(n)和O(n 2 ),因为它们是较弱的边界。然而,二元搜索的运行时间不是Θ(n),也不是Θ(n 2 )或Θ(2 n )。
答案 1 :(得分:1)
你可以将大O视为渐近上界。并且有一个大的欧米茄为渐近下界。
如果大O和大欧米茄相同,那就是大Theta。
例如,您可以考虑一种算法来查找长度为n的无序序列中的最大数字。该算法非常简单,它检查数字的编号并将当前最大值存储在变量中。在最坏的情况下,你必须检查序列中的每个值(它是无序的,最大值是在最后),所以大的Omega = n。现在你可以考虑上限,它也可以是n。但是例如n平方也是一个有效的上界或n!等