noip动态规划1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由常识知,最短路有一个重要特性:最短路上的任一(后部)子
路也是最短的。即
若 A---B3---C1---D1---E 是 A---E 最短,
则
B3---C1---D1---E 是 B3---E 最短路,
C1---D1---E 也是C1---E 最短路.
利用最短路的这一特性,构造寻找 A---E 最短路的方法,即为:
5
B3 6
A
B
阶段0
阶段1
C1
1 2
2
C2 2
3 C3 3
C
阶段2
D1 2
D2 3 4
D3 D
阶段3
0
E
E
阶段4
我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。 在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系
dis[k][x]=
min{ d[iy]s m[x a ,y]p (x,y) G }
从最后一段开始,即 D---E 段开始,用由后向前逐步逆推的方法,
求出各点到 E 的最短路线,最后求出从 A 点到 E 点的最短路—
—逆序法。
(动态规划的方法是从终点逐段向始点方向寻找最短路线的一种方法。)
➢基本概念
一、阶段和状态 1、阶段k:将所给问题的过程,按时间或空间特征分解成若
干相互联系的阶段,以便按次序去求每阶段的解。设阶段变量 为k。阶段是问题的属性。多阶段决策问题中通常存在着若干 个阶段。在一般情况下,阶段是和时间有关的,但是在很多问 题中,阶段和时间并无直接关系。从阶段的定义中,可以看出 阶段的两个特点,一是“相互联系”,二是“次序”。阶段之 间相互联系的方式是通过状态和状态转移体现的。
7
5
B1
6 3
10
A
4
7
B2
4
6
2 85
B3 6
3
C1
1 2
42
C2 2
63
C3
3
2
D1 2
3
0
D2 3
E
44
D3
由此得出程序 : dis[E]←0; for k←3 downto 0 do
for x取遍k阶段的所有城市do
begin dis[x]←∞; for y取遍k+1阶段的所有城市do
if dis[y]+map[x,y]<dis[x] then dis[x]←dis[y]+map[x,y]; end;{for} 输出dis[a];
noip动态规划1
➢动态规划
➢ 与递归程序相类,将对问题求解分解为对子问 题求解;不同之处在于把子问题的解存起来, 用空间换时间。
➢ 例:Fibonacci数
F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2); 递归: F(n-1)和F(n-2)分别求到底一次 动态规划:用数组将前n-1个数存起来,每次只用
阶段3
0
E
E
阶段4
我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。 在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系
dis[k][x]=
min{ d[iy]s m[x a ,y]p (x,y) G }
y k 1 阶段的城市集
dis[4][E]=0
k=4,3…,0,其中dis[k][x]指k阶段的城市x。
7
5
B1
6 3
A
4
7
B2
4
6
2 85
B3 6
A
B
阶段0
阶段1
3
C1
1 2
42
C2 2
63 C3 3
C
阶段2
2
D1 2
3
D2 3 44 D3 D
阶段3
0
E
E
阶段4
我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。 在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系
dis[k][x]=
dis[k][x]=
min{ d[iy]s m[x a ,y]p (x,y) G }
y k 1 阶段的城市集
dis[4][E]=0
k=4,3…,0,其中dis[k][x]指k阶段的城市x。
5
B1
6 3
A
4 B2 4 6
2
5
B3 6
A
B
阶段0
阶段1
3
C1
1 2
42
C2 2
63 C3 3
C
阶段2
2
D1 2
3
D2 3 44 D3 D
阶段3
0
E
E
阶段4
我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。 在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系
dis[k][x]=
min{ d[iy]s m[x a ,y]p (x,y) G }
y k 1 阶段的城市集
dis[4][E]=0
k=4,3…,0,其中dis[k][x]指k阶段的城市x。
min{ d[iy]s m[x a ,y]p (x,y) G }
y k 1 阶段的城市集
dis[4][E]=0
k=4,3…,0,其中dis[k][x]指k阶段的城市x。
7
5
B1
6 3
10Βιβλιοθήκη Baidu
A
4
7
B2
4
6
2 85
B3 6
A
B
阶段0
阶段1
3
C1
1 2
42
C2 2
63 C3 3
C
阶段2
2
D1 2
3
D2 3 44 D3 D
一个加法 F[n] = F[n-1]+F[n-2] 即可。
➢ 这个程序的效率如何呢?我们可以看到,每次除了已经访问过的城市外, 其他城市都要,所以时间复杂度为W(n!),这是一个“指数级”的算法。 那么还有没有效率更高的解题方法呢?
➢ 首先,我们来观察上述算法。在求B1到E的最短路径的时候,先求出从C2 到E的最短路径;而在求B2到E的最短路径的时候,又求了一遍从C2到E 的最短路径。也就是说,从C2到E的最短路径求了两遍。两样可以发现, 在求从C1、C2到E的最短路径的过程中,从D1到E的最短路径也被求了两 遍。而在整个过程中,从D1到E的最短路径被求了四遍,这是多么大的一 个浪费啊!如果在求解的过程中,同时将求得的最短路径的距离“记录在 案”,以便将来随时调用,则可以避免这种重复计算。至此,一个新的思
y k 1 阶段的城市集
dis[4][E]=0
k=4,3…,0,其中dis[k][x]指k阶段的城市x。
5
B1
6 3
A
4 B2 4 6
2
5
B3 6
A
B
阶段0
阶段1
C1
1 2
2
C2 2
3 C3 3
C
阶段2
2
D1 2
3
D2 3 44 D3 D
阶段3
0
E
E
阶段4
我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。 在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系
路产生了,即由后往前依次推出每个Dis值,直到推出Dis[A]为止。
A
阶段0
B
阶段1
C
阶段2
D
阶段3
E
阶段4
阶段的划分具有如下性质:
⑴阶段i的取值只与阶段i+1有关,阶段i+1的取值只对阶段i的取值 产生影响;
⑵每个阶段的顺序是确定的,不可以调换任两个阶段的顺序。
5
B1
6 3
A
4 B2 4 6
2