算法设计与分析研讨5.ppt

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

BFS 非递归算法 BFS 非递归算法 BFS 相关讨论 BFS 相关讨论 时间效率:同DFS 效率一样。前面讨论DFS的效率时,仅与图的存储 结构(邻接矩阵、邻接链表)有关,与 DFS 或 BFS 无关 应用1:检查图的连通性和无环性,本质上与DFS一样 应用2:求给定两个顶点的最短路径(边数最少,非带权图) 从两个给定的顶点之一开始BFS,当访问到另一个顶点,BFS 结束 从BFS 算法过程看,其正确性不言而喻,但数学上的证明并不简单 说明:这样的最短路径可能不只一条(考虑去掉BG边的图) BFS 树的一部分,确定了从 A 到 G 的最短路径(边数最少) A E B C D F G H A E B C F G 拓扑排序 拓扑排序 ( Topological Sort ) 概述 问题提出 假设要安排一系列任务,如教学计划中的安排各门课程的学习顺序, 项目中各子课题的研究顺序,建筑项目,……等等。每个任务只有 当 前提条件 具备时,才能去完成这个任务。举例如下: —— 只有当学完某课程的全部前修课程后,才能安排该课程的教学 拓扑排序 找到在满足前提条件情况下,各个任务如何安排的一个 线性序列 计算模型 —— 图(顶点:一个任务,边:该任务的前提条件) 1. 有向图:任务之间有先后关系 —— 边有方向 2. 无环图:若有环,回路中就会存在彼此矛盾的条件。(想一想) 不可能在不违反前提条件情况下,为这些任务安排一个 合理的顺序,问题无解(存在矛盾条件) 综合1、2,若拓扑排序问题有解,必须是 有向无环图 拓扑排序:有向无环图 有向无环图 无向图:仅有 2 种类型的边 —— 树边、回边 有向图:可有 4 种类型的边 1. 树边:AB BC DE 2. 回边:BA(无回边: 无环图) 3. 前向边(祖孙边) 当前顶点到孙子顶点的边 AC 4. 交叉边(横跨边) 上述 3 种类型以外的边 DC A E B C D 有向有环图 A E B C D A为起点的DFS森林 A C B E D 有向无环图 去掉BA边则为 有向无环图 拓扑排序算法:DFS法 例1 拓扑排序算法 拓扑排序 DFS 算法 【例1】5 门课程的安排,问题模型如图 A C B E D C 有两门前修课 A B,E 有两门前修课 C D , 必须先安排前修课程。因此,正确次序是: 先安排 A B,然后安排 C ;接下来安排 D, 最后安排 E . 即正确的线性序列序列为: ABCDE 或 BACDE (非唯一解) 任选一个 源顶点 开始 DFS 过程: 源顶点:没有入边,即无前提条件的边 —— 我们选 A 开始 DFS A 到 E 搜索完后,尚有未访问顶点 B,将 B 入栈,从 B 重新开始 DFS . 进栈序列:ACDEB 进栈逆序:BEDCA 出栈序列:EDCAB 出栈逆序:BACDE 问题模型图 B C A E D D F S 森林 拓扑排序算法:DFS 例2 DFS解拓扑排序 【例2】7 个任务的安排 2 1 6 3 7 5 4 2 1 6 3 7 5 4 DFS树 仅有树边 退栈线性序列:7 5 4 6 2 3 1 (或 7 5 4 3 6 2 1) 退栈线性逆序:1 3 2 6 4 5 7 (或 1 2 6 3 4 5 7) 解不是唯一的,与顶点选择策略即路径选择有关 拓扑排序的源删除算法 拓扑排序的源删除算法(减一法) 每次减去一个源顶点 若算法结束(无源顶点),尚有未访问顶点时,问题无解! —— 存在矛盾条件 顶点的删除顺序即拓扑排序的一个解(不唯一),本例 A B C D E 源删除算法与数据结构 1. 找出全部源顶点并入队。若无源顶点,算法停止。有未访问顶点? Yes —— 无解; No —— 输出解(记录的顶点序列) 2. 队头顶点出队并记录,删除与该顶点连接的所有边,返回 1 A C B E D C B E D C E D E D E 生成组合对象算法:生成排列 生成组合对象 组合对象:满足一定约束条件的集合 组合数学:指出组合对象有多少个 —— 组合数(通常呈指数级增长) 如何生成:本节内容 生成排列 (前面讲过蛮力法) 生成集合元素

文档评论(0)

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

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

1亿VIP精品文档

相关文档