第4章 基本搜索和遍历方法.

Slides:



Advertisements
Similar presentations
软饮料概述 人文艺术系 石惠舟. 什么是饮料? 饮料概述 饮料是指以水为基本原料,由 不同的配方和制造工艺生产出 来,供人们直接饮用的液体食 品。 饮料 饮料除提供水分外,由于在不 同品种的饮料中含有不等量的 糖、酸、乳以及各种氨基酸、 维生素、无机盐等营养成分, 因此有一定的营养。
Advertisements

三级偏软考点. 第一章必考点 1. 计算机的进位数制 (1) 计算机中所有数据是二进制 0,1 表示 (2) 在现实生活中人们普遍使用十进制 如何把十进制转换成计算机所识别的二 进制?整数是除 2 取余法,小数是乘 2 取 整法.
第五单元 酒水知识与酒吧服务 主题三 蒸 馏 酒 —— 中国蒸馏酒. 蒸馏酒是把经过发酵的酿酒原料,经过一次或多次的蒸馏过 程提取的高酒度酒液。
中考冲刺之 ——现代文阅读技巧2.
第四章 家庭財務報表及預算的編製與分析.
鬼太郎 身為幽靈族後裔一員的鬼太郎,他出生的時候,父母便雙亡,不過他的爸爸化身為眼珠,陪伴著他。而鬼太郎與他的同伴貓女、臭鼠人等,為了維持妖怪與人類間的和平,他們將一一消滅邪惡的妖怪,守護這世界的和平。
珠海市夏湾中学 曾雪静 引言: 清朝是中国最后一个封建王朝,共有12位皇帝。他们各有个的故事,有的开创了“盛世”有的则把清朝推向灭亡。下面,请看清朝列位皇帝简介 清朝皇帝史.
學生申訴管道 學生受教權的維護.
短歌行.
第七章 图 7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用
四資二甲 第三週作業 物件導向程式設計.
职业理想近距离 班级:13302班 14302班 主持人:指定同学主持 时间:12月12日 19日.
创建广东省现代教育技术 实验学校自查报告 斗门区乾务镇五山中心小学 2012年5月22日.
小学生游戏.
最大团问题 回溯法应用 作者:余新华 时间:
恩典更新 羅15:1-13.
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
树的基本概念 离散数学─树 南京大学计算机科学与技术系.
成员名单 陈丽 陈敏 杨娇 高丽莉 李亚金 吴沅娟 任津沙 张舒蓉.
非线性反馈移位寄存器探讨 戚文峰.
Chap5 Graph.
数据结构 第7章 图.
第六章 图(一).
第七章 图 (Graph)
Ch.7 图 图是一种复杂的非线性结构 应用:AI、工程、数学、生物、计算机 结点间的逻辑关系:任两个结点都可能相关
第七章 图 7.1 图的基本概念 7.2 图的存储表示 7.3 图的遍历 7.4 图的生成树 7.5 最短路径 7.6 拓扑排序
图(一).
第七章 图 1、图的基本概念 2、图的存储表示 3、图的遍历与连通性 4、最小代价生成树 5、最短路径问题 6、AOV网络和AOE网络.
图的遍历.
树和二叉树(三).
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第七章 图.
7.1 抽象数据类型图的定义 7.2 图的存储表示 7.3 图的遍历 7.4 最小生成树 7.5 重(双)连通图和关节点
第七章 图.
第七章 图 知识点2:图的存储结构.
奥林巴斯显微镜的维护保养.
第七章 图 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
第七章 图.
数据结构 芦溪中学 胡小妹.
第7章 图 7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用
第六章 基本检索与周游方法.
第七章 图.
动态规划(Dynamic Programming)
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
使用矩阵表示 最小生成树算法.
无向树和根树.
第 五 章 图 论 (第二部分) 1. 通路 2. 图的连通性.
第6章 图 本章中介绍下列主要内容: 图的定义 图的存储结构 图的遍历操作 图的几个典型问题.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
$9 泛型基础.
复习 图的定义和术语 图(Graph)、有向图、无向图、子图、有向完全图 、完全图、稀疏图、稠密图、权、网、邻接点、相关边、度、路径、路径长度、回路、简单路径、简单回路、连通、连通图、连通分量、强连通图、强连通分量、生成树 图的存储方法 给定一个图,画出邻接矩阵、邻接表 图的邻接矩阵和邻接表的存储算法.
单元17 钢 结 构 学习目标 (1)了解钢结构的特点。 (2)了解钢结构的发展现状。 (3)掌握钢结构的链接方式。
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
图(二).
知识点回顾 图的深度优先和广度优先遍历思想 图的深度优先遍历算法(用邻接表作为存储结构) 图的广度优先遍历算法(用邻接矩阵作为存储结构)
树和图 tree and graph 蔡亚星.
第七、八次实验要求.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
辅导课程十一.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
汽车电器与控制设备 第0章 绪论.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
4.2 图的存储结构(cont.) v1 v2 v3 v4 v5 vertex= v1 v2 v3 v4 v5 v
第2章 Java语言基础.
第六章 图.
树的基本概念.
1、图的基本概念 2、图的存储结构 3、图的遍历与连通性
最小生成树 最优二叉树.
第六章 直接成本法.
Presentation transcript:

