任何人都可以解释大O对大欧米茄vs大Theta?
可能重复:
Big Theta符号 – 大Theta代表什么?
我想我理论上理解这一点,但是我很难理解这三者的应用。
在学校里,我们总是用Big O来表示algorithm的复杂性。 例如,泡泡分类是O(n ^ 2)。
现在读了更多的理论后,我得到了大哦不是唯一的措施,至less有两个有趣的。
但是这是我的问题:
大O是上界,大Omega是下界,Big Theta是两者的组合。 但是这在概念上意味着什么? 我明白图表上的含义。 我已经看到了一百万的例子。 但是algorithm的复杂性意味着什么呢? 一个“上限”或“下限”如何混合?
我想我只是没有得到它的应用程序。 我知道如果乘以某个常数c,如果在某个值n_0 f(x)大于g(x)之后,f(x)被认为是O(g(x))。 但是这实际上意味着什么呢? 为什么我们将f(x)乘以某个值c? 地狱,我认为与大O符号倍数并不重要。
大O符号和它的亲戚,大的Theta,大的Omega,小的o和小的omega是一种关于一个函数如何在一个极限点上行为的方法(例如,当接近无限时,而且当接近0等),而没有多说这个function。 它们通常用来描述algorithm的运行空间和时间,但也可以在其他math领域中看到渐近行为。
半直观的定义如下:
如果“从某点开始”,函数g(x)被认为是O(f(x)),g(x)低于c * f(x),其中c是某个常数。
其他的定义是类似的,Theta要求g(x)在f(x)的两个常数倍数之间,要求g(x)> c * f(x)的欧米茄,小的版本要求所有的常量。
但为什么有趣的说,例如,一个algorithm的运行时间为O(n ^ 2)?
这很有趣,主要是因为在理论计算机科学中,我们最关心的是algorithm如何处理大量input。 这是事实,因为在小input时,algorithm运行时间可能因实现,编译,硬件以及其他在理论上分析algorithm时并不真正感兴趣的事情而大不相同。
然而,增长率通常取决于algorithm的性质,为了改进它,您需要对您正在尝试解决的问题有更深入的了解。 例如,sortingalgorithm就是这种情况,你可以在O(n ^ 2)中得到一个简单的algorithm(Bubble Sort),但为了将其改进为O(n log n),你需要一个真正的新思想如在“合并sorting”或“堆sorting”中介绍的那样。
另一方面,如果你有一个运行在5n秒内的algorithm,另外一个运行在1000n秒内的algorithm(例如n = 3的长时间打哈欠与发射间隔的差别),当你开始n = 100亿,规模的差异似乎不那么重要。 如果你有一个algorithm需要O(log n),那么你必须等待log(1000000000000)= 12秒,也许乘以某个常量,而不是几乎317,098年,而不pipe它有多大是,是一个完全不同的规模。
我希望这会使事情变得更清楚。 祝你好运!