【发布时间】:2014-06-05 13:30:40
【问题描述】:
我有一些问题正在努力寻找大 O 来解决。让我困惑的是 (N*N) 个问题:
for (i=1, sum=0, i <= N; i++) {
for (j=1; j <= N*N; j++) {
sum++;
}
}
我猜它是 O(N^3),因为 (N*N) 可能代表两个循环。
for (i=1, sum=0, i <= N; i++) {
for (j=1; j <= N*N; j++) {
for (k=1; k<=j; k++) {
sum++;
}
}
}
如果是这样,那么这个将是 O(N^4)?
【问题讨论】:
-
N*N是n^2。这是一个非常基本的参考:rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation -
在第二个例子的最里面的循环中,它使用了
k的限制,这是j的函数,所以我想说答案可能更接近O(N^3*log(N))跨度> -
@TrippKinetics
1+2+3+...+n=O(n²),所以我怀疑那里有log。 -
是的,但请看第二个示例的最内层循环。它不使用
1, 2, 3... n。它使用1, 2, 3... jj去1, 2, 3... n^3。 -
Duke 是对的,记住 Big-Oh 是上限。方程的上限为 N^5(内环 = N^2,中环 = N^2 外环 = N。)特里普,记住循环第一次运行时是 1,然后是 2,然后是 3。一路高达 2N。
标签: math big-o computer-science