第4章 基本搜索和遍历方法

资料来源:百度知道 与 http://cai.csu.edu.cn/jpkc/rengongzhineng/ 基本概念 人工智能 人工智能 研究如何使计算机去做过去只有人才能做的智能工作 人工智能是关于知识的学科――怎样表示知识以及怎样获得知识并使用知识的科学 计算机博弈 模式识别 美国火星探测车 人工智能研究 资料来源:百度知道 与 http://cai.csu.edu.cn/jpkc/rengongzhineng/

基本概念 问题的表示 状态空间法: 状态空间表示:图、树 状态空间法 问题的归约(与或图) 状态: 所求问题的各种可能情况 初始状态 基本概念 问题的表示 状态空间法 问题的归约(与或图) 状态空间法: 状态: 所求问题的各种可能情况 初始状态 目标状态 状态空间表示:图、树

基本概念 问题的解决 搜索 遍历 无知搜索:盲目、穷举 深度优先搜索(DFS) 广度优先搜索(BFS) D-搜索 有知搜索:启发式

2 图的搜索与遍历 有向图与其邻接表 1 2 ▲ 6 3 4 5 1 2 3 4 5 6 Struct Enode{ int adjVex; Enode* nextArc } Enode** a; 未访问、未检测(活结点)、已检测(死结点)、 扩展结点(E-结点)、活结点表

2 图的搜索与遍历 //图类 enum ColorType{White, Gray, Black}; class Graph { 2 图的搜索与遍历 //图类 enum ColorType{White, Gray, Black}; class Graph { public: Graph(int mSize); void DFS_Traversal(int* parent); //一维数组parent保存DFS生成森林 void BFS_Traversal(int* prarent); //一维数组parent保存BFS生成森林  protected: void DFS(int u, int* parent, ColorType* color);//递归DFS函数访问从u可达结点 void BFS(int u, int* parent, ColorType* color);//BFS函数访问从u可达结点 ENode** a; //生成指向ENode类对象的指针数组 int n; //图中结点数目 };

2 图的搜索与遍历 BFS规则 (记v为起始结点) BFS遍历在结果称为广度优先树(森林) 访问v,v入列成为活结点 2 图的搜索与遍历 BFS规则 (记v为起始结点) 访问v,v入列成为活结点 从队列中取下一个活结点为E-结点,依次访问其各邻接点(并入列成为活结点),v成为死结点; 重复上一步,直到队列中无活结点时结束 以FIFO队列作为活结点表 BFS遍历在结果称为广度优先树(森林) 双亲表示法 保存在一维数组parent中

O(n+e) 2 图的搜索与遍历 BFS示例 Parent数组: 1 2 3 4 5 6 1 2 3 4 5 6 -1 1 2 3 4 6 2 图的搜索与遍历 BFS示例 1 2 3 4 5 6 1 2 3 4 5 6 -1 1 2 3 4 6 5 Parent数组: O(n+e)

2 图的搜索与遍历 DFS递归过程 (记v为起始结点) DFS遍历结果为一课深度优先树 访问结点v,使之成为未检测结点 2 图的搜索与遍历 DFS递归过程 (记v为起始结点) 访问结点v,使之成为未检测结点 依次以v的未访问邻接结点为起始结点,进行DFS递归过程 此过程中活结点表隐含在系统堆栈中实现 DFS遍历结果为一课深度优先树 双亲表示法: 以一维数组parent记录

