时间复杂度的明确数学定义(极其易懂)
国内外很多人把O()当运算符和把 Θ \Theta Θ与时间复杂度的定义弄乱了,对学习者造成了极大的困扰。
1. O()表示法表示的是取多项式的高阶或者同阶或者等阶来比较:
请注意pay a attention,这个O()叫做大O表示法,它不是一个运算符,也就是说不是一个函数比如O(f(n))就返回一个值,这是一个一整套的说法,必须配上等号和另一项才有意义。
(个人很不喜欢这个表示法,严重混淆了算符和等于号)
比如
1.单独写出来
O
(
n
3
)
O(n^3)
O(n3)是多少,这个是没有意义的,因为它的定义不是一个算符。所以我们一般说的那个复杂度,也是一个简称
2.T(n) = O(f(n)) 表示的是f(n)的阶数
≥
\ge
≥T(n)
严格的数学定义如下(我表示很像$\sigma $ ~ $ \epsilon$语言,不想看第二眼)
2. 又因为高阶常常没意义,所以O()常常与 Θ ( ) \Theta() Θ()混用
这个很多hr都混用的,到时候问斐波那契递归复杂度就麻烦了
其中
Θ
\Theta
Θ()表示严格的同阶
比如
Θ
(
3
n
2
+
2
)
=
n
2
\Theta(3n^2+2) = n^2
Θ(3n2+2)=n2
3.T(n)的含义
T(n)就是执行操作次数,n是某个规模,这个没什么好说的
5.f(n)与时间复杂度的定义式
复杂度定义式:T(n) = O(f(n))
其中这个f(n)表示的就是一个估计的执行操作数,这也是和T(n)一样的函数
所以,T(n) = O(f(n))的意思就是估计操作数和实际操作数高阶或者同阶。。。
整个概念非常浅显易懂,实际上
当然,上面的定义式又定义了什么呢,上面的式子描述了一个关系,满足上面关系的估计函数f(n)就叫做复杂度。
也就是求f(n),这个f(n)比T(n)高阶或者同阶
有时候故意要求同阶的答案,其实那个是T(n) =
Θ
(
f
(
n
)
)
\Theta(f(n))
Θ(f(n))
后记
为什么要写这个呢,当然是看题看傻了,写作业去了