算法设计与分析_9.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
3 2
1
0 1
9
4
12
3
5
12
1
2
3
1
0 1
4 9
12
3
5
10
∞
4
15 ∞
13
6
5
4
∞
4
4
15 ∞
13
6
5
4
∞
1
2
3
1
0 1
9
4
12
3
5
10
4 4
15 ∞
13
6
5
4
∞
1
2
3
1
0 1
4 9
12
3
5
8
4
4
15
19
13
6
5
4
17
1
3 2
1
0 1
9
4
12
3
5
8
4
4
15 19
13
6
5
4
17
1
2
3
1
0 1
以用变长的编码。
文件压缩
• 当编码在长度上变化时,我们规定一个字符的编 码不能是另一个字符编码的前缀(即词头),这 种码称为前缀码。
• 在算法结束时, 对于每个顶点v∈V, 均有λ[v ]为 源点到其距离。
最短路径问题
1. X←{1}; Y←V-{1} 2. 对每个v∈Y, 如果存在从1到v的边,则令λ[v ]
(v的标记)为边的长度;否则令λ[v ] =∞, 并 设λ[1]=0; 3. while Y≠{} 4. 有y∈Y, 使得λ[y ]为最小 5. 将y从Y移到X 6. 更新在Y中与y相邻的顶点的标记 7. end while
13.
λ[w] ← λ[y ] +length[y,w]
14.
end for
15. end for
Modified Dijkstra’s Algorithm
最小堆结构:
O(ElgV)
Prim’s Kruskal’s
文件压缩
• 一个字符串文件,我们希望尽可能多地压缩文件,但源文 件能够很容易地被重建。
6. end for
7. for j←1 to n-1
8.
令y∈Y, 使得λ[y ]为最小 //
n2次 或 n2/2
9.
X←X∪{y}
{将顶点y加入X}
10.
Y←Y-{y}
{将顶点y 从Y中删除}
11.
for 每条边(y,w)
//
E 次(有向)
12.
if w∈Y and λ[y ] +length[y,w]< λ[w ] then
dki,j=l[i, j] =min{dk-1i,j, dk-1i,k+ dk-1k,j}
若k = 0 若1≤k≤n
• 0/1 背包问题
– 设的V背[i包,j]的表物示品从的前最i项大{价u1,值u2,…,ui}中取出来的装入体积为j
V[i,j] = 0
若i=0或j=0
=V[i-1,j]
若j<si
=Max{V[i-1,j],V[i-1,j-si]+vi} 若j≥si
最短路径问题
• 设G=(V,E)是一个每条边有非负长度的 有向图,有一个特异顶点s称为源。 单源最 短路径问题,或者简单称为最短路径问题, 是要确定从s到V中每一个其他顶点的距离 (从顶点s到顶点x的距离定义为从s到x的最 短路径长度)。
• V={1,2,…, n}并且 s=1。
最短路径问题
• 应用贪心技术:
算法DIJKSTRA 输入:含权有向图G=(V,E),V={1,2,…, n}。 输出:G中顶点1到其他顶点的距离。
1. X={1};Y←V-{1}; λ[1 ] ←0
2. for y←2to n
3.
if y 相邻于1then λ[y ] ←length[1,y]
4.
else λ[y ] ←∞
5.
end if
9
4
12
3
5
8
4 4
15 19
13
6
5
4
13
1
3 2
1
0 1
9
4
12
3
5
8
4
4
15 19
13
6
5
4
13
1
2
3
1
0 1
9
4
12
3
5
8
4 4
15 17
13
6
5
4
13
1
2
3
1
0 1
4 9
12
3
5
8
1
2
3
1
0 1
9
4
12
3
5
8
4
4
15
17
13
6
5
4
13
4 4
15 17
13
6
5
4源自文库
13
DIJKSTRA算法
可基于动态规划思想求解的 问题与算法
• 计算有向图的传递闭包 Warshall 算法: r路ij(k)径置中为每1意一味个着中存间在顶一点条的从编第号i都个顶不点大到于第k j个顶点的路径,
rij(k)= rij(k-1) or rik(k-1) and rkj(k-1)
• 最优二叉查找树:
C[i,j]是在这棵树中成功查找的最小的平均查找次数
Last Section
可基于动态规划思想求解的 问题与算法
• 计算二项式系数
C(n,k) C(n 1,k 1) C(n 1,k)
• 最长公共子序列 L[i, j] = 0
=L[i-1, j-1] + 1 =max{ L[i, j-1], L[i-1, j]}
若i=0或j=0 若i>0, j>0 和ai= bj 若i>0, j>0 和ai≠ bj
考虑从键ai,…,aj (sorted)中选择一个根ak的所有可能的方法
j
C[i,
j]
min {C[i, k
ik j
1]
C[k
1,
j]}
si
ps
贪心算法
• 主要思想(可行、局部最优、不可取消)
• 分数背包问题 • 最短路径问题 • Dijkstra’s Algorithm • Prim’s • Kruskal’s • Huffman 算法与决策树
• 初始时, 将顶点分为两个集合X={1}和Y={2, 3,…, n}. 目的是让X包含这样的顶点集合:从源 点到这些顶点的距离已经确定。
• 在每一步中,选定源点到它的距离已经获得的一 个顶点y∈Y, 并将这个顶点移到X中。Y 中的每个 顶点有标记λ[y ], 它是只经过X中顶点的最短路 径的长度,一旦顶点y∈Y移到X中,与y相邻的每 个顶点w∈Y 的标记就被更新,这表示找到了经过 y到w的更短路径。
• 矩阵链相乘
min
C[i,
j] i
k
{C[i, k j
1] C[k,
j] rirk rj1}
可基于动态规划思想求解的 问题与算法
• 矩阵链相乘
min
C[i,
j] i
k
{C[i, k j
1] C[k,
j] rirk rj1}
• 所有点对的最短路径问题
– 做且n不次经迭过代编,号使大在于第k的k次任迭何代顶后点,的D最k [短i,j]路含径有的从长顶度点。i到顶点j,
• 用特定的比特串表示每个字符,称为字符的编码,文件的 大小取决于文件中的字符数n。我们可以使用一种定长编 码,对每个字符赋予一个长度同为m (m≥log2n)的比特串。
• 设件文中件字中符的ci的字频符度集,是即C文={件c1,中c2,c…i出, c现n}的, 又次设数f。(ci), 1≤i≤n,是文 • 由于有些字符的频度可能远大于另外一些字符的频度,所