Python代码片段的大O时间复杂性

Python代码片段的大O时间复杂性,python,big-o,Python,Big O,我对Python相当陌生,所以我仍然不太擅长确定某些程序的大O时间复杂性。我想寻求一些帮助。下面是一些代码片段,我很难知道什么是大O,我认为什么是大O: 代码1:O(n) 代码2:我真的不知道这里 def bar(x,i,j,y): if j >= i: foo = (i+j) // 2 if x[foo] == y: return foo elif x[foo] > y: return bar(x,i,f

我对Python相当陌生,所以我仍然不太擅长确定某些程序的大O时间复杂性。我想寻求一些帮助。下面是一些代码片段,我很难知道什么是大O,我认为什么是大O:

代码1:O(n)

代码2:我真的不知道这里

def bar(x,i,j,y):
   if j >= i:
      foo = (i+j) // 2
      if x[foo] == y:
         return foo
      elif x[foo] > y:
         return bar(x,i,foo-1,y)
      else:
         return bar(x,foo+1,j,y)
   else:
      return -1
代码3:O(m)

如果你愿意的话,请留下一些关于寻找类似于这些代码片段的大型程序的提示。 任何帮助都将不胜感激。谢谢大家!

代码1 设N为
N
的长度。 此代码将是
O(N)
,但它不会做任何事情,因为内部for循环会在
范围(0,0)
上迭代

代码2 设
N
x
的长度。 假设
i
j
在列表
x
的索引范围内。 最坏的情况是
y
不在
x
中,
j-i
尽可能大。这将需要大约
O(j-i)
的时间,这不超过
O(N)
。因此,该过程平均需要
O(N)
或更少的时间

代码3 如果b
char
take
O(1)
可能是这样,但我不这么认为。它可能需要
O(n)
,因此算法是
O(mn)

对于一个简单的算法,只需手动计算循环。 如果算法中存在递归,使用一种方程并计算它应该迭代多少次可能会有所帮助。
这里有一个相关的问题:

Hmmm,那么第一个代码的时间复杂度是恒定的吗?还是仍然是O(N)?仍然是O(N),因为您仍然循环
len(N)
def bar(x,i,j,y):
   if j >= i:
      foo = (i+j) // 2
      if x[foo] == y:
         return foo
      elif x[foo] > y:
         return bar(x,i,foo-1,y)
      else:
         return bar(x,foo+1,j,y)
   else:
      return -1
def count(a,b):
   # Let len(a) = m
   # Let len(b) = n
   count = 0
   for char in a:
      if char in b:
         count += 1
   return count