在两次比较中运行一个循环的时间效率,而一次比较一次则循环两次

时间:2019-01-04 21:09:40

标签: performance time-complexity

标题似乎令人困惑,但是我的意思是,我将在代码中显示:

for x in array {
    if (x == 6)
       print("match")
    if (x == 8)
       print("match")
}

vs

for x in array {
    if (x == 6)
       print("match")
}
for x in array {
    if (x == 6)
       print("match")
}

我认为它们都是O(2n)或O(n),但我不是肯定的。如果出于某种原因,循环比比较需要更多的计算能力,那么我将是错误的。谢谢

1 个答案:

答案 0 :(得分:1)

这些循环中的每个循环的运行时间为O(n),因为您要访问n个元素中的每个元素恒定的次数(第一次访问一次,第二次访问两次),并且最多执行一次每个元素上的工作量不变。

Big-O表示法可测量一段代码的渐近运行时间,因此,说这两段代码都在时间O(n)上运行并不意味着它们需要花费相同的时间来完成。您必须使用特定的设置在特定的系统上进行测量,以查看哪种方法更快。我怀疑第一个版本会更快,因为它只能使列表中的一个通过。

话虽如此,我在尝试优化这样的代码时会很谨慎。首先要明确目的,如果发现这是性能瓶颈,请考虑对其进行修改。如果这会减慢整个程序的速度,则切换到数据的另一种表示形式(例如将所有内容存储在哈希表或平衡的BST中)的速度可能会更快,因为检查元素是否存在预期的成本为O(1 )或O(log n),分别针对这些容器类型。