2 图的搜索与遍历 DFS示例 1 2 3 4 5 6 O(n+e)

根据深度优先树对图边分类 树边(粗线) 反向边 (B) 正向边(F) 交叉边(C) 约定无向图只有反向边和树边

D-搜索 (记v为起始结点) 访问v,v入栈成为活结点 从栈中取一个活结点为E-结点,依次访问其各邻接点(并入列成为活结点),v成为死结点; 重复上一步,直到栈中无活结点时结束 以堆栈作为活结点表

O(n+e) D-搜索示例 Parent数组: 1 2 3 4 5 6 1 2 ▲ 6 3 4 5 1 2 3 4 5 6 -1 1 2 3 D-搜索示例 1 2 ▲ 6 3 4 5 1 2 3 4 5 6 -1 1 2 3 4 6 5 Parent数组: O(n+e)

3 双连通图 双连通图 图G是双连通图等价于 图G的任意两个结点之间存在简单回路,等价于 图G中不包含关节点/边

无向连通图及双连通图

双连通图检测 关键在于检查图中是否存在关节点 逐个结点测试法 太费时 深度优先搜索法 双连通图的深度优先树有以下特征 根结点只有一个孩子 逐个结点测试法 太费时 深度优先搜索法 双连通图的深度优先树有以下特征 根结点只有一个孩子 非根结点u的每一颗子树上 均有反向边指向u的祖先

双连通图检测 性质4-3 设S=(V,T)是图G=(V,E)的一颗深度优先树,图中结点a是一个关节点,当且仅当 a是根,且a至少两个孩子

双连通图检测 相关定义 深度优先数d[u]是指结点u在深度优先搜索树中被遍历到的次序号。 程序中通过全局变量dtime记录 根据深度优先搜索树,定义low[u]如下: Low[u]=min{ d[u] , min{ Low[w], w为u的孩子 }, min{ Low[x], (u,x)是一条反向边} }

双连通图检测 最小深度优先数Low(u) 是指从u出发经过某条路径可以达到的其它结点的最低深度优先数。 这里某条路径是指以下情况: 自结点u出发通过一条反向边到达结点x 自结点u出发,经过u的孩子w,以及由w出发由树边组成的路径和一条反向边到达结点y。

双连通图检测 求图G的关节点的算法 对于非根结点u,若存在u的一个孩子w使Low[w]≥d[u],则u是一个关节点。

void Graph::DFS_low(int u, int p) { //u是起始结点,p是u的双亲结点 【程序4-4】 计算d和Low void Graph::DFS_low(int u, int p) { //u是起始结点,p是u的双亲结点 Low[u]=d[u]=time++; //Low[u]=d[u] for (ENode* w=a[u]; w; w=w->nextArc){ int v=w->adjVex; if (d[v]==-1) { //表示v尚未访问 DFS_low(v, u); if (Low[u]>Low[v]) Low[u]=Low[v];//<u, v>是树边 } else if (v!=p && Low[u]>d[v]) Low[u]=d[v]; //<u, v>是反向边 是否考虑了根结点有两个孩子的情况呢?

【程序4-5】 求双连通分量 void Graph::BiCom(int u, int p) { Low[u]=d[u]=time++; eNode e; for (ENode* w=a[u]; w; w=w->nextArc){ int v=w->adjVex; e.u=u; e.v=v; if(v!=p && d[v]<d[u]) s.Push(e); //边进栈 if (d[v]==-1) { BiCom(v, u); if(Low[v]>=d[u]){ cout<<endl<<"New bicommponent\n"; do { e=s.Top(); s.Pop(); if(u<v && e.u>e.v) Swap(e.u, e.v); else if(u>v && e.u<e.v) Swap(e.u,e.v); cout<<"("<<e.u<<","<<e.v<<")"; } while(e.u!=u || e.v!=v); } if (Low[u]>Low[v]) Low[u]=Low[v]; else if (v!=p && Low[u]>d[v]) Low[u]=d[v];

构造双连通图 边添加算法 For (图G的第个关节点a) { 设B1, B2,…,Bk为包含a的双连通分量; 令vi(vi ≠a)是Bi(1≤ i ≤ k)中的一个结点; 将边(vi,vi+1), 1 ≤ i ≤ k 添加到图G中; }

3. 问题归约(略) 与或图 与或树 与或树是否可解? 构建解树