algorithm - Big-Theta 表示法中的最坏情况运行时

标签 algorithm

以下代码在 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)) 是否正确。

最佳答案

您陷入了一个常见的错误,认为大 O/θ 表示法告诉您运行时间。它不会,它会告诉您运行时将如何(渐进地)作为 n 的函数进行扩展。如果算法 1 在 n 中线性增长,而算法 2 的运行时间是算法 1 的两倍,则算法 2 仍然呈线性增长。这就是我们忽略 big-O/θ 的任何缩放常数的原因。

关于algorithm - Big-Theta 表示法中的最坏情况运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948864/

相关文章:

python - 带有 Numpy 的 LSTM,找不到确定的算法

algorithm - 在保留顺序的情况下找到由给定数字组成的最大 K 位数字

algorithm - 国际象棋引擎中的 slider 生成

java - 如何将知识陈述/关系从文本文件映射到(有向)图

javascript - Angular 中的分隔符

javascript - 每次将元素插入数组时播放音频

java - 在 2D int 数组算法中收集重复值的索引

提取外部 SVG 路径的算法

arrays - 对具有相同属性的对象进行分组

c++ - 我们如何有效地将平面图像转换为交错图像 (C++)?