我正在试图弄清楚算法的效率,我有点困惑。 只需要一些专家的想法来证明我的答案是正确的,或者引用我的某个地方来解释这是一个不在渐近主体中的元素。 (有许多资源,但我找不到关于集合元素的内容)
当我们说O(n ^ 2)是两个循环时,说:
n ^ 2是O(n ^ 3)
的元素
据我所知,大O是最糟糕的情况,欧米茄是最有效的案例。如果我们把它们放在图表上,那么n ^ 2的所有情况都是O(n ^ 3)的一部分,所以第一个不正确吗?
n ^ 3是欧米茄(n ^ 2)
的元素
关于第二个,它是不对的。因为omega(n ^ 2)的一些最好的情况并非在所有n ^ 3的情况下!
最后是
2 ^(n + 1)元素theta(2 ^ n)
我不知道如何衡量它!
答案 0 :(得分:4)
在这种情况下,大O,欧米茄,theta都是复杂的。正是这些复杂性的功能形成了你正在思考的集合。
实际上,具有复杂度O(n * n)的函数集是具有复杂度O(n * n * n)的函数的子集。简单地说,这是因为O(n * n * n)意味着复杂度小于c * n * n * n,因为n变为无穷大,对于某些常数c。如果一个函数的实际复杂度为3 * n * n + 7 * n,那么对于任何 c,其n为无穷大的复杂度明显小于c * n * n * n。因此,O(n * n * n)不仅仅是“三个循环”,而是“三个循环或更少”。
Ω是相反的。它是复杂性的下限,而c * n * n是n * n * n的平凡下界,因为n变为无穷大。
具有复杂度Θ(n * n)的函数集是具有复杂度O(n * n)和Ω(n * n)的函数的交集。例如。 3 * n没有复杂度Θ(n * n),因为它没有复杂度Ω(n * n),而7 * n * n * n没有复杂度Θ(n * n),因为它没有没有复杂度O(n * n)。
答案 1 :(得分:2)