第四章贪心算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章贪心算法
一、课本+作业
DIJKSTRA的主要思想
算法的思想是把中心定在起始顶点,向外层结点扩展,最终在目标顶点结束,停止扩展。设顶点集合为S,通过贪心选择,逐步扩充这个集合。一开始,集合S中所包含顶点仅为源点。设u为图G的某一结点,把从开始顶点到结点u,且中间经过的顶点均在集合S内的线路称为从源点到u的特殊路径。
创建一个数组SD,用于储存每个顶点所对应的最短特殊路径的长度。算法每次从u∈V-S 中取出具有最短特殊路长度的顶点u,将u添加到集合S中,与此同时,修改数组SD。当S包含了所有V中顶点时,SD就记录了从源到所有其它顶点之间的最短路径长度。
Dijkstra算法的时间复杂度为O(n2),空间复杂度随着选择的存储方式不同而有所变化,若存储方式为邻接矩阵时为O(n2)。在求解单源最短路径问题时,Dijkstra算法可以得到最优解,但由于它需要遍历众多结点,所以效率低。
历年试题
1.(2011年)试用Prim算法求解下面无向赋权图的最小生成树,指出最小生成树及该树中各边被选中的先后次序;写出算法的基本步骤。
2. (2010)1.分析Kruskal 算法的时间复杂度;
2. 试用下面的例子说明用Kruskal 算法求解最优生成树问题,并总结出算法的
基本步骤:
3.(2009)(原理习题有)
4. (2006) 设n p p p ,,,21 是准备存放到长为L 的磁带上的n 个程序,程序i p 需要的带
长为i a 。设L a n
i i >∑=1,要求选取一个能放在带上的程序的最大子集合(即其中含有
最多个数的程序)Q 。构造Q 的一种贪心策略是按i a 的非降次序将程序计入集合。 1). 证明这一策略总能找到最大子集Q ,使得∑∈≤Q
p i i L a 。
2). 设Q是使用上述贪心算法得到的子集合,磁带的利用率∑
∈Q
p i
i
L
a/可以小到何种程
度?
3). 试说明1)中提到的设计策略不一定得到使∑
∈Q
p i
i
L
a/取最大值的子集合(习题)
4.( 2009)