【问题标题】:Determining the number of steps in an algorithm确定算法中的步骤数
【发布时间】:2016-09-28 16:55:13
【问题描述】:

我正在浏览我的 Data Structures and Algorithms 笔记,并遇到了以下有关时间复杂度和大 O 表示法的示例: 左侧的列计算了在每一行。我不明白为什么第一个示例中的几乎所有行前面都有 2 的倍数,而其他两个示例没有。显然这不会影响结果 O(n),但我仍然想知道 2 来自哪里。

【问题讨论】:

  • 这看起来很奇怪。没有任何其他幻灯片/图片对我来说没有多大意义。也许这些照片中缺少一些东西。 (第一个也没有输入+输出描述)。唯一可能的解释是,与幻灯片不兼容的情况是,算法一是一起计算最大值和最小值。
  • 也许他们在中途意识到他们应该在谈论大 O;否则我认为没有理由 2
  • 即使他们会修剪一些 O 表示法的东西,对我来说也没有任何意义,变量增量(inc 计数器)超过 1 步 .
  • 应该在某处提供操作的定义。所以知道什么是操作,我们可以合理地计算数字

标签: algorithm time-complexity big-o pseudocode


【解决方案1】:

对此我只能找到一种解释:幻灯片作者的草率。

在适当的分析中,必须解释在什么时间对什么输入执行什么类型的操作(例如第 21 页上的this book)。如果没有这个,您甚至无法确定我们是否将 2 个数字的乘法算作 1 次运算或 2 次运算或其他什么?

这些幻灯片不一致。例如:

在 slide1 currentMax = A[0] 中进行 2 次操作。如果您将在数组中查找第 0 个元素作为 1 个操作并将其分配为另一个操作,那么这有点有意义。但在幻灯片 3 中,ns = s + X[i] 迭代需要 n 次操作。这意味着 s = s + X[i] 需要 1 次操作。我们只增加一个计数器也是有道理的。

但是这完全是相互矛盾的,因为a = X[0]是2个操作是没有意义的,而a = a + X[0]你做的更多只需要1个。

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 2011-12-31
    • 2020-12-12
    • 2023-03-03
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多