以下代码的时间复杂度是多少?
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)。
这对吗?
答案 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次运行时间