则p(ak)是问题P(k+1)的解,
其中p(ak)是对ak的某种运算或处理
为求问题P(n)的解an,先求问题P(n–1)的解an-1
再对an-1进行p(an-1)运算或处理,得到an
为求问题P(n–1)的解an-1,先求问题P(n–2)的解an-2
再进行p(an-2)运算或处理,得到an-1
如此等等,不断地进行递归求解,直到P
(1)的解a1为止
当得到P
(1)的解之后,再回过头来,不断地把所得到的解进行p运算或处理,直到得到P(n)的解为止
分治法:
对于一个规模为n的问题p(n),可以把它分解为k个规模较小的子问题,这些子问题相互独立,且结构与原来问题的结构相同。
在解这些子问题时,又对每一个问题进一步的分解,直到某个阀值n0为止。
递归地解决这些子问题,再把各个子问题的解合并起来,就得到原来问题的解。
分治法设计的3个步骤:
1)划分步:
把输入的问题实例划分为k个子问题。
尽量使k个子问题的规模大致相同。
例如,k=2,如最大最小问题
取其中的一部分,而丢弃另一部分,如二叉检索问题用
分治法处理的情况
2)治理步:
由k个递归调用组成
3)组合步:
把k个子问题的解组合起来
算法思想、应用:
快速排序(数据结构P269):
把序列就地划分为两个子序列,使第一个子序列的所有元素都小于第二个子序列的所有元素,不断地进行这样的划分,最后构成n个子序列,每个子序列只有一个元素,这时,整个序列就是按递增顺序排序的序列了
不稳定
选择算法:
(P125)
1)选择问题:
用递归方法以O(n)时间选取数组的中值元素、或任意的第k小元素的算法
2)选择问题的思想方法:
在递归调用的每一步,放弃固定部分的元素,对其余元素进行递归,使问题的规模以几何级数递减
残缺棋盘问题(P131):
把棋盘划分为四个区域,每个区域是一个2k-1×2k-1个方格的子棋盘,其中
有一个是残缺子棋盘。
用一个L型三格板覆盖在其余三个非残缺子棋盘的交界处,把覆盖一个2k×2k个方格的残缺棋盘,转化为覆盖4个2k-1×2k-1个方格的残缺子棋盘。
对每一个子棋盘继续进行这样处理,直到要覆盖的子棋盘转化为2×2个方格的残缺子棋盘为止。
这时只要用一个L型三格板覆盖三个非残缺方格即可。
第五章(考一个算法题)
可行解:
满足约束方程的向量
最优解:
使目标函数达极值的向量
贪婪发的设计思:
贪婪算法采用的是逐步构造最优解的方法。
从某个初始状态出发,根据当前局部的而不是全局的最优决策(因此所构造的可行解不一定是问题的最优解),以满足约束方程为条件、以使得目标函数的值增加最快或最慢为准则,选择一个能够最快地达到要求的输入元素(选择一旦做出,就不再更改),以便尽快地构成问题的可行解。
作出这个局部最优决策所依照的标准称为贪心准则。
贪婪发求解步骤:
首先根据问题确定约束条件和贪心准则,然后根据贪心准则获得当前每一步的最优解,最终得出解向量。
贪婪法求解的问题需满足2个性质:
1)贪心选择性质:
指所求问题的整体最优解可以通过一系列局部最优的选择来达到
2)最优子结构性质:
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
算法思想、应用:
狄斯奎诺:
(P146)
贪心算法:
Dijkstra提出按路径长度递增的次序产生最短路径。
贪心准则:
使当前已经加入的所有路径的长度之和最小。
为了符合这一准则,其中每一条单独的路径都必须具有最小的长度。
最小生成树的应用:
(P151)克鲁斯卡尔,普里姆
哈夫曼中的一个基本概念(P159)
第六章
最优性原理:
无论过程的初始状态和初始决策是什么,其余决策都必须相对于初始决策所产生的状态,构成一个最优决策序列
多段图的概念、应用、求最短路径
有向连通赋权图G=,顶点集合V划分成k个不相交的子集vi,1ik,k≥2,使得E中的任一边(u,v),必有uvi,vvi+m,m≥1,称G为多段图。
数塔问题的应用:
如图所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的数值和最大。
算法思想、应用:
0/1背包(P190)
第七章(考一个算法题,一个简答题)
回溯法的基本思想:
在确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。
这个开始结点就成为一个活结点,同时也成为当前的扩展结点。
在当前的扩展结点处,搜索向纵深方向移至一个新结点。
这个新结点就成为一个新的活结点,并成为当前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。
换句话说,这个结点不再是一个活结点。
此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。
回溯法的求解步骤
1)对所给定的问题,定义问题的解空间
2)确定状态空间树的结构
3)用深度优先搜索方法搜索解空间,用约束方程和目标函数的界对状态空间树进行修剪,生成搜索树,取得问题的解。
状态空间树:
问题解空间的树形式表示
活结点:
所搜索到的结点不是叶结点,且满足约束条件和目标函数的界,其儿子结点还
未全部搜索完毕
扩展结点:
正在搜索其儿子结点的结点,它也是一个活结点;
死结点:
不满足约束条件、目标函数、或其儿子结点已全部搜索完毕的结点、或者叶结点。
算法思想、判定函数,如何判定(约束方程)
n后问题(P208)
图的着色问题(P212)
哈密尔顿回路问题(P216)
简答题考算法思想之类的。
应用题考排序、以上各种算法的应用(要求写求解步骤嗯,排序只求移动次数,不求比较次数)。
算法题预测题:
*1设计一个分支算法,求二叉树的高度。
intHeight(BTreet){
inth1,h2;
if(t==NULL)return0;
else{
h1=Height(t->lchild)+1;
h2=Height(t->rchild)+1;
returnh1>h2?
h1:
h2;
}
}
*2假定用面值为2角5分、1角、5分、1分的硬币,来支付n分钱。
设计一个算法,使付出的枚数最少(n由键盘输入)
voidsolve(intp[],intx[],intn){
inti;
for(i=0;i<4;i++){
x[i]=n/p[i];
n=n%p[i];
}
}
*3对于给定的邮箱网G,求网中指定的顶点v到其余各顶点的最短路径。
P147
*4n后问题(P210)
5图的着色问题(P214)
6哈密尔顿回路问题(P217)
THANKS!
!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考