大O和功能统治

时间:2015-06-27 17:34:09

标签: big-o time-complexity complexity-theory

我目前正在研究教科书中的一些问题,关于Big-O符号,以及函数如何相互支配。

这些是我在书中看到的功能。

  1. n² + 1000n

  2. n(如果n是奇数)
    (如果n是偶数)

  3. n(如果n ≤ 100(如果n > 100

  4. 我试图找出#1占主导地位的哪些功能。我知道#1和#2简化为,所以它不会支配#2。但是,分割功能(#3和#4)给我带来了麻烦。 #1仅在某个条件下支配该函数,而在另一个条件下,#1由另一个函数支配。那么这是否意味着,因为它并不总是支配它,它在技术上并不算作支配它?函数#1是否不支配这些函数中的任何函数,或者它对于所有奇数都是#3,对于所有数字都是#4?我认为它的方式是,#1不支配#2,只支配#3代表奇数,而且只有#4代表数字≤100。我是否在正确的轨道上?

    感谢任何人提供的任何帮助。我正在努力向自己说明这一点。

1 个答案:

答案 0 :(得分:1)

我不确定"支配"在你的情况下意味着。让我们说" f(n)支配g(n)"转换为f(n) ∈ O(g(n)),其中O(g(n))是最糟糕的案例复杂性。

所以我们应该首先计算最坏情况的复杂性:

  • 位于Θ(n²)
  • n² + 1000n也位于Θ(n²)
  • n(如果n为奇数)(如果n为偶数)位于Θ(n³)(仅选择出现在50的最差情况)随机选择n
  • 的所有案例的百分比
  • n(如果n ≤ 100(如果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 } 的情况恒定。