第一章:算法概述

第一章:算法概述

1.1算法与程序

算法是指解决问题的一种方法或一个过程。
算法是若干指令的有穷序列,满足性质:
(1)输入:由外部提供的量作为算法的输入。
(2)输出:算法产生至少一个量作为输出。
(3)确定性:组成算法的每条指令是清晰,无歧义的。
(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

程序是算法用某种程序设计语言的具体实现。
程序可以不满足算法的性质(4)
例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法。
操作系统的各种任务可看成是单独的问题,每一个问题由操作系统中的一个子程序通过特定的算法来实现。该子程序得到输出结果后便终止。

1.2算法复杂性分析

分为空间复杂度和时间复杂度,其中时间复杂性最为重要

时间复杂度又分为最坏,最好,平均时间复杂性,其中最坏时间复杂性最有价值

时间复杂度

算法运行时所需要的计算机时间资源的量称为时间复杂性。这个量应该集中反应算法的效率,并从运行该算法的实际计算机中抽象出来。换句话说,这个量应该是只依赖于要解的问题的规模、算法的输入和算法本身的函数。

时间复杂性具体定义较为复杂,因而引入了复杂性渐近性态的概念。

T ( N ) T(N) T(N) 是一个复杂性函数。一般来说,当 N N N单调递增且趋于 ∞ \infty 时, T ( N ) T(N) T(N) 也将单调增加且趋于 ∞ \infty 。对于 T ( N ) T(N) T(N),如果存在 T ∼ ( N ) T ^ { \sim } ( N ) T(N) ,使得当 N → ∞ N→∞ N时有 ( T ( N ) − T ∼ ( N ) ) / T ( N ) → 0 (T(N)−T ^ { \sim } ( N ))/T(N)→0 (T(N)T(N))/T(N)0,那么,就说 T ∼ ( N ) T ^ { \sim } ( N ) T(N) T ( N ) T(N) T(N) N → ∞ N→∞ N时的渐近性态,或称 T ∼ ( N ) T ^ { \sim } ( N ) T(N)为算法当 N → ∞ N→∞ N的渐近复杂性,而与 T ( N ) T(N) T(N)相区别

直观上, T ∼ ( N ) T ^ { \sim } ( N ) T(N) T ( N ) T(N) T(N)中略去低阶项所留下的主项
( T ( N ) − T ∼ ( N ) ) / T ( N ) = 4 N log ⁡ N + 7 3 N 2 + 4 N log ⁡ N + 7 → 0 ( N → ∞ ) ( T ( N ) - T ^ { \sim } ( N ) ) / T ( N ) = \frac { 4 N \operatorname { log } N + 7 } { 3 N ^ { 2 } + 4 N \operatorname { log } N + 7 } \rightarrow 0 ( N \rightarrow \infty ) (T(N)T(N))/T(N)=3N2+4NlogN+74NlogN+70(N)
在这里,主项 T ∼ ( N ) = 3 N 2 T ^ { \sim } ( N )=3N^2 T(N)=3N2

当要比较的两个算法的渐近复杂性的阶不同时,只要能确定出各自的阶,就可以判定出哪一个算法的效率高,不必关心包含在 T ∼ ( N ) = 3 N 2 T ^ { \sim } ( N )=3N^2 T(N)=3N2 中的常数因子

🎡为了与此简化的复杂性分析相匹配,需要引入以下渐近意义下的记号 O , Ω , θ  和  o O , \Omega , \theta \text { 和 } o O,Ω,θ  o

1.关于符号 O O O:如果存在正的常数 C C C和自然数 N 0 N_0 N0 ,使得当 N ≥ N 0 N≥N_0 NN0 时有 f ( N ) ≤ C g ( N ) f(N)≤Cg(N) f(N)Cg(N) ,则称函数 f ( N ) f(N) f(N) N N N充分大时上有界,且 g ( N ) g(N) g(N)是它的一个上界,记为 f ( N ) = O ( g ( N ) ) f(N)=O(g(N)) f(N)=O(g(N))。这时还说 f ( N ) f(N) f(N)的阶不高于 g ( N ) g(N) g(N)的阶。

举几个例子:
( 1 ) 因 为 对 于 所 有 的 N ≥ 1 有 3 N ≤ 4 N , 所 以 有 3 N = O ( N ) ; (1)因为对于所有的 N≥1 有 3N≤4N ,所以有 3N=O(N) ; 1N13N4N3N=O(N)
( 2 ) 因 为 当 N ≥ 1 时 有 N + 1024 ≤ 1025 N , 所 以 有 N + 1024 N = O ( N ) ; (2)因为当 N≥1 时有 N+1024≤1025N ,所以有 N+1024N=O(N) ; 2N1N+10241025NN+1024N=O(N)
( 3 ) 因 为 当 N ≥ 10 时 有 2 N 2 + 11 N − 10 ≤ 3 N 3 , 所 以 有 2 N 2 + 11 N − 10 = O ( N 2 ) ; (3)因为当 N≥10 时有 2N^2+11N−10≤3N^3 ,所以有 2N^2+11N−10=O(N^2); 3N102N2+11N103N32N2+11N10=O(N2)

2.按照符号 O O O的定义,容易证明它有如下运算规则:
( 1 ) O ( f ) + O ( g ) = O ( m a x ( f , g ) ) ; (1)O(f)+O(g)=O(max(f,g)); 1O(f)+O(g)=O(max(f,g))
( 2 ) O ( f ) + O ( g ) = O ( f + g ) ; (2)O(f)+O(g)=O(f+g) ; 2O(f)+O(g)=O(f+g)
( 3 ) O ( f ) O ( g ) = O ( f g ) ; (3)O(f)O(g)=O(fg) ; 3O(f)O(g)=O(fg)
( 4 ) 如 果 g ( N ) = O ( f ( N ) ) , 则 O ( f ) + O ( g ) = O ( f ) ; (4)如果g(N)=O(f(N)) ,则 O(f)+O(g)=O(f) ; 4g(N)=O(f(N))O(f)+O(g)=O(f)
( 5 ) O ( C f ( N ) ) = O ( f ( N ) ) , 其 中 C 是 一 个 正 的 常 数 ; (5)O(Cf(N))=O(f(N)) ,其中 C 是一个正的常数; 5O(Cf(N))=O(f(N))C
( 6 ) f = O ( f ) 。 (6)f=O(f) 。 6f=O(f)

规则 ( 1 ) O ( f ) + O ( g ) = O ( m a x ( f , g ) ) ; (1)O(f)+O(g)=O(max(f,g)); 1O(f)+O(g)=O(max(f,g))的证明:

F ( N ) = O ( f ) F(N)=O(f) F(N)=O(f) 。根据符号 O O O 的定义,存在正常数 C 1 C_{1} C1 和自然数 N 1 N_{1} N1, 使得 对所有的 N ⩾ N 1 N \geqslant N_{1} NN1, 有 F ( N ) ⩽ C 1 f ( N ) F(N) \leqslant C_{1} f(N) F(N)C1f(N)

类似地,设 G ( N ) = O ( g ) G(N)=O(g) G(N)=O(g), 则存在正的常数 C 2 C_{2} C2 和自然数 N 2 N_{2} N2, 使得对所有的 N ⩾ N 2 N \geqslant N_{2} NN2, 有
G ( N ) ⩽ C 2 g ( N ) G(N) \leqslant C_{2} g(N) G(N)C2g(N)

C 3 = max ⁡ { C 1 , C 2 } , N 3 = max ⁡ { N 1 , N 2 } , h ( N ) = max ⁡ { f , g } C_{3}=\max \left\{C_{1}, C_{2}\right\}, N_{3}=\max \left\{N_{1}, N_{2}\right\}, h(N)=\max \{f, g\} C3=max{C1,C2},N3=max{N1,N2},h(N)=max{f,g}, 则对所有的 N ⩾ N 3 N \geqslant N_{3} NN3, 有
F ( N ) ⩽ C 1 f ( N ) ⩽ C 1 h ( N ) ⩽ C 3 h ( N ) F(N) \leqslant C_{1} f(N) \leqslant C_{1} h(N) \leqslant C_{3} h(N) F(N)C1f(N)C1h(N)C3h(N).
类似地,有 G ( N ) ⩽ C 2 f ( N ) ⩽ C 2 h ( N ) ⩽ C 3 h ( N ) \quad G(N) \leqslant C_{2} f(N) \leqslant C_{2} h(N) \leqslant C_{3} h(N) G(N)C2f(N)C2h(N)C3h(N)

故有:
O ( f ) + O ( g ) = F ( N ) + G ( N ) ⩽ C 3 h ( N ) + C 3 h ( N ) = 2 C 3 h ( N ) = O ( h ) = O ( max ⁡ ( f , g ) ) \quad \begin{aligned} O(f)+O(g)=F(N)+G(N) \leqslant C_{3} h(N)+C_{3} h(N) =& \\2 C_{3} h(N)=O(h)=O(\max (f, g)) \end{aligned} O(f)+O(g)=F(N)+G(N)C3h(N)+C3h(N)=2C3h(N)=O(h)=O(max(f,g))

规则 ( 2 ) O ( f ) + O ( g ) = O ( f + g ) ; (2)O(f)+O(g)=O(f+g) ; 2O(f)+O(g)=O(f+g)的证明:

F ( N ) = O ( f ) F(N)=O(f) F(N)=O(f) 。根据符号 O O O 的定义,存在正常数 C 1 C_{1} C1 和自然数 N 1 N_{1} N1, 使得 对所有的 N ⩾ N 1 N \geqslant N_{1} NN1, 有 F ( N ) ⩽ C 1 f ( N ) F(N) \leqslant C_{1} f(N) F(N)C1f(N)

类似地,设 G ( N ) = O ( g ) G(N)=O(g) G(N)=O(g), 则存在正的常数 C 2 C_{2} C2 和自然数 N 2 N_{2} N2, 使得对所有的 N ⩾ N 2 N \geqslant N_{2} NN2, 有
G ( N ) ⩽ C 2 g ( N ) G(N) \leqslant C_{2} g(N) G(N)C2g(N)
C 3 = max ⁡ { C 1 , C 2 } , N 3 = max ⁡ { N 1 , N 2 } C_{3}=\max \left\{C_{1}, C_{2}\right\}, N_{3}=\max \left\{N_{1}, N_{2}\right\} C3=max{C1,C2},N3=max{N1,N2}, 则对所有的 N ⩾ N 3 N \geqslant N_{3} NN3, 有:
F ( N ) ⩽ C 1 f ( N ) ⩽ C 3 f ( N ) G ( N ) ⩽ C 2 g ( N ) ⩽ C 3 g ( N ) F(N) \leqslant C_{1} f(N) \leqslant C_{3} f(N)\\ G(N) \leqslant C_{2} g(N) \leqslant C_{3} g(N) F(N)C1f(N)C3f(N)G(N)C2g(N)C3g(N)

故有:
O ( f ) + O ( g ) = F ( N ) + G ( N ) ≤ C 3 f ( N ) + C 3 g ( N ) = C 3 ( f ( N ) + g ( N ) ) = O ( f + g ) O(f)+O(g)=F(N)+G(N)≤C_3f(N)+C_3g(N)\\=C_3(f(N)+g(N))=O(f+g) O(f)+O(g)=F(N)+G(N)C3f(N)+C3g(N)=C3(f(N)+g(N))=O(f+g)

规则 ( 3 ) O ( f ) O ( g ) = O ( f g ) (3)O(f)O(g)=O(fg) 3O(f)O(g)=O(fg)的证明:

F ( N ) = O ( f ) F(N)=O(f) F(N)=O(f)。根据符号 O O O的定义,存在正常数 C 1 C_1 C1和自然数 N 1 N_1 N1,使得对所有的 N ≥ N 1 N≥N_1 NN1 ,有 F ( N ) ≤ C 1 f ( N ) F(N)≤C_1f(N) F(N)C1f(N)

类似地,设 G ( N ) = O ( g ) G(N)=O(g) G(N)=O(g),则存在正的常数 C 2 C_2 C2和自然数 N 2 N_2 N2 ,使得所有的 N ≥ N 2 N≥N_2 NN2 ,有 G ( N ) ≤ C 2 g ( N ) G(N)≤C_2g(N) G(N)C2g(N)
C 3 = C 1 ∗ C 2 , N 3 = max ⁡ { N 1 , N 2 } C_3=C_1*C_2, N_{3}=\max \left\{N_{1}, N_{2}\right\} C3=C1C2,N3=max{N1,N2}, 则对所有的 N ≥ N 3 N≥N_3 NN3 ,有 F ( N ) ≤ C 1 f ( N ) , G ( N ) ≤ C 2 g ( N ) F(N)≤C_1f(N),G(N)≤C_2g(N) F(N)C1f(N),G(N)C2g(N)
故有:
O ( f ) ∗ O ( g ) = F ( N ) ∗ G ( N ) ≤ C 1 f ( N ) ∗ C 2 g ( N ) = C 3 ∗ f ( N ) ∗ g ( N ) = O ( f ∗ g ) O(f)*O(g)=F(N)*G(N)≤C_1f(N)*C_2g(N)\\=C_3*f(N)*g(N)=O(f*g) O(f)O(g)=F(N)G(N)C1f(N)C2g(N)=C3f(N)g(N)=O(fg)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CLiuso

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值