【问题标题】:Worst case runtime in Big-Theta notationBig-Theta 表示法中的最坏情况运行时
【发布时间】:2016-10-09 21:45:40
【问题描述】:

以下代码的 Big-Theta 表示法中最坏情况下的运行时间是多少?该代码在删除最低分数后从作业分数列表中计算作业分数的平均值。

m := 1
for i := 2 to n
    if h_i < h_m then m := i
total := 0
for j := 1 to n
    if j != m then total := total + h_j
return total/(n − 1)

在最坏的情况下,这意味着最低分数位于最后一个位置。这意味着在第一个循环中,它将运行 n-1 次迭代。第一个循环的上限和下限分别为 O(n) 和 Ω(n)。我相信这意味着它的运行时间为 Θ(n)

第二个循环几乎是一样的,除了它是 n 次迭代。

我想知道整个程序的整体运行时间,我们是否像使用大 O 表示法一样使用 max(Θ(n),Θ(n)) = Θ(n),即 max (O(n), (O(1)) = O(n)?

我问了这个问题,因为据说我修改了上面的代码只在一个循环上运行:-

m := 1 ; total = h_1
for i := 2 to n
    if h_i < h_m then m := i
    total = total + h_i
total = total - h_m
return total/(n − 1)

此代码还运行 n-1 次迭代 => Θ(n)。现在这对我来说似乎很奇怪,因为显然第一个代码比第二个代码具有更长的运行时间,因为它有两个循环。这就是为什么我问使用 max (Θ(f(n)) , Θ(g(n)) 是否正确。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    您误以为 big-O/θ 符号可以告诉您运行时间。它没有,它告诉您运行时间将如何(渐近地)缩放为n 的函数。如果算法 1 在n 中线性增长,并且算法 2 的运行时间是算法 1 的两倍,那么算法 2 仍然具有线性增长。这就是我们忽略 big-O/θ 的任何缩放常数的原因。

    【讨论】:

      【解决方案2】:

      与大 O 表示法相同,去掉了常数因子。所以整个运行时是Θ(2n) = Θ(n)

      另外,有两个循环并不意味着更长的运行时间,因为循环可以更短或每次迭代执行的次数更少。您的第二个程序每次迭代执行的操作更多,因此总运行时间大致相同。

      【讨论】:

        【解决方案3】:

        你不会在迭代结束之前返回,这意味着你总是会遍历完整列表

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-21
          • 2012-05-11
          • 1970-01-01
          • 1970-01-01
          • 2015-07-10
          • 1970-01-01
          相关资源
          最近更新 更多