我不太理解主要项的概念以及如何使用大O来确定时间复杂度。例如,对于N(100N + 200N^3)+ N^3,它的主要项是什么?如果有人能够解释一下,那将非常有帮助。
主导项是随着N的增大而变得最大(即占据支配地位)的项。
例如:
N(100N + 200N^3) + N^3
(100 * N^2) + (200 * N^4) + N^3
令 f(N) = 100N^2 + 200 N^4 + N^3
。随着 N
的增加,f(N)
的值被 200 N^4
项所主导。即使 N^4
项的系数小于低阶项的系数,这种情况也是成立的。
g(N) = N^2 + 4N
。当N = 1000
时,我们得到g(1000) =10^6 + 4000
,这大约是10^6
,因为一百万加上(几)千仍然是大约一百万。因此,N^2$
项支配了低阶项。即使低阶项的系数很大,在g(N) = N^2 + 10^{100} N
中,N^2
项也支配了线性项,只是在这种情况下,使二次项超过线性项所需的N
值更大。但随着N
趋近于无穷大,我们可以通过其主导项来近似一个函数。f(N)
可以表示为O(N^k)
,其中k
是主导项的指数。在你的例子中,我们可以说f(N) = O(N^4)
。这种符号会忽略低阶项和主导项系数,因为它们通常在比较不同算法的运行时间时是无关紧要的。