算法设计与分析-2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n的暂时值变为最终值。 • (2)n有暂时值s1,其子节点得到最终值s2,则
n的暂时值变为: • Max{s1,s2}或min{s1,s2}
• -删除:
max n 20
s1=20 c1 s2=15
c2
d
A
c3 min
B
• -删除:举个例子,情况与上面类似
Min n 20
S1=20 c1 S2=25
• 看书上表可以看出指数复杂度太慢多项式好,因 此是两个级别。
• 设计出多项式算法是好的,设计出指数算法是坏 的,tsp能不能设计多项式算法。多年设计不出来。
i
0,
j
0
• 计算任意的P(i,j),对任意的i和j
• 时间复杂度是多少?列出递推关系,编递归 程序实现的话可能比较危险,时间复杂度 用下面方法分析。
• 下面的递归算法容易给出: • P(i, j) • If i=0 and j>0 return 1 • If i>0 and j=0 return 0 • If i>0 and j>0 return 1 (P(i, j1) P(i 1, j))
F(18) (a,d) (a,e)
E(18)
(a,c)
删除
G(23)
(a,d ) (a,e)
C(18.5)
(a,b)
删除
J(18.5) (a,c)
K(21) (a,b) (a,d)(a,e) 删除
L(18.6)
M(23.5)
(a,d) (a,e)
(a,d ) (a,e)
H(23) (b,c) (b,d ) (a,e) (c,e)
• 一点一点算,从右下角往左上角依次计算。 • 问题:货郎问题怎样设计动态规划算法?
§2.4回溯技术:Backtracking
• 一棵树
• 从根开始,走遍所有节点,怎么走,要用 到回溯技术,树搜索在智能系统
• 中非常有用。每个问题都是树搜索。数据 库删除记录就要用到回溯算法,研究生到 现在为止尚未实现该程序。
上次内容:
(1)算法分析技术,问题,算法,程 序,时间复杂性,空间复杂性。
(2)递归算法分析,递推方程解法。 猜测法
(3)算法设计技术,分而治之。合并 排序,merge-sort
(4)问题:xn,冒泡排序,合并排序, 比赛日程表。
• §2.2贪心技术(greedy)
• 例子:硬币类型,25分,10分,5分,1分。 将63分钱兑换成硬币
• 考虑最坏情况所以最小最大计算
• / 删除:上面搜索中,某节点的右子树 不用搜索了。对一方有利一定对另一方不 利。
• 什么是删除,什么是删除
• 背景:人工智能土搜索中应用,图搜索的 关键技术
• -删除:,-删除 • 说明什么是与或树,规则
• -删除: • 说明什么是与或树,规则 • (1)n的所有子节点均被赋值或删除,则节点
x
xx 0
0
0
x动作
0分 x 0 x
x0
0x 0
1分 x
x
0x 0
0x 0
0分 x 0 x
xx 0
0
0
-1分 x
x
xx 0
00 0
0动作
0分 x 0 x
xx 0
0x 0
1分 x x x
0x 0
0x 0
0分 x 0 x
xx 0
0x 0
• X动作节点:得分取其子节点得分的最大值
• O动作节点:得分取其子节点得分的最小值
• 1用一个m2位的0-1序列表示圈。
• C11c12………c1m • C21c22………c2m • …………………… • Cm1cm2………cmm
• 每一行每一列只有一个值为1,其他为0。代表圈。
• 目标就是找一个0-1序列使解值最小。
• 2m*m时间复杂度,m2空间复杂度可以找到最优解。
• 但是这个算法算的时间太慢,不妨编程尝试一下。
2
• i+j=n,求T(n)时间复杂度。
• T(1)=C
• T(n)=2T(n-1)+d, i+j=n • 可以得到T(n)=O(2n),但是可以设计另一个
算法.下面的表就是一个算法。
99/128
57/64
31/32
1
5
42/64
26/32
15/16
1
66/128
4
29/128
22/64
16/32
• 例子,两人x和o下棋的例子,分别以次往 方格里面加入棋子,谁先站满一行一列或 一斜行(列)则取胜。
• 目标是为了讲搜索和回溯。为了决定下一 步怎么走,必须搜索以后的多种可能性, 所以搜索每一种下法。为了让计算机知道 什么叫好什么叫坏,给每个搜索节点设置 一个估价函数。原则是对一方有利则数值 越大,另一方有利则数值越小。
• 询问:求最短旅游回路。求一个城市排列,使排 列对应的旅游最短。
CC3
3
CC2
2
CC1
CC4
4
CC5
5
CC6
• 贪心算法也要有先有后,也有规则。通常 是选择解,一点一点选。
• 问题的解由很多部分组成,选择无其中一 部分时采用贪心策略。
• 算法:先选一条最短的边,作为旅游第一 条边,再选第二条边,在不破坏旅游情况 下选择最短的,一直到最后一条边。选择 一些边,形成旅游,最后要形成圈才行。
11/16
1
7/8
3
7/64
6/32
5/16
1/2
3/4
1
2
1/32
1/16
1/8
1/4
1/2
1
1
0
0
0
0
0
0
5 4 3 2 1 0 i\j
• i+j = n,T(n) Cn2 , T(n) = O(n2)
• 动态规划的含义在哪里,后面的计算要用 到前面的计算结果。必须存储中间结果, 用到中间结果。
• ***设置一个启发函数,
1 {关于u两条最小长度边的长度 值}
2 uV
• 每个节点根据启发算法计算启发函数值: 启发函数值比最优解值还优。
• 启发函数设计并不容易,需要在实践中探 索。
• (1/2) {关于顶点u邻接的两条最小长度 边的长度之和}最小解值
• 根节点的启发值(5+6+8+7+9)/2=17.5 • 限制圈含有(a,e)不含有(b,c),则启发函数
• 先选(c4, c5),下一步选(c1, c2), (c2, c3), (c5, c6)三条边长相同,下一步选(c1, c3)
• 不允许。只能选(c3,c4),最后只能选(c1,c6)。 • 得到货郎旅游为:C1,C2,C3,C4,C5,C6,C1
• §2.3动态规划技术(DYNAMIC programming)
• 实例:城市集合:C={c1, c2, …, cm},距离: d(ci, cj)Z+,ci, cj C
• 询问:求城市排列:c(1)c(2)…c(m),使得
• Min{d(c(1),c(2))+ d(c(2),c(3))+ …+ d(c(m1),c(m))+ d(c(m),c(1))}
• 该问题不是设计不出算法,可以设计如下 算法:
• 动态规划技术应用广泛,有许多问题也设计动态 规划算法,一定能寻找到最优解。遍历解空间中 的所有解,从而找到所需要的或最优的。难理解
• 把所有解一点一点构造出来,构造所有可能的解, 其中包含最优解。是一种找到最优解的方法,通 过规划方法把所有可能解规划遍历出来。
• 实际上要把问题实例的解一点一点组装起 来,先组装规模小的实例的解,在逐渐增 大实例规模,得到其解。
• 例2.2 A,B两组进行比赛,对于确定的n,哪 组先胜n局则哪组获胜。A, B能力
• 相当,一局取胜概率都为1/2。
• P(i,j): A组需要取胜i局才能获胜,B组需要 取胜j局才能获胜,在这种情况下,最终导致 A取胜的概率。
• 如:n=4,A已经胜2局,B已经胜1局,则 i=2,j=3,此时A取胜的概率为P(2,3)
• 寻求当前最好,未必全局最好。当前收益最大为 目标/当前损失最小为目标。
• 大学里的内容,Dijkstra最短路算法,Kruskal最 小生成树算法,都是贪心算法。
• 例2.1货郎问题,现在是非常有名的问题,以后会 不断讨论
• 旅游:经过所有城市,每个城市经过一次,仅一 次。用城市排列表示。
• 实例:城市集合C = {c1, c2, …, cn},距离d(ci, cj), 1i<jn
• 估计值小了,就不用搜索新节点了。
• 目的是尽量减少搜索节点个数,从而加快 找到最优解,
• 当启发值超过现有解值时带有当前启发值 的节点就不用继续搜索了。显然。
3
a
3
b
7
4
4
e
8
c
2
6
5 6
d
A(17.5) 无限制
B(17.5) (a,b)
D(20.5) (a,c) (a,d ) (a,e)
• 第三章:P类,NP类,NPC类 • §3.1问题与算法
• 背景:计算机发明以后,人们想用计算机 干所有事情,最重要的是用计算机
• 模拟人的智能,即人工智能,人工智能中 有许多问题,人们找不到很好的
• 求解算法,困惑,想解释这个问题。从什 么地方入手呢?需要说明之
• §3.1问题与算法
• 货郎问题优化形式:
• 最小,再选初始值,找另一个局部最小值。
• 寻找函数在一个区间的最小值
• 先随机选择初始点,再局部搜索得到局部 最优点。
• 下面看tsp怎么解:
a
b
c
d
• 用(ad)(bc)代替(ab)(cd)看看解值是否比原 来的小,小就替换,大就不替
• 换了。总是看眼前利益,找到局部最优解, 当前好就是好。
• P(i,j)怎么计算?P(0,j>0)=1,P(i>0,0)=0。
• P(i-1,j):A取胜一局后最终取胜的概率, P(i,j-1):B取胜一局而A最终取胜的概率。
• 概率计算公式:
• P(i,j) =
1,
பைடு நூலகம்
i 0, j 0
0,
i 0, j 0
1 2
P(i,
j
1)
P(i
1,
j),
• 通过一个例子讲回溯,搜索的好坏用得分 表示。搜遍所有可能情况才知道哪个好哪 个坏。
• (1)得分,-1(胜0负),0(平),1(0胜负) • (2)最大最小,选择对自己最有利的策略 • (3)深度优先搜索,
0
x动作 0动作
1分 x x x
x0
0
0
1分 x
x
x0
0
0
0分 x
x
x0
0x 0
-1分 x
c2
d
A
c3 Max
B
• 2分支定界 • 还是以解答TSP问题的算法为例:
• 以货郎问题tsp为例讲解什么是分支定界, 首先要建立数学模型描述怎样搜索,然后 考虑怎样搜索的节点少,搜索节点多了, 就当问题大时就求不到解了。
• 这种问题不再最小最大了,只求最小值, 或最大值。
• 什么是货郎问题前面应该讲了吧。前面讲 过了。求货郎旅游。
• ,最少兑换几枚硬币?
• 贪心算法:25,25,10,1,1,1,先换 大的后换小的。
• 实际上以上解是最优的,与类型有关。
• 11,5,1分三种硬币,兑换15分钱,贪心 算法解为:11,1,1,1,1
• 实际上,5,5,5是最优解。并不是最优解。
• 贪心技术可以找到可行解,未必能找到最优解。 如同现实生活中的局部利益与整体利益。
值为:
• (9+6+9+7+10)/2=20.5
所有旅游
(a,b)
(a,b)
(c,d)
(a,b) (c,d) (d,e)
(a,b)
(c,d)
2
(a,b)
a
3
b
7
3
4
4
e
8
6
5
c
6
d
• 上述规则能够保证启发函数值小于实际最 优值。
• 怎么样分支定界呢?看page-39的图。估计 值本身比最小值小,现在已经求导另外的 值已经比
(d,e) (c,d ) abceda
I(21) (b,c) (c,d) (c,e) (b,d ) (d ,e) (b,e)
abecda
N(19) (b,c) (c,d ) (c,e) (b,d )
(d,e)(b,e) acbeda
P(23) (b,c) (b,d) (b,e) (c,e) (b,e) (c,d )
acebda
• §2.5局部搜索 • local search,遗传算法,演化算法,蚁群
算法,本质上都带有局部搜索的
• 含义。实际上前面自然演化算法真正计算 时效果并不如局部搜索好。
• 我们的实验: • 99%的实例局部搜索可以找到最优解,其
他的实例改进的局部搜索容易找到最优解。
• 在一个区间里找一个最小值,怎么找。选 取初始值,梯度下降找到局部
n的暂时值变为: • Max{s1,s2}或min{s1,s2}
• -删除:
max n 20
s1=20 c1 s2=15
c2
d
A
c3 min
B
• -删除:举个例子,情况与上面类似
Min n 20
S1=20 c1 S2=25
• 看书上表可以看出指数复杂度太慢多项式好,因 此是两个级别。
• 设计出多项式算法是好的,设计出指数算法是坏 的,tsp能不能设计多项式算法。多年设计不出来。
i
0,
j
0
• 计算任意的P(i,j),对任意的i和j
• 时间复杂度是多少?列出递推关系,编递归 程序实现的话可能比较危险,时间复杂度 用下面方法分析。
• 下面的递归算法容易给出: • P(i, j) • If i=0 and j>0 return 1 • If i>0 and j=0 return 0 • If i>0 and j>0 return 1 (P(i, j1) P(i 1, j))
F(18) (a,d) (a,e)
E(18)
(a,c)
删除
G(23)
(a,d ) (a,e)
C(18.5)
(a,b)
删除
J(18.5) (a,c)
K(21) (a,b) (a,d)(a,e) 删除
L(18.6)
M(23.5)
(a,d) (a,e)
(a,d ) (a,e)
H(23) (b,c) (b,d ) (a,e) (c,e)
• 一点一点算,从右下角往左上角依次计算。 • 问题:货郎问题怎样设计动态规划算法?
§2.4回溯技术:Backtracking
• 一棵树
• 从根开始,走遍所有节点,怎么走,要用 到回溯技术,树搜索在智能系统
• 中非常有用。每个问题都是树搜索。数据 库删除记录就要用到回溯算法,研究生到 现在为止尚未实现该程序。
上次内容:
(1)算法分析技术,问题,算法,程 序,时间复杂性,空间复杂性。
(2)递归算法分析,递推方程解法。 猜测法
(3)算法设计技术,分而治之。合并 排序,merge-sort
(4)问题:xn,冒泡排序,合并排序, 比赛日程表。
• §2.2贪心技术(greedy)
• 例子:硬币类型,25分,10分,5分,1分。 将63分钱兑换成硬币
• 考虑最坏情况所以最小最大计算
• / 删除:上面搜索中,某节点的右子树 不用搜索了。对一方有利一定对另一方不 利。
• 什么是删除,什么是删除
• 背景:人工智能土搜索中应用,图搜索的 关键技术
• -删除:,-删除 • 说明什么是与或树,规则
• -删除: • 说明什么是与或树,规则 • (1)n的所有子节点均被赋值或删除,则节点
x
xx 0
0
0
x动作
0分 x 0 x
x0
0x 0
1分 x
x
0x 0
0x 0
0分 x 0 x
xx 0
0
0
-1分 x
x
xx 0
00 0
0动作
0分 x 0 x
xx 0
0x 0
1分 x x x
0x 0
0x 0
0分 x 0 x
xx 0
0x 0
• X动作节点:得分取其子节点得分的最大值
• O动作节点:得分取其子节点得分的最小值
• 1用一个m2位的0-1序列表示圈。
• C11c12………c1m • C21c22………c2m • …………………… • Cm1cm2………cmm
• 每一行每一列只有一个值为1,其他为0。代表圈。
• 目标就是找一个0-1序列使解值最小。
• 2m*m时间复杂度,m2空间复杂度可以找到最优解。
• 但是这个算法算的时间太慢,不妨编程尝试一下。
2
• i+j=n,求T(n)时间复杂度。
• T(1)=C
• T(n)=2T(n-1)+d, i+j=n • 可以得到T(n)=O(2n),但是可以设计另一个
算法.下面的表就是一个算法。
99/128
57/64
31/32
1
5
42/64
26/32
15/16
1
66/128
4
29/128
22/64
16/32
• 例子,两人x和o下棋的例子,分别以次往 方格里面加入棋子,谁先站满一行一列或 一斜行(列)则取胜。
• 目标是为了讲搜索和回溯。为了决定下一 步怎么走,必须搜索以后的多种可能性, 所以搜索每一种下法。为了让计算机知道 什么叫好什么叫坏,给每个搜索节点设置 一个估价函数。原则是对一方有利则数值 越大,另一方有利则数值越小。
• 询问:求最短旅游回路。求一个城市排列,使排 列对应的旅游最短。
CC3
3
CC2
2
CC1
CC4
4
CC5
5
CC6
• 贪心算法也要有先有后,也有规则。通常 是选择解,一点一点选。
• 问题的解由很多部分组成,选择无其中一 部分时采用贪心策略。
• 算法:先选一条最短的边,作为旅游第一 条边,再选第二条边,在不破坏旅游情况 下选择最短的,一直到最后一条边。选择 一些边,形成旅游,最后要形成圈才行。
11/16
1
7/8
3
7/64
6/32
5/16
1/2
3/4
1
2
1/32
1/16
1/8
1/4
1/2
1
1
0
0
0
0
0
0
5 4 3 2 1 0 i\j
• i+j = n,T(n) Cn2 , T(n) = O(n2)
• 动态规划的含义在哪里,后面的计算要用 到前面的计算结果。必须存储中间结果, 用到中间结果。
• ***设置一个启发函数,
1 {关于u两条最小长度边的长度 值}
2 uV
• 每个节点根据启发算法计算启发函数值: 启发函数值比最优解值还优。
• 启发函数设计并不容易,需要在实践中探 索。
• (1/2) {关于顶点u邻接的两条最小长度 边的长度之和}最小解值
• 根节点的启发值(5+6+8+7+9)/2=17.5 • 限制圈含有(a,e)不含有(b,c),则启发函数
• 先选(c4, c5),下一步选(c1, c2), (c2, c3), (c5, c6)三条边长相同,下一步选(c1, c3)
• 不允许。只能选(c3,c4),最后只能选(c1,c6)。 • 得到货郎旅游为:C1,C2,C3,C4,C5,C6,C1
• §2.3动态规划技术(DYNAMIC programming)
• 实例:城市集合:C={c1, c2, …, cm},距离: d(ci, cj)Z+,ci, cj C
• 询问:求城市排列:c(1)c(2)…c(m),使得
• Min{d(c(1),c(2))+ d(c(2),c(3))+ …+ d(c(m1),c(m))+ d(c(m),c(1))}
• 该问题不是设计不出算法,可以设计如下 算法:
• 动态规划技术应用广泛,有许多问题也设计动态 规划算法,一定能寻找到最优解。遍历解空间中 的所有解,从而找到所需要的或最优的。难理解
• 把所有解一点一点构造出来,构造所有可能的解, 其中包含最优解。是一种找到最优解的方法,通 过规划方法把所有可能解规划遍历出来。
• 实际上要把问题实例的解一点一点组装起 来,先组装规模小的实例的解,在逐渐增 大实例规模,得到其解。
• 例2.2 A,B两组进行比赛,对于确定的n,哪 组先胜n局则哪组获胜。A, B能力
• 相当,一局取胜概率都为1/2。
• P(i,j): A组需要取胜i局才能获胜,B组需要 取胜j局才能获胜,在这种情况下,最终导致 A取胜的概率。
• 如:n=4,A已经胜2局,B已经胜1局,则 i=2,j=3,此时A取胜的概率为P(2,3)
• 寻求当前最好,未必全局最好。当前收益最大为 目标/当前损失最小为目标。
• 大学里的内容,Dijkstra最短路算法,Kruskal最 小生成树算法,都是贪心算法。
• 例2.1货郎问题,现在是非常有名的问题,以后会 不断讨论
• 旅游:经过所有城市,每个城市经过一次,仅一 次。用城市排列表示。
• 实例:城市集合C = {c1, c2, …, cn},距离d(ci, cj), 1i<jn
• 估计值小了,就不用搜索新节点了。
• 目的是尽量减少搜索节点个数,从而加快 找到最优解,
• 当启发值超过现有解值时带有当前启发值 的节点就不用继续搜索了。显然。
3
a
3
b
7
4
4
e
8
c
2
6
5 6
d
A(17.5) 无限制
B(17.5) (a,b)
D(20.5) (a,c) (a,d ) (a,e)
• 第三章:P类,NP类,NPC类 • §3.1问题与算法
• 背景:计算机发明以后,人们想用计算机 干所有事情,最重要的是用计算机
• 模拟人的智能,即人工智能,人工智能中 有许多问题,人们找不到很好的
• 求解算法,困惑,想解释这个问题。从什 么地方入手呢?需要说明之
• §3.1问题与算法
• 货郎问题优化形式:
• 最小,再选初始值,找另一个局部最小值。
• 寻找函数在一个区间的最小值
• 先随机选择初始点,再局部搜索得到局部 最优点。
• 下面看tsp怎么解:
a
b
c
d
• 用(ad)(bc)代替(ab)(cd)看看解值是否比原 来的小,小就替换,大就不替
• 换了。总是看眼前利益,找到局部最优解, 当前好就是好。
• P(i,j)怎么计算?P(0,j>0)=1,P(i>0,0)=0。
• P(i-1,j):A取胜一局后最终取胜的概率, P(i,j-1):B取胜一局而A最终取胜的概率。
• 概率计算公式:
• P(i,j) =
1,
பைடு நூலகம்
i 0, j 0
0,
i 0, j 0
1 2
P(i,
j
1)
P(i
1,
j),
• 通过一个例子讲回溯,搜索的好坏用得分 表示。搜遍所有可能情况才知道哪个好哪 个坏。
• (1)得分,-1(胜0负),0(平),1(0胜负) • (2)最大最小,选择对自己最有利的策略 • (3)深度优先搜索,
0
x动作 0动作
1分 x x x
x0
0
0
1分 x
x
x0
0
0
0分 x
x
x0
0x 0
-1分 x
c2
d
A
c3 Max
B
• 2分支定界 • 还是以解答TSP问题的算法为例:
• 以货郎问题tsp为例讲解什么是分支定界, 首先要建立数学模型描述怎样搜索,然后 考虑怎样搜索的节点少,搜索节点多了, 就当问题大时就求不到解了。
• 这种问题不再最小最大了,只求最小值, 或最大值。
• 什么是货郎问题前面应该讲了吧。前面讲 过了。求货郎旅游。
• ,最少兑换几枚硬币?
• 贪心算法:25,25,10,1,1,1,先换 大的后换小的。
• 实际上以上解是最优的,与类型有关。
• 11,5,1分三种硬币,兑换15分钱,贪心 算法解为:11,1,1,1,1
• 实际上,5,5,5是最优解。并不是最优解。
• 贪心技术可以找到可行解,未必能找到最优解。 如同现实生活中的局部利益与整体利益。
值为:
• (9+6+9+7+10)/2=20.5
所有旅游
(a,b)
(a,b)
(c,d)
(a,b) (c,d) (d,e)
(a,b)
(c,d)
2
(a,b)
a
3
b
7
3
4
4
e
8
6
5
c
6
d
• 上述规则能够保证启发函数值小于实际最 优值。
• 怎么样分支定界呢?看page-39的图。估计 值本身比最小值小,现在已经求导另外的 值已经比
(d,e) (c,d ) abceda
I(21) (b,c) (c,d) (c,e) (b,d ) (d ,e) (b,e)
abecda
N(19) (b,c) (c,d ) (c,e) (b,d )
(d,e)(b,e) acbeda
P(23) (b,c) (b,d) (b,e) (c,e) (b,e) (c,d )
acebda
• §2.5局部搜索 • local search,遗传算法,演化算法,蚁群
算法,本质上都带有局部搜索的
• 含义。实际上前面自然演化算法真正计算 时效果并不如局部搜索好。
• 我们的实验: • 99%的实例局部搜索可以找到最优解,其
他的实例改进的局部搜索容易找到最优解。
• 在一个区间里找一个最小值,怎么找。选 取初始值,梯度下降找到局部