我目前正在研究教科书中的一些问题,关于Big-O符号,以及函数如何相互支配。
这些是我在书中看到的功能。
n²
n² + 1000n
n
(如果n
是奇数)
n³
(如果n
是偶数)
n
(如果n ≤ 100
)
n³
(如果n > 100
)
我试图找出#1占主导地位的哪些功能。我知道#1和#2简化为n²
,所以它不会支配#2。但是,分割功能(#3和#4)给我带来了麻烦。 #1仅在某个条件下支配该函数,而在另一个条件下,#1由另一个函数支配。那么这是否意味着,因为它并不总是支配它,它在技术上并不算作支配它?函数#1是否不支配这些函数中的任何函数,或者它对于所有奇数都是#3,对于所有数字都是#4?我认为它的方式是,#1不支配#2,只支配#3代表奇数,而且只有#4代表数字≤100。我是否在正确的轨道上?
感谢任何人提供的任何帮助。我正在努力向自己说明这一点。
答案 0 :(得分:1)
我不确定"支配"在你的情况下意味着。让我们说" f(n)
支配g(n)
"转换为f(n) ∈ O(g(n))
,其中O(g(n))
是最糟糕的案例复杂性。
所以我们应该首先计算最坏情况的复杂性:
n²
位于Θ(n²)
n² + 1000n
也位于Θ(n²)
n
(如果n
为奇数)n³
(如果n
为偶数)位于Θ(n³)
(仅选择出现在50的最差情况)随机选择n
)n
(如果n ≤ 100
)n³
(如果n > 100
)也在Θ(n³)
,因为Big-O依赖于渐近线({n
的大值{1}})。现在我们可以比较最坏情况下的复杂性,看看#1仅支配#2。
也许您希望将最坏情况复杂度更改为普通情况。但只有#3才有可能发生变化。
在计算(n³ + n) / 2
之后,我们注意到,即使#3的平均情况也在Θ(n³)
。
如果你看一下最好的情况,你会得到第一次改变,但也只能用于#3。这里最好的情况是Θ(n)
,所以这里#3由#1支配。
请注意,#4的最佳情况不是Θ(n)
,因为复杂性仅适用于n → ∞
,因此我们会忽略n < c₀
c₀
所有City city[10]; // declare an array of "City" objects, 10 in size
for(int i = 0; i < 10; i++){
city[i] = new City(); //changed to an array
}
的情况恒定。