Java 如何确定给定的函数是否为O(n)?
在我的测试中,我得到了以下问题: 以下哪项是O(n)中的Java 如何确定给定的函数是否为O(n)?,java,data-structures,time,big-o,Java,Data Structures,Time,Big O,在我的测试中,我得到了以下问题: 以下哪项是O(n)中的 a)n+lgn b) n+2n c) n+n^2 d) 1000n+4500lgn+54n 我知道O(n)的时间复杂度取决于元素的数量,因此随着元素数量的增加,完成一个操作所需的时间也会增加。根据这种逻辑,a和c的时间复杂度是O(n)吗?考虑O(n)的定义,即对于某些函数f(n)必须有两个正常数,c和k,这样c>0,k,n>=k,以及0=k,考虑O(n)的定义,对于某些函数f(n),必须有两个正常数,c和k,这样c>0,k>0,n>=k,
a)n+lgn
b) n+2n
c) n+n^2
d) 1000n+4500lgn+54n
我知道O(n)的时间复杂度取决于元素的数量,因此随着元素数量的增加,完成一个操作所需的时间也会增加。根据这种逻辑,a和c的时间复杂度是O(n)吗?考虑O(n)的定义,即对于某些函数f(n)必须有两个正常数,
c
和k
,这样c>0
,k
,n>=k
,以及0=k
,考虑O(n)的定义,对于某些函数f(n),必须有两个正常数,c
和k
,这样c>0
,k>0
,n>=k
,和0=k
,这样0 O(n)表示给定函数的最大时间复杂度为n^1或小于该值,如log(n)等。因此a、b和d可以是O(n)。不是c,因为c包含n^2,所以可以说它是O(n^2)。O(n)表示给定函数的最大时间复杂度为n^1或更小,如log(n)等。所以a、b和d可以是O(n)。不是c,因为c包含n^2,所以可以说它是O(n^2)。
0 <= f(n) <= cn
0 <= n + lg(n) <= cn
0 <= 2 + lg(2) <= c * 2
0 <= 2 + 1 <= 2c
0 <= 3 <= 2c
0 <= 3/2 <= c
0 <= 4 + lg(4) <= c * 4
0 <= 4 + 2 <= 4c
0 <= 6 <= 4c
0 <= 6/4 <= c
0 <= 3/2 <= c .. take a look at that, it doesn't matter how large n becomes, c is 3/2
0 <= f(n) <= cn
0 <= n + n^2 <= cn
0 <= 2 + 2^2 <= c*2
0 <= 2 + 4 <= 2c
0 <= 6 <= 2c
0 <= 3 <= c .. so IF this is O(n), c is at least 3
0 <= 4 + 4^2 <= 4c
0 <= 4 + 16 <= 4c
0 <= 20 <= 4c
0 <= 20/4 <= c
0 <= 5 <= c .. last time c was 3, now its 5 ... as n increases, c is not constant!