Python代码片段的大O时间复杂性
我对Python相当陌生,所以我仍然不太擅长确定某些程序的大O时间复杂性。我想寻求一些帮助。下面是一些代码片段,我很难知道什么是大O,我认为什么是大O: 代码1:O(n) 代码2:我真的不知道这里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
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
如果bchar
takeO(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