算法复杂度-渐进分析
渐进表达式的定义
渐进上界 大 O O O
O ( g ( n ) ) = { f ( n ) : ∃ c > 0 , n 0 > 0 。 s . t . ∀ n ≥ n 0 , 0 ≤ f ( n ) ≤ c g ( n ) } O(g(n)) = \{f(n):{\exists} \: c > 0,n_0 > 0。 \: s.t. \: {\forall} \: n \geq n_0,\: 0 \leq f(n) \leq cg(n)\} O(g(n))={f(n):∃c>0,n0>0。s.t.∀n≥n0,0≤f(n)≤cg(n)}
渐进下界 大 Ω \Omega Ω
Ω ( g ( n ) ) = { f ( n ) : ∃ c > 0 , n 0 > 0 。 s . t . ∀ n ≥ n 0 , 0 ≤ c g ( n ) ≤ f ( n ) } \Omega(g(n)) = \{f(n):{\exists} \: c > 0,n_0 > 0。\: s.t. \: {\forall} \: n \geq n_0,\: 0 \leq cg(n) \leq f(n)\} Ω(g(n))={f(n):∃c>0,n0>0。s.t.∀n≥n0,0≤cg(n)≤f(n)}
渐进确界 Θ \Theta Θ
Θ ( g ( n ) ) = { f ( n ) : ∃ c 1 > 0 , c 2 > 0 , n 0 > 0 。 s . t . ∀ n ≥ n 0 , 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \Theta(g(n)) = \{f(n):{\exists} \: c_1 > 0,c_2 > 0,n_0 > 0。\: s.t. \: {\forall} \: n \geq n_0, \: 0 \leq c_1g(n) \leq f(n) \leq c_2g(n)\} Θ(g(n))={f(n):∃c1>0,c2>0,n0>0。s.t.∀n≥n0,0≤c1g(n)≤f(n)≤c2g(n)}
结论
∀ f ( n ) , g ( n ) 。 f ( n ) = Θ ( g ( n ) ) i i f f ( n ) = O ( g ( n ) ) a n d f ( n ) = Ω ( g ( n ) ) 。 {\forall} \: f(n),g(n)。\:f(n) = \Theta(g(n)) \:{iif}\: f(n)=O(g(n)) \:and\: f(n) = \Omega(g(n))。 ∀f(n),g(n)。f(n)=Θ(g(n))iiff(n)=O(g(n))andf(n)=Ω(g(n))。
即: Θ ( g ( n ) ) = O ( g ( n ) ) ⋂ Ω ( g ( n ) ) \Theta(g(n)) = O(g(n))\: \bigcap \: \Omega(g(n)) Θ(g(n))=O(g(n))⋂Ω(g(n))
非渐进确界的上界 小 ο \omicron ο
ο ( g ( n ) ) = { f ( n ) : ∀ c > 0 ∃ n 0 > 0 。 s . t . n ≥ n 0 , 0 ≤ f ( n ) < c g ( n ) } \omicron(g(n)) = \{f(n):{\forall} \: c > 0 \: {\exists} \: n_0 > 0。\: s.t. \: n \geq n_0,\: 0 \leq f(n) < cg(n)\} ο(g(n))={f(n):∀c>0∃n0>0。s.t.n≥n0,0≤f(n)<cg(n)}
非渐进确界的下界 小 ω \omega ω
ω ( g ( n ) ) = { f ( n ) : ∀ c > 0 ∃ n 0 > 0 。 s . t . n ≥ n 0 , 0 ≤ c g ( n ) < f ( n ) } \omega(g(n)) = \{f(n): {\forall} \: c > 0 \: {\exists} \: n_0 > 0。\: s.t. \: n \geq n_0, \: 0 \leq cg(n) < f(n)\} ω(g(n))={f(n):∀c>0∃n0>0。s.t.n≥n0,0≤cg(n)<f(n)}
举例说明
2 n 2 = O ( n 3 ) / 2 n 2 ∈ O ( n 3 ) 2n^2 = O(n^3)\quad / \quad 2n^2 \in O(n^3) 2n2=O(n3)/2n2∈O(n3)
f ( n ) = n 3 + O ( n 2 ) f(n) = n^3 + O(n^2) f(n)=n3+O(n2) 含义是: ∃ f ( n ) , h ( n ) ∈ O ( n 2 ) 。 s . t . f ( n ) = n 3 + h ( n ) \exists \: f(n),h(n) \in O(n^2)。\: s.t. \: f(n) = n^3 + h(n) ∃f(n),h(n)∈O(n2)。s.t.f(n)=n3+h(n)
n 2 + O ( n ) = O ( n 2 ) n^2 + O(n) = O(n^2) n2+O(n)=O(n2) 含义是: ∀ f ( n ) ∈ O ( n ) , ∃ h ( n ) ∈ O ( n 2 ) 。 s . t . n 2 + f ( n ) = h ( n ) \forall f(n) \in O(n),\: \exists \: h(n) \in O(n^2)。\: s.t. \: n^2 + f(n) = h(n) ∀f(n)∈O(n),∃h(n)∈O(n2)。s.t.n2+f(n)=h(n)
含义:“任何的左边都是右边”
n = Ω ( l g n ) \sqrt {n} = \Omega(lgn) n=Ω(lgn)
2 n 2 = o ( n 3 ) , n 0 = 2 c 。 2n^2 = o(n^3),\: n_0 = \frac{2}{c}。 2n2=o(n3),n0=c2。
1 2 n 2 = Θ ( n 2 ) \frac{1}{2}n^2 = \Theta(n^2) 21n2=Θ(n2)
1 2 n 2 ≠ o ( n 2 ) \frac{1}{2}n^2 \neq o(n^2) 21n2=o(n2)