Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_Data Structures_Big O_Asymptotic Complexity - Fatal编程技术网

Algorithm 不同的渐近符号之间有什么区别?

Algorithm 不同的渐近符号之间有什么区别?,algorithm,data-structures,big-o,asymptotic-complexity,Algorithm,Data Structures,Big O,Asymptotic Complexity,我对渐近符号真的很困惑。据我所知,Big-O表示最差的情况,omega表示最佳情况,theta表示平均情况。然而,我总是看到大O在任何地方都被使用,即使是在最好的情况下。例如,在以下链接中,请参见表格,其中提到了不同排序算法的时间复杂性- 在表中的任何地方,无论是最佳情况、最坏情况还是平均情况,都使用大O表示法。那么其他两个符号有什么用?我们在哪里使用它呢?大O表示上限,而不是最坏的情况!没有专门用于最坏情况/最佳情况的符号。你所说的例子都有大O,因为它们都是给定值的上界。我建议你再看一看你从

我对渐近符号真的很困惑。据我所知,Big-O表示最差的情况,omega表示最佳情况,theta表示平均情况。然而,我总是看到大O在任何地方都被使用,即使是在最好的情况下。例如,在以下链接中,请参见表格,其中提到了不同排序算法的时间复杂性-


在表中的任何地方,无论是最佳情况、最坏情况还是平均情况,都使用大O表示法。那么其他两个符号有什么用?我们在哪里使用它呢?

大O表示上限,而不是最坏的情况!没有专门用于最坏情况/最佳情况的符号。你所说的例子都有大O,因为它们都是给定值的上界。我建议你再看一看你从中学习基础知识的那本书,因为了解这一点非常重要:)

编辑:回答您的疑问-因为通常情况下,我们会为我们的最高性能而烦恼,即当我们说,我们的算法在最佳情况下以O(logn)执行时,我们知道在给定情况下,其性能不会比对数时间差。这是我们通常寻求减少的上界,因此我们通常提到大O来比较算法。(更不用说我们从来没有提到过另外两个)

O(…)
的基本意思是“不比…”慢(很多)。
它可用于所有三种情况(“最坏情况不慢于”,“最佳情况不慢于”,等等)

欧米茄正好相反:你可以说,有些东西不会比……快得多。同样,它可以用于所有三种情况。与
O(…)
相比,这并不重要,因为告诉某人“我确信我的程序不会比你的快”并不值得骄傲

θ是一个组合:它(或多或少)和“…”一样快,而不仅仅是慢/快

据我所知,Big-O表示最差的情况,omega表示最佳情况,theta表示平均情况

。Omicron表示(渐近)上界,omega表示下界,θ表示紧界,紧界是上界和下界。如果一个算法的上下限不同,那么复杂度就不能用θ表示

上界、下界、紧界的概念与最佳、平均、最坏情况的概念是正交的。您可以分析每种情况的上限,也可以分析最坏情况的不同边界(以及上述情况的任何其他组合)

渐近界始终与表达式中的变量集有关。例如,
O(n)
n
有关。除了
n
之外,最好的、一般的和最坏的情况都会出现。例如,如果
n
是元素的数量,则不同的情况可能来自元素的顺序、唯一元素的数量或值的分布

然而,我总是看到大O在任何地方都被使用,即使是在最好的情况下

这是因为上界几乎总是描述算法时最重要和最有趣的上界。我们很少关心下限。就像我们很少关心最好的案例一样


下限有时在描述已被证明具有特定复杂性的问题时有用。例如,证明了所有通用比较排序算法的最坏情况复杂度为
Ω(n logn)
。如果排序算法也是
O(n logn)
,那么根据定义,它也是
Θ(n logn)
Big-O
符号在渐近相等方面类似于
=

例如,如果您看到以下内容:


x=O(x^2)
它确实说了
x有两个东西混在一起:大O,ω,θ,是纯粹的数学构造。例如,O(f(N))是小于c*f(N)的函数集,对于某些c>0,对于所有N>=某些最小值N0。根据这个定义,n=O(f(n^4)),因为n≤ n^4。100=O(f(n)),因为100是的。我可能错了。我真的很困惑。为什么在任何地方,我们都使用大O符号,而不是θ或ω?