当前位置:文档之家› 第四章贪心算法

第四章贪心算法

第四章贪心算法
第四章贪心算法

第四章贪心算法

一、课本+作业

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)

相关主题
文本预览
相关文档 最新文档