2017-10-17 115 views
2

什么是大O符号为两种算法:的两种算法(大O符号计算)运行时间复杂度

def foo1(n): 
    if n > 1: 
     for i in range(int(n)): 
      foo1(1) 
     foo1(n/2) 

def foo2(lst1, lst2): 
    i = 1 
    while i < max(len(lst1), len(lst2)): 
      j = 1 
      while j < min(len(lst1), len(lst2)): 
       j *= 2 
      i *= 2 

我认为foo1运行时间复杂度为O(n),因为在这种情况下,对于所有的n

T(N)= O(N)+ O(N/2)< = C * O(n)的(c是常数):如果我看到for循环我可以做到这一点。

是这样吗?

,我不能计算foo2的运行时间可以有一个人帮助我知道这样做。

感谢...

+1

'foo1(n/n)'这是一个错误吗? – DAle

+0

不,它是foo1(n/n)= foo1(1) –

+0

那你为什么不把它写成foo1(1)? – meowgoesthedog

回答

2
  1. 操作T(n)的数量等于T(n/2) + n。运用Master theorem我们得到T(n) = O(n)。简单来说有n + n/2 + n/4 + ... + 1操作是小于2*nO(n)

  2. 内部循环不依赖于外部循环,所以我们可以独立处理它们。 T(n) = O(log(maxlen) * log(minlen))

+0

我除了和你在foo2的运行时间一样感谢你,这是合乎逻辑的。但你能解释一下你把T(n/2)乘以2的方式是什么?谢谢。 –

+0

@MohammadJaber,这是我的错误,我会改变答案 – DAle

+0

行,但感谢你,我不认为主定理会帮助我,但现在我知道它会帮助我在这种情况下...谢谢 –