Big o 有人请给我解释一下这两个java代码之间的复杂程度吗?我很困惑? for(int i=n,i>0;i/=2){ 对于(int j=1,j
外循环和中循环执行相同的次数,每个sqrt(n)。内循环执行n/2次。因为它们是嵌套的,所以可以将它们相乘,总共执行sqrt(n)*sqrt(n)*n/2个关键步骤。这等于n^2/2,当n接近无穷大时,限制为n^2,因此它在O(n^2)中函数的分类。当被问及函数属于哪一个族时,你实际上不只是取最大的N值,而是取渐近极限。这里是#2格式的可读性:Big o 有人请给我解释一下这两个java代码之间的复杂程度吗?我很困惑? for(int i=n,i>0;i/=2){ 对于(int j=1,j,big-o,Big O,外循环和中循环执行相同的次数,每个sqrt(n)。内循环执行n/2次。因为它们是嵌套的,所以可以将它们相乘,总共执行sqrt(n)*sqrt(n)*n/2个关键步骤。这等于n^2/2,当n接近无穷大时,限制为n^2,因此它在O(n^2)中函数的分类。当被问及函数属于哪一个族时,你实际上不只是取最大的N值,而是取渐近极限。这里是#2格式的可读性: for( int i = n; i > 0; i - -) { for( int j = 1; j < n; j *= 2 )
for( int i = n; i > 0; i - -) {
for( int j = 1; j < n; j *= 2 ) {
for( int k = 0; k < j; k++ ) {
// constant number C of operations
}
}
}
总共
00001
00010
00100
01000
10000
也就是2*N-1,或者O(N)
将其乘以i-loop范围N得到O(N^2)
有趣的问题
for( int i = n; i > 0; i --)
for( int j = 1; j < n; j *= 2 )
for( int k = 0; k < j; k++ )
action
00001
00010
00100
01000
10000
11111