20162329 2017-2018-1 《程序设计与数据结构》第十一周学习总结
第十一周学习总结
一、学习目标
了解图的分类
了解图的遍历
常用图算法
图的实现策略
二、学习内容
1.图的分类
① 无向图:
表示边的顶点对是无序的图被称为无向图
无向图中若任意两个顶点间都有一条边的话该图就被称为完全图
② 有向图:
图中的边是顶点的有序对的图称为有向图
有向图中如果任意两个顶点间都有路径相连该图被称为连通图
③ 带权图:
在有向图或无向图中若每条边都对应一个权值则称为带权图
2.图的遍历
① 深度优先:
深度优先遍历也叫深度优先搜索(depth-first traversal)。它的遍历规则:
不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。
如图:从V0开始遍历
遍历分析:V0有两个邻接点V1和V2,选择下标最小的V1遍历。接着从V1开始深度遍历,V1只有邻接点V3,也就是没有选的:遍历V3。接着从V3开始遍历,V3只有邻接点V0,而V0已经被遍历过。此时出现了上面提到的情况一,开始回溯V1,V1无未被遍历的邻接点,接着回溯V0,V0有一个未被遍历的邻接点V2,新的一轮深度遍历从V2开始。V2无邻接点,且无法回溯。此时出现了情况二,检测visited[i],只有V4了。深度遍历完成。
② 广度优先:
广度优先遍历也叫广度优先搜索(breadth-first traversal)。它的遍历规则:
1.先访问完当前顶点的所有邻接点。(应该看得出广度的意思)
2.先访问顶点的邻接点先于后访问顶点的邻接点被访问。
同样的图:从V0开始遍历
遍历分析:V0有两个邻接点V1和V2,于是按序遍历V1、V2。V1先于V2被访问,于是V1的邻接点应先于V2的邻接点被访问,那就是接着访问V3。V2无邻接点,只能看V3的邻接点了,而V0已被访问过了。此时需检测visited[i],只有V4了。广度遍历完毕。
3.常用图算法
最小生成树
因为树总是图,对于有些图来说,图本身就是一颗生成树,所以这样的图的生成树中将包含全部的边。
最小生成树是其所含边的权值之和小于等于图的任意其他生成树的边的权值之和的生成树。
通常构造最小生成树的算法有两种:
** ① Prim算法:**
它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。因为有N个顶点,所以该MST就有N-1条边,每一次向集合V中加入一个点,就意味着找到一条MST的边。
** ② Kruskal算法:**
假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有 n-1条边为止。
4.图的实现策略
① 邻接表:
对于图来说,因为每个结点可以通过最多n-1条边与其他结点相连,所以最好使用链表来保存每个结点的边,这个链表就称为邻接表。对于带权图,每条边应该用包含了权值的三元组来保存。对于无向图,边(A,B)在顶点A和顶点B的两个邻接表中都应该出现。
② 邻接矩阵:
用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵。对无向图(无向简单图)而言,邻接矩阵一定是对称的,而且对角线一定为零,有向图则不一定如此。
三.代码托管
四.点评模板:
- 博客中值得学习的或问题:
- 界面很好看
- 问题分析可以更详细
其他
希望我们结对在这学期能相互促进,技术更上一层楼。本周结对学习情况
- 20162302
- 结对学习内容
- 一起讨论学习。
五.学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 10/20 | 了解数据结构及算法 |
第二周 | 664/664 | 2/3 | 10/20 | 系统的学习了查找和排序 |
第五周 | 1333/1997 | 2/5 | 15/60 | 栈数据结构的学习 |
第七周 | 812/3035 | 2/7 | 15/80 | 树的学习和实现 |
第九周 | 1364/4399 | 2/9 | 15/110 | 二叉查找树、哈夫曼树、堆 |
第十一周 | 554/4953 | 1/10 | 15/140 | 图的理解实现 |
参考资料
《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导
数据结构:图的遍历--深度优先、广度优先
邻接矩阵
转载于:https://www.cnblogs.com/Zhangxusheng/p/7862311.html
20162329 2017-2018-1 《程序设计与数据结构》第十一周学习总结相关推荐
- 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结
20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...
- 20172304 《程序设计与数据结构》第九周学习总结
20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...
- 20162302 《程序设计与数据结构》第一周学习总结
20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...
- 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结
学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...
- 20172304 《程序设计与数据结构》 第二周学习总结
20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...
- 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
20162329 2017-2018-1 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.学习目标 了解集合的概念 了解并使用抽象数据类型 初步了解使用Java泛型 学习栈这种 ...
- 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结
第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...
- 20162303《程序设计与数据结构》第一周学习总结
学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...
- 20162330 2017-2018-1《程序设计与数据结构》第二周学习总结
2017-2018-1 学习总结目录: 1 2 3 5 6 7 9 10 11 12 目录 0. 本周学习内容总结 0.1 Comparable接口与Comparator接口的使用 0.2 泛型方法设 ...
- 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结
教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...
最新文章
- ckc交易什么意思_限价委托是什么意思?有限制的委托交易
- Forbidden Attack:7万台web服务器陷入被攻击的险境
- LeetCode Search a 2D Matrix II
- HTML 5 input type 属性
- 用时间戳判断两个时间是否在同一天和时区转换问题
- shell基础之if语句
- CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF;
- BGP属性分析--Weight
- 关节点和重连通分量,trajan算法实现(python)
- 深度学习(二十九)——Normalization进阶, CTC
- Oracle性能监控脚本(sql)
- iframe页面改动parent页面的隐藏input部件value值,不能触发change事件。
- IDEA查看Maven路径
- openssl pkeyutl执行SM2椭圆曲线数字签名
- 关于LINUX的NVIDIA显卡驱动安装
- 互联网行业,再卷就卷没了…
- 多线程-Thread.join()的运用
- 农行2021软件开发笔试题
- 图灵的遗产和后继者们的责任
- 酰肼PEG酰肼,HZ-PEG-HZ
热门文章
- 如何让Linux禁止Ctrl+Alt+Del重启(防止被强行关闭) erikxue 薛忠权
- Visual Studio 2017 15.7预览版发布
- Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed
- 智简全渠道孟伟:做CRM十六年,企业的一百种死法
- 线程之从线程返回信息
- 黄聪:NaviCat通过Http方式连接服务器的MySQL数据库(转)
- 以可读写可追加的方式显示系统时间
- java for 删除 list 中的项
- 【Under-the-hood-ReactJS-Part13】源码解读
- malloc()与calloc区别【转】