《数据结构与算法分析》课件第8章-缩小规模策略.pptx

《数据结构与算法分析》课件第8章-缩小规模策略.pptx

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第八章缩小规模策略小规模问题的解经过某种组合可以较容易地得到原问题的解。解决这类问题的求解方法有:分治与递归、动态规划和贪心算法,这章将介绍分治与递归。分治与递归策略递归的典型应用分治策略的应用

缩小规模策略将一个难以直接解决的大问题,分解成多个规模较小的子问题,以便各个击破、分而治之。分治法:如果原问题可以分割为k个子问题,1<k≤n,且这k个子问题都可解,并可利用子问题的解计算出原问题的解,则可以采用分治法。递归:分治法产生的子问题往往是原问题的较小模式,常使用递归技术。

一个直接或间接调用自身的算法称为递归算法。递归策略定义特点需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。用有限的语句来定义对象的无限集合。使用条件①原问题可以通过转化为较小的子问题来解决,而子问题的求解方法与原问题相同,被处理的数据有规律地减少。②当子问题减小至一定程度时,调用自身算法的过程终止。递归需要有边界条件、递归推进部分和递归返回

递归策略整数划分问题将一个正整数n表示为一系列正整数之和:n?=?n1?+?n2?+?…?+?nk,其中,n1≥n2≥…≥nk≥1,k≥1。该表示称为n的一个划分;不同划分的个数称为划分数,记为p(n)。【例1】整数6的11种划分。6;5?+?1;4?+?2,4?+?1?+?1;3?+?3,3?+?2?+?1,3?+?1?+?1?+?1;2?+?2?+?2,2?+?2?+?1?+?1,2?+?1?+?1?+?1?+?1;1?+?1?+?1?+?1?+?1?+?1;

递归策略分析在正整数n的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n,m),则可以建立如下的递归关系:(1)q(n,1)=1,n≥1当最大加数n1不大于1时,只有一种划分形式:n=1+1+…+1(2)q(n,m)=q(n,n),m≥n最大加数n1不能大于n,因此q(1,m)=1(3)q(n,n)=1+q(n,n-1)正整数n的划分,由n1=?n的划分和n1≤n-1的划分组成(4)q(n,m)=q(n,m?-?1)+q(n?-?m,m),n>m1正整数n的最大加数n1不大于m的划分,由n1=m的划分和n1≤m-1的划分组成

递归策略计算q(n,m)的递归计算式

分治策略基本思想将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归求解这些子问题,并将子问题的解合并,则得到原问题解。分治法求解问题的特征(1)问题的规模缩小到一定的程度就可容易解决(2)问题可分解为若干个规模较小的相同问题(3)利用原问题分解出的子问题的解可合并为原问题的解(4)问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

分治策略分治法的一般步骤分解将要解决的问题划分成若干规模较小的同类问题求解当子问题划分得足够小时,用较简单的方法解决合并按原问题要求,将子问题的解逐层合并构成原问题解DataTypeDivide-and-Conquer(P){if(|P|=n0) Adhoc(P);dividePintosmallersubinstances;P1,P2,…,Pk;for(i=1;i=k;i++) y[i]=Divide-and-Conquer(Pi);returnMerge(y1,y2,…,yk);}分治算法设计模式

递归算法的典型应用数据的定义按递归定义,如斐波那契(Fibonacci)数列的求解问题解法按递归算法实现,如二叉树、广义表等数据的结构形式是按递归定义的,如Hanoi问题递归算法常用于解决下述问题:

递归算法的典型应用Hanoi塔问题问题描述借助B杆,将A杆的金片全部移到C杆,并仍保持原有顺序,要求在移动过程中不能大片压小片。

递归算法的典型应用过程分解(1)以C杆为中介,将前n-1个金片从A杆挪到B杆(2)将A杆上仅剩的第n个金片移动到B杆(3)以A杆为中介,将C杆上的n-1个金片移到B杆

递归算法的典型应用递归函数//将from杆上的n-1块金片以tmp为中移至to杆voidHanoi(intn,charfrom,chartmp,charto){if(n0){hanoi(n-1,from,to,tmp); //将from杆上的n-1块金片移至tmp杆printf(take%d块金片from%cto%c\n,n,from,t

文档评论(0)

酱酱 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档