朱全民-分治教案【信息技术】.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分治教案 朱全民 分治思想 所谓分治法就是将问题分而治之。有将问题一分为二,也有将问题一分为三或一分为N等份。对每一等份分别进行解决后,原问题就可以很快得以解决。因此一个问题能否用分治法解决,关键是看该问题是否能将原问题分成n个规模较小而结构与原问题相似的子问题。递归的解决这些子问题,然后合并其结果就得到原问题的解。当n=2时的分治法又称二分法。 分治框架 使用分治策略的问题常常要借助递归的结构,逐层求解。其过程大致如下: if 问题不可分then begin 直接求解; 返回问题的解; end else begin 从原问题中划出含1/n运算对象的子问题1; 递归调用分治法过程,求出解1; …… 从原问题中划出含1/n运算对象的子问题n; 递归调用分治法过程,求出解n; 将解1、解2、……、解n组合成整个问题的解; end; 归并排序 某数列存储在对序列A[1],A[2],……,A[n],现采用归并思想进行排序。 二分法 先将n个元素分成两个各含[n/2]个元素的子序列;再用归并排序法对两个子序列递归的排序;最后合并两个已排序的子序列以得到排序结果。在对子序列排序时,当其长度为1时递归结束。单个元素被视为是已经排好的序列。 下面我们来分析一下对两个已排好序的子序列A[P..Q]和A[Q+1..R],将它们合并成一个已排好的子序列[P..R]。 引入一个辅助过程merge(A,P,Q,R)来完成这一合并工作,其中A是数组,P,Q,R是下标。其方法是:每次选两个子序列中较小的一个元素加入到目标序列中,直到某一个子序列为空,最后把另一子序列中剩下的元素加入到目标序列中。 procedure Merge(var A: ListType; P, Q, R: Integer); {将A[P..Q]和A[Q+1..R],合并到序列A[P..R]} var i,j {左,右子序列指针} T: Integer; {合并后的序列的指针} Lt: ListType; {暂存合并的序列} begin T:= P; i := P; j := Q + 1; while T = R do begin{合并未完成} if(i =Q) and ((j R) or (A[i] = A[j])) then [ Lt[t] := A[i]; Inc(i);] else [ Lt[t] := A[J]; Inc(j);] inc(T); {合并后的序列的指针右移} end; A := Lt; {合并后的序列赋给A} end; 归并排序 procedure Merge_Sort(var A: ListType; P,R: Integer); var Q: Integer; begin if P R then begin Q := (P + R - 1) div 2; Merge_Sort(A, P, Q); Merge_Sort(A,Q+1,R); Merge(A, P, Q, R) end; end; 剔除多余括号 键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价。例如 , 分析 设待整理的表达式为(s1 op s2);op为括号内优先级最低的运算符(“+”,“-”或“*”,“/”); 1.左邻括号的运算符为“/”,则括号必须保留,即…/(s1 op s2)…形式。 2.左邻括号的预算符为“*”或“-”。而op为“+”或“-”,则保留括号,即…*(s1+s2)…或…-(s1+s2)…或…*(s1-s2)…或…-(s1-s2)… 3.右邻括号的运算符为“*”或“/”,而op为“+”或“-”,原式中的op运算必须优先进行,因此括号不去除,即(s1+s2)*… 除上述情况外,可以括号去除,即…s1 op s2…等价于…(s1 op s2)… 工作量排序 有一实数序列A[1]、A[2] 、A[3] 、…A[n-1] 、A[n],若i j,并且A[i] A[j],则称A[i]与A[j]构成了一个逆序对,求数列A中逆序对的个数。n≤10000。 分析 不难想到一个非常简单的算法——穷举算法,即对数组中任意的两个元素进行判断,看它们是不是构成“逆序对”,因此这种算法的时间复杂度为O(N2)。 要提高解题的时间效率,我们很容易想到分治思想,

文档评论(0)

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

1亿VIP精品文档

相关文档