5-第五章 减治法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.比较v和 A[x]
确定查找范围
5.6.3 二叉查找树的查找和插入
• 二叉查找树:左子树的值小于根顶点,右 子树大于根顶点。
小结
5.4 生成组台对象的算法
• 组合问题 1、计数 2、结构
组合问题
5.4.1 生成排列
用减一思想生成{1,2,…,n}所有排列。
Johnson-trotter算法
• 字典序---增序排队
5.4.2 生成子集
1、挤压序: 所 2、是否存在—种生成比特串的最小变化算法,使得每
一个比特串和它的直接前趋之间仅仅相差一 个比特 位。
n / 2 ,它要求找出这样一个元素,该元素比列表中的—半元素大,又比另—半元素
小。这个中间的值被称为中值,它在数理统计中是—个非常重要的量。
• 类似快速排序的分区做法
• 例
15 15
效率分析: 1)平均效率 2)最差效率
5.6.2 插值查找
插值查找用于有序数组,“插值”代替了折 半查找中的中间值 1.计算
• 最坏输入是一个严格递减的数组,这种输 入的比较次数是
• 最好的情况下(升序),在外部循环的每 次送代中,比较操作只执行一次
• 平均
5.2深度优先查找和广度忧先查找
• 什么叫图的遍历 从图的任意点出发沿着一些边访问图中的 所有顶点,且使每个顶点仅被访问一次,这就 叫图的遍历. • 我们来看一下图的遍历的两种方法: 1.深度优先搜索 2.广度优先搜索
第一种算法是深度优先查找的一个简单应用:执行一次DFS遍 历,并记住顶点变成死端(即退出遍历栈)的顺序。将该次序反过来 就得到了拓扑排序的一个解。
第二种算法基于减(减一)治技术的一个直 接实现:不断地做这样—件事,在余下的有向 图中求出一个源,它是一个没有输入边的顶点, 然后把它和所有从它出发的边都删除。
?最坏输入是一个严格递减的数组这种输入的比较次数是?最好的情况下升序在外部循环的每次送代中比较操作只执行一次?平均52深度优先查找和广度忧先查找?什么叫图的遍历从图的任意点出发沿着一些边访问图中的所有顶点且使每个顶点仅被访问一次这就叫图的遍历
第五章 减治法
普卢塔克说,萨特斯为了告诉他的士兵坚忍和智慧比蛮 力更重要的道理,把两匹马带到他们面前、然后让两个人拔光 马的尾毛。一个人是魁梧的大力士,他用力地拔了又拔,但一 点效果也没有;另一个人是一个精明的、长相狡捷的裁缝,他 微笑着,每次拔掉一根毛,很快就把尾巴拔得光秃秃的。
—E.Cobham Brewer, 《惯用语和寓言词典》,1898
减治技术利用了一种关系:一个问题给 定实例的解和同样问题较小实例的解之间 的关系。一旦建立了这样一种关系,我们 既可以从顶至下(递归地),也可以从底至上 (非递归地)地来运用。减治法有3种主要的 变种: 1) 减去个常量 2)减去个常数因子 3) 减去的规模是可变的
5.3 拓扑排序
有向图的DFS森林可能具有的全部类型的边:树向边 (ab,bc,de)、从顶点到祖先的回边(ba)、从顶点到树中 非子女子孙的前向边(ac),以及交叉边(de),所有不属于 前三种类型的边都属于交叉边类型。
用有向图来建模,如课程表,它的顶点代表 课程,有向边表示先决条件。按照这种次 序列出它的顶点,使得对于图中每一条边 来说,边的起始顶点总是排在边的结束顶 点之前。这个问题称为拓扑排序。
5.5.2 俄式乘法
5.5.3 约瑟夫斯问题
5.6 减可变规模算法
• 5.6.1 计算中值和选择问题
选择问题是求一个 n 个数列表的第 k 个最小元素的问题。这个数字 被称为第 k 个顺序统计量。当然,对于 k=1 或者 k=n 的情况,我们可以简单的妇描所讨论的列 表,然后分别找以最小或者最大的元素。该问题的一个更有意思的情况是在 k =
图和链接链表
5.2.1深度优先搜索
方法:从图中指定的起点v0出发(先访问v)访问 它的任意相邻接的顶点w1,再访问w1的任一 个未访问的相邻接顶点w2,如此下去,直到某 顶点已无被访问过的顶点,则返回一步找前 一个顶点的其他沿未被访问的邻接顶点,重 复以上过程直到所有的顶点都被访问.
DFS具体做法---用栈来跟踪深度优先查找的 操作 • 根据顶点的字母顺序来选择顶点作标记, 紧接着处理与当前顶点邻接的未访问顶点, 这个过程 持续,直到遇到一个死端---一个 无法通向未访问邻接顶点的顶点。 • 在第一次访问一个顶点的时候,我们把该 顶点入栈(也就是说,开始对该顶点访问时), 当它成为一个死端的时候,我们把它出栈 (也就是说,结束对这顶点的访问时)
5.5 减常因子算法
5.5.1 假币问题 在识别假币问题的多种版本中,我们考虑最 能够体现出减常因子 策略的那个版本。在n枚外 观相同的硬币中,有一枚是假币。在一架天平上, 我们可以比较仟意两组硬币。也就是说,通过观 察天平是向右倾、向左倾,还是停在当中,我们 可以判断出两组硬币重量是否相同,或者哪一组 比另一组更重,但我们不知道重多少。我们的问 题是,要求设计个高效的算法来检测出这枚假币。 该问题的一个较简单的版本——就是我们这里所 讨论的——假设假币比真币重还是比真币轻是已 知时的(我们假设假币较轻)。
减治法和分治的区别,如减治法
分治法
ቤተ መጻሕፍቲ ባይዱ
5.1 插入排序
• 用减一技术来对数组排序遵循这样的思路,先假设 对较小数织 A[0,1,…,n-2]排序的问题已经解决了。 下一步所需要做的就是在这些有序的元素中为A[n1]找到一个合适的位置,然后把它插入到那里. • 有3种合理的做法可以达到这个目的,它们各不相 同。 第一,从左到右扫描这个有序的子数组,直到遇 到第一个大于等于A[n-1]的元素,然后就把A[n-1] 插在该元素的前面。 第二,从右到左扫描这个有序的子数组。这两种 种算法被称为直接插入排序,或者简称为插入排序。 第三种做法是使用折半查找。
它按照一种同心圆的方式,首先访问所有和初始顶 点邻接的顶点,然所是离它两条边的所有未访问顶点, 以此类推,直到所有与初始顶点同在一个连通分量中 的顶点都访问过了为止。如果仍然存在未被访问的顶 点,该算法必须从图的其他连通分星中的任意顶点重 新开始。 使用队列(注意它和深度优先查找的区别)来跟踪 广皮优先查找的操作是比较方便的。该队列先从遍历 的初始顶点开始,将该顶点被标记为已访问。在每次 迭代的时候,该算法找出所有和队头顶点邻接的未访 问顶点,把它们标记为己访问,再把它们入队:然后, 将队头顶点从队列中移去。
DFS重要的基本应用包括检查图的连通性和无环性。 检查一个图中是否包含问路,也可以利用图的DFS森林形式的表 示法。
5.2.2 广度优先搜索
• 方法:从图指定的起点v0出发,访问与它相邻 的所有顶点w1,w2,.....然后再依次访问 w1,w2......邻接的尚未被访问的所有顶点,再 从这些顶点出发访问与它们相邻接的尚未 被访问的顶点,直到所有顶点均被访问过为 止.
相关文档
最新文档