【问题标题】:Runtime of an if-statement with multiple conditions具有多个条件的 if 语句的运行时
【发布时间】:2016-12-09 21:10:44
【问题描述】:

假设有一个包含n个元素的数组A,以及一行代码中包含多个条件的if语句,例如:

for i = 2 to n
    if A[i] > m and A[i] - A[1] = EVEN
        then set m to A[i]

第二行的运行时间是 n-1,还是 2*(n-1),因为 if 语句有两个条件?

【问题讨论】:

    标签: sorting data-structures runtime theory


    【解决方案1】:

    一般而言,当您谈论运行时,您需要某种“成本模型”来谈论每个操作的“成本”。实际上,看到一个成本模型会进入您将在此处进入的详细程度是非常不寻常的 - 通常,您只是抽象出细节并说执行所有这些测试的成本是 O(1) (一些不依赖于输入大小的常数)而不是在那个精确的级别上计数。

    如果您要精确地计算一个级别,您可能还需要考虑数组查找的成本,无论事物是否短路,分支预测或错误预测对运行时的影响等...这部分解释了为什么很少有人真正谈论如此详细的事情。

    【讨论】:

    • 我同意:通常我们只会说每次迭代的条件是 O(1)。除了您指出的之外,在这种特殊情况下,检查第二个条件(即A[i] - A[1] = EVEN)的次数取决于第一个条件的结果以及语言是否允许短路评估。
    猜你喜欢
    • 2014-10-20
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多