我的函数是否在O(n)中运行?

时间:2017-10-08 20:20:59

标签: python time-complexity

我有一个函数来查找排序数组s中是否有数字加起来给定的总和x。我想知道这个函数的重要性是什么。我认为它在O(n)中运行,但我不确定。

功能:

def sumInside(s, x):
    # Two indices that will be compared
    l = 0
    r = len(s) - 1

    # Go through the array for the elements
    while l < r:
        if s[l] + s[r] == x:
            return True
        elif s[l] + s[r] < x:
            l += 1
        else:
            r -= 1
    return False

2 个答案:

答案 0 :(得分:3)

是的,O(n)最坏的情况

最糟糕的情况是,你的元素是最右边的(我必须一直向右递增),这将是n次。

如果它位于最左侧O(1),您可以在第一次尝试时找到它。当l = 0

让我们说理论上,平均情况x总是在中间,它需要n / 2次迭代,即O(n)

  • 最佳:O(1)

  • Avg:O(n)

  • 最差:O(n)

答案 1 :(得分:2)

两条经验法则:

  1. 对您的数据进行了多少次迭代?
  2. 每次迭代会发生什么?
  3. 第一个问题的答案是n。你有一个循环,它会遍历整个数据一次。

    第二个问题也很容易回答。您在每个循环中进行比较,这是一个恒定的时间操作。

    总的来说,在最坏的情况下,您的函数会以线性时间运行 - O(n)