算法分析--时间复杂度
1. 声明
内容是我抄得别人的,自己拿来做笔记看一下。
2. 复杂度记号
OOO: 大O符号,也是最常用的,它表示的是小于等于,上界,也就是最差情况下的时间复杂度。
Ω\OmegaΩ: 大欧米伽,它表示的是大于等于,下界,也就是最好情况下的时间复杂度。
Θ\ThetaΘ: 大西塔,它表示的是确界,就是等于。
ooo: 小O符号,表示小于。
ω\omegaω: 小omega,表示大于。
抄了三个数学定义
第一个是渐进上界
f(n)=O(g(n)):=∃c,n,n0∈N+,n>n0,∀f(n),s.t.0≤f(n)≤cg(n)f(n) = O(g(n)) := \exists c,n,n_0 \in N_+,n > n_0, \forall f(n) ,s.t.\ \\ 0 \le f(n) \le cg(n) f(n)=O(g(n)):=∃c,n,n0∈N+,n>n0,∀f(n),s.t. 0≤f(n)≤cg(n)
第二个是渐进下界
f(n)=Ω(g(n)):=∃c,n,n0∈N+,n>n0,∀f(n),s.t.0≤cg(n)≤f(n)f(n)=\Omega(g(n)) := \ \exists c,n,n_0 \in N_+, n >n_0, \forall f(n),s.t.\\ 0 \le cg(n) \le f(n) f(n)=Ω(g(n)):= ∃c,n,n0∈N+,n>n0,∀f(n),s.t.0≤cg(n)≤f(n)
第三个是渐进等价
f(n)=Θ(g(n)):=∃c0,c1,n,n0,n>n0,∀f(n),s.t.c1g(n)≤f(n)≤c2g(n)f(n)=\Theta(g(n)) :=\ \exists c_0,c_1,n,n_0,n>n_0, \forall f(n), s.t.\ \\ c_1g(n) \le f(n) \le c_2g(n) f(n)=Θ(g(n)):= ∃c0,c1,n,n0,n>n0,∀f(n),s.t. c1g(n)≤f(n)≤c2g(n)
3. P问题、NP问题、NPC问题、NP-hard问题
强烈推荐看下matrix67的这篇文章,好多人都是抄的这篇文章。
我这里只简单写下自己的理解。
首先这个英文字母是polunomial的缩写,是多项式的意思。
而多项式其实就是∑i=0kaixi\sum_{i=0}^{k}a_ix^i∑i=0kaixi。
P具体是什么的缩写不太清楚了,但意思是未确定的。
- P问题:能在多项式时间复杂度内解决的问题。
- NP问题:能在多项式时间内验证是否正确的问题。
- NP完全问题:NP问题中最终归约到的问题。
- NP-hard问题:NP问题最终归约到的问题,但并不一定是NP问题
原文
时间复杂度
matrix67