算法设计第一章详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
?
13
例 题 1-1 (P7 1-4)
(1)设新机器在用同一算法在同样的时间t 内能解输入规模
为 n1 的问题。
t
3 2n
3 2n1 64
, n1
n6
(2) n12 64n2 n1 8n
(3)由于T(n) 为常数,因此算法可以解任意规模的问题。
14
1.2 算法复杂性分析
最坏情况:
k
Tm ax( N
2) f (n) n2 2n
10
3) f (n) 21 1
n
4) f (n) log n3
5) f (n) 10 log 3n
3n2 10n O(n2 )
n2 2n O(2n ) 10
21 1 O(1) n
log n3 O(log n)
10 log 3n O(n)
22
2)渐进性态的阶
f (n) 3n2 10n
g(n) n2
3n2 10n O(n2 )
h(n) n3
3n2 10n O(n3) ??
*上界的阶越低,结果就越有价值。
23
2)渐进性态的阶
1. O( f ) O(g) O(max(f , g))
运
2. O( f ) O(g) O( f g)
算
3. O( f ) O(g) O( f g)
机械工业出版社,2007。
3
内容安排:
一 算法概述 二 递归与分治策略(I) 三 动态规划 (I,H) 四 贪心算法 (I) 五 回溯法 (H) 六 分支限界法 (H)
4
第一章 算法概述
Algorithm Introduction
5
学习要求:
理解算法的概念 理解什么是程序,程序与算法的区别和内在联系 掌握算法计算复杂性的概念 掌握算法渐进复杂性的数学表达 掌握用C++语言描述算法的方法 了解NP类问题的基本概念
计算机算法设计与分析
1
algorithm@163.com
123456
网易网盘
算法2013
2
参考书目:
1) 王红梅,算法设计与分析,清华大学出版社,2006。 2) 吕国英,算法设计与分析,清华大学出版社,2009。 3) Alfred V. Aho等,(黄林鹏等译)计算机算法的设
计与分析,机械工业出版社,2007。 4) R. C. T. Lee,(王卫东译)算法设计与分析导引,
~
T
(
N
)
,使得当
N
时,有
~
T(N)T(N) 0 T(N)
称
~
T
(
N
)
是
T
(
N
)
当
N
时的渐进性态或渐进复杂性.
18
2、 复杂性的渐进性态
~
例: T (N ) 3N 2 4N log N 7 ,则 T (N) 3N 2 。
~
T (N ) T (N ) 4N log N 7
0(N )
I DN
I DN
i 1
输入I的概率
16
例 题 1-2
在一维整型数组 A[n]中顺序查找与给定值 k 相等的元素(设计该
数组中有且仅有一个元素值为 k ),顺序查找算法如下:
Int Find(int A[], int n)
{
i:=0;
a
while i<n
t
最好情况:Tmin 3a 2t s
i:=i+1;
)
max
IDN
T
(N
,
I
)
max
IDN
tiei (N , I )
i 1
k
tiei (N , I * ) T (N , I * ) i 1
k
~
~
最好情况: Tmin(N )
min
IDN
T (N, I )
i1
tiei (N, I )
T (N, I)
15
1.2 算法复杂性分析
平均情况:
k
Tavg (N ) P(I )T (N, I ) P(I ) ti ei (N, I )
(a+s)
n If A[i]==k t
Break
最坏情况:Tmax 2a (2t a s)n
Reture i
a
}
分析:问题的规模为n,设元运算执行时间为赋值:a,判断:t,加法:s。
17
2、 复杂性的渐进性态
1)渐进性态
设 T(N) 为算法 A 的时间复杂性函数,则它是 N 的单增函数,
如果存在一个函数
时间复杂性(T)
算法的复杂性(C)
空间复杂性(S)
11
1.2 算法复杂性分析 C F(N, I, A)
问题的规模 输入
算法
T T (N, I, A)
S S(N, I, A)
12
Βιβλιοθήκη Baidu
1.2 算法复杂性分析
时间复杂性:
元运算种类
k
T T (N, I ) tiei (N, I ) i 1
元运算时间 元运算次数
T(N)
3N 2 4N log N 7
* 渐进分析适用于N充分大的情况,当问题的规模很小时,或比较的两算法 同阶时,则不能做这种简化.
19
2)渐进性态的阶
设 f (N) 和 g(N) 是定义在正整数集上的正函数,
(1)大O表示法 (算法运行时间的上限 )
若存在正常数 C 和自然数 N 0 使得当 N N0 时,有 f (N) Cg(N) ,则称函数 f (N) 在 N 充分大时有上界, 且 g(N) 是它的一个上界,记为 f (N) O(g(N)) , 也称 f (N) 的阶不高于 g(N) 的阶。
20
2)渐进性态的阶
1) N 1,有3N 4N ,所以3N O(N)
2) N 1,有 N 1024 1025N ,所以 N 1024 O(N)
3) N 10,有 2N 2 11N 10 3N 2 ,所以
2N 2 11N 10 O(N 2)
21
2)渐进性态的阶
练习:1) f (n) 3n2 10n
法
4. 如果 g(N) O( f (N)) ,则 O( f ) O(g) O( f )
则
5. f O( f ) 6. O(Cf (N)) O( f (N))
6
1.1 算法与程序
1、算法 一系列将问题的输入转换为输出的计算 或操作步骤。
7
2.算法的性质
输入: 有外部提供的量作为算法的输入。 输出: 算法产生至少一个量作为输出。 确定性:组成算法的每条指令是清晰、无歧义的。 有限性:算法中每条指令的执行次数是有限的,
执行每条指令的时间也是有限的。
8
3、程序与算法的区别与内在联系
程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。
4、算法描述语言
自然语言、 流程图、 程序设计语言、 伪代码等。
9
5、问题求解(Problem Solving)
理解问题
数学模型
设计算法 证明正确性
设计程序
算法分析
10
1.2 算法复杂性分析
1、复杂性的计量
算法的复杂性(C):算法执行所需的时间和空间 的数量。
13
例 题 1-1 (P7 1-4)
(1)设新机器在用同一算法在同样的时间t 内能解输入规模
为 n1 的问题。
t
3 2n
3 2n1 64
, n1
n6
(2) n12 64n2 n1 8n
(3)由于T(n) 为常数,因此算法可以解任意规模的问题。
14
1.2 算法复杂性分析
最坏情况:
k
Tm ax( N
2) f (n) n2 2n
10
3) f (n) 21 1
n
4) f (n) log n3
5) f (n) 10 log 3n
3n2 10n O(n2 )
n2 2n O(2n ) 10
21 1 O(1) n
log n3 O(log n)
10 log 3n O(n)
22
2)渐进性态的阶
f (n) 3n2 10n
g(n) n2
3n2 10n O(n2 )
h(n) n3
3n2 10n O(n3) ??
*上界的阶越低,结果就越有价值。
23
2)渐进性态的阶
1. O( f ) O(g) O(max(f , g))
运
2. O( f ) O(g) O( f g)
算
3. O( f ) O(g) O( f g)
机械工业出版社,2007。
3
内容安排:
一 算法概述 二 递归与分治策略(I) 三 动态规划 (I,H) 四 贪心算法 (I) 五 回溯法 (H) 六 分支限界法 (H)
4
第一章 算法概述
Algorithm Introduction
5
学习要求:
理解算法的概念 理解什么是程序,程序与算法的区别和内在联系 掌握算法计算复杂性的概念 掌握算法渐进复杂性的数学表达 掌握用C++语言描述算法的方法 了解NP类问题的基本概念
计算机算法设计与分析
1
algorithm@163.com
123456
网易网盘
算法2013
2
参考书目:
1) 王红梅,算法设计与分析,清华大学出版社,2006。 2) 吕国英,算法设计与分析,清华大学出版社,2009。 3) Alfred V. Aho等,(黄林鹏等译)计算机算法的设
计与分析,机械工业出版社,2007。 4) R. C. T. Lee,(王卫东译)算法设计与分析导引,
~
T
(
N
)
,使得当
N
时,有
~
T(N)T(N) 0 T(N)
称
~
T
(
N
)
是
T
(
N
)
当
N
时的渐进性态或渐进复杂性.
18
2、 复杂性的渐进性态
~
例: T (N ) 3N 2 4N log N 7 ,则 T (N) 3N 2 。
~
T (N ) T (N ) 4N log N 7
0(N )
I DN
I DN
i 1
输入I的概率
16
例 题 1-2
在一维整型数组 A[n]中顺序查找与给定值 k 相等的元素(设计该
数组中有且仅有一个元素值为 k ),顺序查找算法如下:
Int Find(int A[], int n)
{
i:=0;
a
while i<n
t
最好情况:Tmin 3a 2t s
i:=i+1;
)
max
IDN
T
(N
,
I
)
max
IDN
tiei (N , I )
i 1
k
tiei (N , I * ) T (N , I * ) i 1
k
~
~
最好情况: Tmin(N )
min
IDN
T (N, I )
i1
tiei (N, I )
T (N, I)
15
1.2 算法复杂性分析
平均情况:
k
Tavg (N ) P(I )T (N, I ) P(I ) ti ei (N, I )
(a+s)
n If A[i]==k t
Break
最坏情况:Tmax 2a (2t a s)n
Reture i
a
}
分析:问题的规模为n,设元运算执行时间为赋值:a,判断:t,加法:s。
17
2、 复杂性的渐进性态
1)渐进性态
设 T(N) 为算法 A 的时间复杂性函数,则它是 N 的单增函数,
如果存在一个函数
时间复杂性(T)
算法的复杂性(C)
空间复杂性(S)
11
1.2 算法复杂性分析 C F(N, I, A)
问题的规模 输入
算法
T T (N, I, A)
S S(N, I, A)
12
Βιβλιοθήκη Baidu
1.2 算法复杂性分析
时间复杂性:
元运算种类
k
T T (N, I ) tiei (N, I ) i 1
元运算时间 元运算次数
T(N)
3N 2 4N log N 7
* 渐进分析适用于N充分大的情况,当问题的规模很小时,或比较的两算法 同阶时,则不能做这种简化.
19
2)渐进性态的阶
设 f (N) 和 g(N) 是定义在正整数集上的正函数,
(1)大O表示法 (算法运行时间的上限 )
若存在正常数 C 和自然数 N 0 使得当 N N0 时,有 f (N) Cg(N) ,则称函数 f (N) 在 N 充分大时有上界, 且 g(N) 是它的一个上界,记为 f (N) O(g(N)) , 也称 f (N) 的阶不高于 g(N) 的阶。
20
2)渐进性态的阶
1) N 1,有3N 4N ,所以3N O(N)
2) N 1,有 N 1024 1025N ,所以 N 1024 O(N)
3) N 10,有 2N 2 11N 10 3N 2 ,所以
2N 2 11N 10 O(N 2)
21
2)渐进性态的阶
练习:1) f (n) 3n2 10n
法
4. 如果 g(N) O( f (N)) ,则 O( f ) O(g) O( f )
则
5. f O( f ) 6. O(Cf (N)) O( f (N))
6
1.1 算法与程序
1、算法 一系列将问题的输入转换为输出的计算 或操作步骤。
7
2.算法的性质
输入: 有外部提供的量作为算法的输入。 输出: 算法产生至少一个量作为输出。 确定性:组成算法的每条指令是清晰、无歧义的。 有限性:算法中每条指令的执行次数是有限的,
执行每条指令的时间也是有限的。
8
3、程序与算法的区别与内在联系
程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。
4、算法描述语言
自然语言、 流程图、 程序设计语言、 伪代码等。
9
5、问题求解(Problem Solving)
理解问题
数学模型
设计算法 证明正确性
设计程序
算法分析
10
1.2 算法复杂性分析
1、复杂性的计量
算法的复杂性(C):算法执行所需的时间和空间 的数量。