BIG(O)时间复杂度

时间:2018-08-29 09:45:53

标签: time-complexity

以下代码的时间复杂度是多少?

1)

function(values,xlist,ylist):

     sum =0 
     n=0 

    for r from 0 to xlist:
       for c from 0 to ylist:
         sum+= values[r][c]  
         n+1
    return sum/n

2)

function PrintCharacters():
    characters= {"a","b","c","d"}

  foreach character in characters
     print(character)

根据我的说法,第一代码的复杂度为O(xlist * ylist),第二代码的复杂度为O(n)。

这对吗?

1 个答案:

答案 0 :(得分:0)

Big O符号,用于描述函数的渐近行为。基本上,它告诉您函数的增长或下降速度

例如,当分析某种算法时,可能会发现完成大小为n的问题所花费的时间(或步数)是由

给出的
T(n) = 4 n^2 - 2 n + 2

如果我们忽略常量(这是有意义的,因为它们取决于程序所运行的特定硬件)和增长较慢的术语,我们可以说“ T(n)”以n ^ 2的顺序增长并写: T(n)= O(n ^ 2)

对于形式定义,假设f(x)和g(x)是在实数的某个子集上定义的两个函数。我们写

f(x) = O(g(x))

(或者f(x)= O(g(x)),对于x->无限更精确),并且仅当存在常量N和C使得

|f(x)| <= C|g(x)| for all x>N

从直觉上讲,这意味着f的增长速度不会快于g

如果a是某个实数,我们写

f(x) = O(g(x)) for x->a

当且仅当存在常数d> 0且C满足以下条件

|f(x)| <= C|g(x)| for all x with |x-a| < d

对于您的情况,应该是

O(n) as |f(x)| > C|g(x)|

来自http://web.mit.edu/16.070/www/lecture/big_o.pdf的引用

 for r from 0 to xlist:  // --> n time
       for c from 0 to ylist: // n time
         sum+= values[r][c]  
         n+1

}

function PrintCharacters():
    characters= {"a","b","c","d"}
 foreach character in characters --> # This loop will run as many time as there are characters suppose n characters than it will run time so O(n)
    print(character)
  

Big O表示法在值非常大时给出了一个假设   将运行n次,而内部循环运行n次

     

假设n-> 100大于总n ^ 2 10000次运行时间