O(n^2) 是否意味着算法将抛出循环 n^2 次?
Is O(n^2) means that algorithm will go throw loop n^2 times?
O(n^2) 是否意味着算法将抛出循环 n^2 次?
for i in range(n):
for j in range(n):
print(1)
然后如果我的代码低于 O(n^2 + 10) 意味着算法将抛出循环 n^2 + 10 次?
for i in range(n):
for j in range(n):
print(1)
for i in range(10):
print(1)
双循环要在第一个循环中走n个数字,在第二个循环中走n个数字,所以,正如你所说,速度是O(n^2)
。然而,+10 可以忽略不计,但是是 O(n) 这意味着它是线性的,随着 n 的线性增加,速度会变得更高。不是 n 越大越差
您通常会查看算法所用的最坏情况或平均情况时间。您提供的算法在每种情况下都采用 n^2 和 n^2 + 10 个步骤。但是有些算法的条件比较复杂,不太容易分辨。
Big O Notation 的发明是为了从上面限制算法 运行 时间。通常是针对最坏情况 运行 时间进行分析。这个想法是,主要是多项式或指数因子很重要,而常数并不那么重要。一个很好的例子是您提供的示例:
你可以说:f(n)=n^2 + 10 = O(n^2),因为 +10 并不重要,n^2 支配了 运行 时间。
O(n^2) 是否意味着算法将抛出循环 n^2 次?
for i in range(n):
for j in range(n):
print(1)
然后如果我的代码低于 O(n^2 + 10) 意味着算法将抛出循环 n^2 + 10 次?
for i in range(n):
for j in range(n):
print(1)
for i in range(10):
print(1)
双循环要在第一个循环中走n个数字,在第二个循环中走n个数字,所以,正如你所说,速度是O(n^2)
。然而,+10 可以忽略不计,但是是 O(n) 这意味着它是线性的,随着 n 的线性增加,速度会变得更高。不是 n 越大越差
您通常会查看算法所用的最坏情况或平均情况时间。您提供的算法在每种情况下都采用 n^2 和 n^2 + 10 个步骤。但是有些算法的条件比较复杂,不太容易分辨。
Big O Notation 的发明是为了从上面限制算法 运行 时间。通常是针对最坏情况 运行 时间进行分析。这个想法是,主要是多项式或指数因子很重要,而常数并不那么重要。一个很好的例子是您提供的示例: 你可以说:f(n)=n^2 + 10 = O(n^2),因为 +10 并不重要,n^2 支配了 运行 时间。