【发布时间】: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