数据结构与算法10剖析.ppt





《数据结构与算法10剖析.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法10剖析.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章介绍了算法设计策略和应用实例,主要目的有两个:首先,让读者知道每种算法的适用条件,即何时可以使用和何时不能使用某种算法设计策略;其次,让读者学习基本的算法设计策略,即掌握如何描述自己的问题和高效、快速地解决问题。本章将进一步介绍五种常用算法设计策略的基本思想和实现方法,这些策略包括分治策略、贪心策略、动态规划策略、回溯策略和分支限界策略,以及它们的具体应用实例。10.1 分治策略分治策略10.1.1 概述概述10.1.2 算法设计步骤和程序模式算法设计步骤和程序模式10.1.3 分治策略应用实例分治策略应用实例 分治策略是一类算法设计策略,它将原问题分解成若干部分,从而产生若干子问题,这些
2、子问题互相独立且与原问题类型相同,然后解决这些子问题,最后把这些子问题的解合并成原问题的解。分治策略所能解决的问题,一般具有以下三个特征:n原问题可以分解成规模较小、相互独立和类型相同的子问题;n子问题的规模缩小到一定的程度,就不需要再分解,可以很容易地求解;n所有子问题的解能够合并成原问题的解。10.1 10.1 分治策略分治策略分治策略分治策略10.1.1 概述概述如图10-1所示,采用分治策略的算法设计都包括分解、求解和合并三个步骤:(1)分解:将原问题分解为若干个规模较小、相互独立、与原问题类型相同或相似的子问题;(2)求解:若子问题缩小到容易解决的规模,则直接求解,否则递归地求解子问
3、题;(3)合并:将各个子问题的解合并为原问题的解。10.1 分治策略分治策略10.1.2 算法设计步骤和程序模式算法设计步骤和程序模式图10-1 分治策略示意图【例10-1】矩阵乘积问题。因为矩阵可以方便地表示两个集合中元素之间的关系,所以被用于通信网络和交通运输系统等模型,在这些模型中经常用到矩阵的乘法。根据矩阵乘积的定义,两个n阶矩阵乘积的时间复杂度为O(n3)。Strassen根据分治策略设计矩阵乘积的算法,降低时间复杂度。假设n为2的整数幂,A、B、C都是n阶的矩阵,每个矩阵可以分解成4个n/2阶的矩阵。Strassen计算如下7个矩阵。10.1 分治策略分治策略10.1.3 分治策略
4、应用实例分治策略应用实例Strassen计算如下7个矩阵。最后,矩阵乘积的结果由7个矩阵得出。10.1 分治策略分治策略10.1.3 分治策略应用实例分治策略应用实例分析:按照矩阵的定义,两个n阶矩阵乘积中有n2个元素,计算每个元素需要n次乘法和(n-1)次加法,所以需要n3次乘法和n2(n-1)次加法,其时间复杂度为O(n3),而通过分治策略设计的矩阵乘积算法可以降低时间复杂度为O(n2.81)。10.1 分治策略分治策略10.1.3 分治策略应用实例分治策略应用实例【例10-2】计算一个数列的逆序数量。例如,已知一个数列3、1、2、5、4,则其中存在三个逆序:(3,1),(3,2),(5,
5、4),如图10-2所示。穷举法的用时为O(n2),而采用分治策略设计的算法时间复杂度为O(nlogn)。采用分治策略计算逆序数量的基本思想:假设数列保存在数组a中,将数组a中的元素划分成大致相等的前后两部分a1和a2,然后分别计算a1和a2中逆序的数量,最后计算逆序对(ai,aj)的数量,其中ai是a1中的元素,aj是a2中的元素。10.1 分治策略分治策略10.1.3 分治策略应用实例分治策略应用实例10.2 贪心策略贪心策略贪心策略是比较容易的算法设计策略,虽然它看上去既直观又简单,但是它却可以广泛地应用于很多问题的求解,如最短路径问题、最小生成树、Huffman编码、作业调度问题等。本节
6、主要介绍贪心策略的基本知识,然后给出了贪心策略应用实例。10.2 贪心策略贪心策略10.2.1 最优化问题与最优化原理最优化问题与最优化原理10.2.3算法设计步骤及程序模式算法设计步骤及程序模式10.2.2贪心策略概述贪心策略概述10.2.4贪心策略应用实例贪心策略应用实例1.最优化问题最优化问题最优化问题是在满足一定的限制条件下,对于一个给定的优化函数,寻找一组参数值,使得函数值最大或最小。每个最优化问题都包含一组限制条件和一个优化函数,符合限制条件的求解方案称为可行解,使优化函数取得最大(小)值的可行解称为最优解。10.2 10.2 贪心策略贪心策略贪心策略贪心策略10.2.1 最优化问
7、题与最优化原理最优化问题与最优化原理 建运动场的问题可以抽象为最优化问题:(1)限制条件是建筑材料为300米。设x和y分别是矩形的长和宽,限制条件为:x+2y0,y0。(2)代表问题解的优劣是矩形面积,即优化函数表示:f(x,y)=xy。任何一组满足限制条件“x+2y=300”的x和y都是可行解,而使“xy”最大的是最优解。10.2 10.2 贪心策略贪心策略贪心策略贪心策略10.2.1 最优化问题与最优化原理最优化问题与最优化原理n图10-3 拟建运动场示意图 2.2.最优化原理最优化原理 1951年,美国数学家R.E.Bellman等人根据多阶段决策问题的特点,提出了解决这类问题的最优化原
8、理(Principle of optimality)。最优化原理的数学语言描述为:假设为了解决某一优化问题,需要依次作出n个决策D1、D2、Dn。如果这个决策序列是最优的,那么对于任何一个整数k(1 k n),则Dk+1、Dk+2、Dn也是最优的,因为不论前面k个决策是怎样的,以后的最优决策只取决于前面决策所确定的当前状态。10.2 10.2 贪心策略贪心策略贪心策略贪心策略10.2.1 最优化问题与最优化原理最优化问题与最优化原理 贪心策略通过一系列步骤来构造问题的解,每一步都做出当前来看最好的选择,扩展已知的部分解,直到获得问题的完整解。这种“当前来看最好的选择”的策略就是该策略名称的来源
9、。贪心策略求解的问题一般具有以下两个重要的性质n最优子结构性当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,也称此问题满足最优化原理。问题的最优子结构性质是该问题可以用贪心策略或者动态规划策略求解的关键特征。n贪心选择性若一个问题的全局最优解可以通过一系列局部最优的选择,即贪心选择来获得,则称该问题具有贪心选择性。10.2 贪心策略贪心策略10.2.2贪心策略概述贪心策略概述 贪心选择性可从如下三个方面来理解:n可行性,即贪心选择必须满足问题的约束;n局部最优性,即贪心选择是当前步骤中所有可行选择中最佳的局部选择;n不变性,即一旦做出选择,在算法的后面步骤中就无法改变。1
10、0.2 贪心策略贪心策略10.2.2贪心策略概述贪心策略概述n总结 贪心策略求解的问题需要具备两个性质:第一,最优子结构性质;第二,贪心选择性质。第一条性质是应用贪心策略的基础,而第二条性质是决定使用贪心策略的关键。具备第一条性质的问题,如果不具备贪心选择性,而是具备子问题重叠性,则考虑用动态规划策略设计算法。10.2 贪心策略贪心策略10.2.2贪心策略概述贪心策略概述10.2 贪心策略贪心策略n贪心策略的算法设计步骤一般分为四步:n建立数学模型来描述问题;n把求解的问题分成若干个子问题;n求解子问题,得到子问题的局部最优解;n通过贪心选择,扩展子问题的局部最优解,直到构成问题的完整解。10
11、.2.3算法设计步骤及程序模式算法设计步骤及程序模式10.2 贪心策略贪心策略贪心策略的程序模式一般为:贪心策略的程序模式一般为:Greedy(C)/C是问题的输入集合,即候选集合 S=;/初始解集合为空集while(not Solution(S)/集合S没有构成问题的一个解 x=Select(C);/在候选集合C中做贪心选择if Feasible(S,x)/判断集合S中加入x后的解是否可行S=S+x;C=C-x;return S;10.2.3算法设计步骤及程序模式算法设计步骤及程序模式10.2 贪心策略贪心策略 【例10-3】用贪心策略求解活动安排问题。设有n个活动的集合E=1,2,n,其中
12、每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si 和结束时间fi 且si B1-C1-D,其距离是12+13+11=36。此时,贪心策略就不能解决该问题了。10.3.1 概述概述图10-6 贪心策略不适用的问题10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略n多阶段决策问题多阶段决策问题n如果一类活动过程可以分为若干个互相联系的阶段,在每一个阶段都需做出决策(采取措施),一个阶段的决策确定以后,常常影响到下一个阶段的决策,从而就完全确定了一个过程的活动路线,则称它为多阶段决策问题。n最优策略最优策略n对于多
13、阶段决策问题,各个阶段的决策构成一个决策序列,称为一个策略。策略不同,效果也不同,多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使其在预定的标准下达到最好的效果。n动态规划的本质动态规划的本质n动态规划本质上是多阶段决策过程。将问题的过程分成几个相互联系的阶段,从而把一个大问题转化成一组同类型的子问题,然后逐个求解。10.3.2动态规划策略的相关概念动态规划策略的相关概念10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略n动态规划的基本术语动态规划的基本术语n阶段与阶段变量:把一个问题的过程恰当地分为若干个相互联系的阶段,以便按一定的次序去求解。阶段是按问
14、题的时间或空间的自然特征来划分的,把描述阶段的变量称为阶段变量(使用字母k表示),阶段变量可以是年、月、日、路段等。用动态规划方法解题,原问题必须能划分为若干阶段。n状态、状态变量与状态允许集合:状态表示每个阶段开始所处的自然状况或客观条件,通常一个阶段有若干个状态,描述过程状态的变量称为状态变量,常用sk表示第k阶段的状态变量,状态变量sk的取值集合称为允许状态集合,用Sk表示。在动态规划问题中,状态是划分阶段的依据,状态的变化就意味着阶段的推移。因此,解题时首先应明确每一阶段开始时的一切可能状态。n决策、决策变量和决策允许集合:表示当过程处于某一阶段的某个状态时,可以作出不同的决定,从而确
15、定下一阶段的状态,这种决定称为决策。描述决策的变量,称为决策变量,使用uk(sk)表示第k阶段当状态为sk时的决策变量。在实际问题中,决策变量的取值往往限制在一定范围内,此范围称为允许决策集合。使用Dk(sk)表示第k阶段从状态sk出发的允许决策集合,则有uk(sk)Dk(sk)。10.3.2动态规划策略的相关概念动态规划策略的相关概念10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略n动态规划的基本术语动态规划的基本术语n状态转移方程:是确定过程由一个状态到另一个状态的演变过程,描述了状态转移规律。给定k阶段状态变量的值后,如果这一阶段的决策变量一经确定,第k+1阶段的状态
16、变量也就完全确定。n指标函数和最优值函数:用于衡量所选定策略优劣的数量指标称为指标函数,最优指标函数记为fk(sk),它表示从第k段状态sk采用最优策略到过程终止时的最佳效益。10.3.2动态规划策略的相关概念动态规划策略的相关概念10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略n动态规划策略的算法设计步骤一般分为五步动态规划策略的算法设计步骤一般分为五步n建立数学模型描述问题n划分阶段,选择状态,注意阶段一定要是有序的n确定决策,并写出状态转移方程n根据指标函数和最优值函数,写出递推方程,包括边界条件n计算最优值的信息。如果需要,构造问题的最优解10.3.3算法设计步骤及
17、程序模式算法设计步骤及程序模式10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略 【例10-7】使用动态规划策略求解图10-6的最短路径问题。10.3.4动态规划策略应用实例动态规划策略应用实例10.3 10.3 动态规划策略动态规划策略动态规划策略动态规划策略 把从A到D的全过程分成3个阶段,用k表示阶段变量,表10-4是各阶段的初始状态和可供选择的道路。其中,可供选择的道路描述了状态转移情况。10.3.4动态规划策略应用实例动态规划策略应用实例表10-4 阶段划分阶段k初始状态可选择道路k=1AAB1、AB2k=2B1B1C1、B1C2、B1C3B2B2C1、B2C2、B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 10 剖析

限制150内