【问题标题】:What is the best case time complexity of the following algorithm?以下算法的最佳情况时间复杂度是多少?
【发布时间】:2021-03-18 05:06:59
【问题描述】:

我得到以下函数,其中g 是在 Θ(n²) 中运行的其他函数。这个函数的最佳时间复杂度是多少?

void f(int n) {
  if(n % 2 == 0) {
    return;
  } else {
    g(n);
  }
}

很明显,如果 n 是偶数,函数会在恒定时间内运行,这让我说 Θ(1),但我认为这不是正确答案,因为我不认为这是定义渐近紧界的方式.

我在 SO 上查看了很多关于大 theta 表示法和最佳案例分析的类似问题,但它们都与长度为 n 输入的数组有关,而不仅仅是一个整数。我认为最好的案例分析在这些情况下是有意义的,因为它取决于数组中的元素。

但是,对于这个问题,除了g 之外,在确定复杂性方面似乎没有类似的“数组中的元素”,其复杂性是固定的。

这使我得出结论,实际的最佳情况时间复杂度是 Θ(n²)。我的理解正确吗?是 Θ(n²) 还是 Θ(1)?

【问题讨论】:

  • 最佳情况复杂度为 Θ(1),最坏情况复杂度为 Θ(n^2)。

标签: algorithm time-complexity complexity-theory


【解决方案1】:

您似乎对Θ 表示法的用法很困惑。

我不认为这是正确的答案,因为我不认为那是 如何定义渐近紧界。

Θ 表示法是一个渐近紧界,它可以定义为:

For any two functions f(n) and g(n), we have f(n) = Θ(g(n) if and only if
f(n) = O(g(n)) and f(n) = Ω(g(n)).

O 表示法给出一个渐近上界Ω 表示法给出一个渐近下界

在您提供的算法中,

 void f(int n) 
 {
     if(n % 2 == 0) return;
     else g(n);
 }

g(n) = Θ(n²).

算法的运行时间属于O(n²)Ω(1)我们不能使用Θ 符号来描述您的算法的运行时间 如果我们正在考虑所有可能的 n 值。 p>

但是,如果我们看一下算法的运行时间,当 n 可以取的唯一值是偶数时,这是 最好的情况,那么我们可以说在最好的情况下,算法的运行时间属于O(1)Ω(1)。因此,我们可以说算法的最佳情况复杂度是Θ(1)

请注意说之间的区别,

The running time of the algorithm is Θ(1). //Wrong in this case

The best case running time of the algorithm is Θ(1). //Correct in this case

类似地,如果我们在 n 唯一可以取的值是奇数时查看算法的运行时间,那么我们会发现 算法的最坏情况复杂度是Θ(n²)


希望对你有所帮助。

【讨论】:

  • 不。算法的最佳情况运行时间在 Θ(1) 和 Θ(n²) 之间交替,因此不能是其中任何一个。它是 Ω(1) 和 O(n²)。
  • @YvesDaoust 算法的运行时间在O(n²)和Ω(1)之间交替不是 最佳情况运行算法的时间在 Θ(1) 和 Θ(n²) 之间交替。算法的最佳运行时间发生在 n 为偶数且为 Θ(1) 时。
  • 这是你错的地方。对于偶数 n,运行时间是 Θ(1),也是 Ω(1) 和 O(1)。因此,最好的情况时间也是 perforce Ω(1)、Θ(1) 和 O(1)(最坏的情况也是如此)。对于奇数 n,将 1 替换为 n²。
  • 我确实拒绝了。它不是 O(1),因为对于奇数 n,它是 Ω(n²)。
  • @YvesDaoust 当n 是偶数时,我们不关心算法的最佳情况和最坏情况运行时间。同样,当n 为奇数时,我们不关心算法的最佳情况和最坏情况运行时间。不管n是什么,我们都不关心算法的最佳情况和最坏情况的运行时间。
【解决方案2】:

我不同意@aksingh 的回答。

从给定的,

  • n 是偶数时,所有最好情况、最坏情况和普通运行时间都是Θ(1),并且

  • n 为奇数时,所有最好情况、最坏情况和普通运行时间都是Θ(n²)

其实这三个时间没有区别(在渐近意义上),因为Θ

请务必注意,描述这些运行时间的函数不必是“单个表达式”。

如果您想获得不依赖于奇偶校验的结果,您可以写出最佳、最差和普通情况运行时间是Ω(1)O(n²)

为了说明,该图显示了一些假设的运行时间(红点)。在绿色和洋红色中,最好和最坏的情况是奇数n。蓝色,甚至是n

现在是灰色,最好的情况函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多