2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

教材学习内容总结

第15章 图

无向图

  • 图由顶点组成。

    • 顶点由名字或标号来表示,如:A、B、C、D;
    • 边由连接的顶点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边。
  • 无向图:与树类似,图也由结点和这些结点之间的连接构成。这些结点是顶点,而结点之间的链接是边。无向图是一种边为无序结点对的图。于是,记做(A,B)的边就意味着A与B之间有一条从两个方向都可以游历的连接。边记作(A,B)和记作(B,A)的含义是完全一样的。

  • 邻接(邻居):两个顶点之间有边连接。
  • 自循环(悬挂):自己连接到自己的边。
  • 完全图:含有最多 条边的无向图。例如:

无向图G是一个完全图。

  • 路径:连接图中两个顶点的边的序列,可以由多条边组成。

    无向图中的路径是双向的。

  • 路径长度:路径中所含边的数目(顶点个数减1 )。
  • 连通图:无向图中 任意两个顶点间都有路径。例如:

完全图一定是连通图,连通图不一定是完全图。

  • 环(回路):第一个顶点与最后一个顶点相同且没有重复边的路径。例如:

  • 无环图:没有环的图。
  • 子图:类似集合中“子集”的概念,示例如下:

其中,(b),(c)是(a)的子图。

  • 生成树:包含无向图G1所有顶点的极小连通子图称为G1的生成树。例如:

  • 稀疏图与稠密图:有很少条边或弧(如 e < n lognn,n 是图的顶点数,e 是弧数)的图称为稀疏图,反之称为稠密图。

有向图

  • 有向图:顶点之间有序连接,边是顶点的有序对。

    边(A,B)和(B,A)方向不同。

  • 有向路径:连接两个顶点有向边的序列。
  • 有向图中的有序对常用序偶表示,例如:

上图中路径 V00→V22→V33 是从V00到V33的路径,但是反过来不再成立。

  • 注意连通有向图与无向图不同,有向边决定连通性。例如:

上图中左图为联通图,右图不联通,因为从任何顶点到顶点1都没有路径。

  • 有向树是一个有向图,其中指定一个元素为根,则具有下列特性:

    任何顶点到根都没有连接。

到达每个非根元素的连接都只有一个。

从根到每个顶点都有路径。

  • 顶点的度、出度、入度:

网络

  • 网络:(加权图)是一种每条边都带有权重或代价的图。

网络可以是无向的也可以是有向的。

常用图的算法

  • 遍历

  • 广度优先遍历:类似于树的层序遍历, 从一个顶点开始,辐射状地优先遍历其周围较广的区域。
  • 深度优先遍历:图的深度优先搜索,类似于树的先序遍历, 所遵循的搜索策略是尽可能“深”地搜索图。

    图的深度优先遍历与广度优先遍历的唯一不同是,他使用的是栈而不是队列来管理遍历。

  • 连通性:从任意结点开始的广度优先遍历中得到的顶点数等于图中所含顶点数。
  • 生成树:包含图中所有顶点及图中部分边的一棵树。
  • 最小生成树:所含边权值之和小于其他生成树的边的权值之和。
    • 因为树总是图,对于有些图来说,图本身就是一颗生成树,所以这样的图的生成树中将包含全部的边。
    • 最小生成树是其所含边的权值之和小于等于图的任意其他生成树的边的权值之和的生成树。

通常构造最小生成树的算法有两种:

① Prim算法: ① Prim算法: ① 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算法: ② Kruskal算法: ② Kruskal算法:
假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有 n-1条边为止。

  • 判定最短路径:

    • 判定起始顶点和目标顶点之间是否存在最短路径(两个顶点之间边数最少的路径)。
    • 在带权图中找到最短路径。(Dijkstra算法)

图的实现策略

  • 邻接矩阵:

教材学习中的问题和解决过程

  • 问题1:问题是有向图和无向图的广度遍历的区别
  • 问题1解决方案:根据我查的资料显示是不一样的,但是再向图中从出发的顶点没有路径的顶点也要写出来,这不是找所有的路径而是遍历所以不能漏掉任何一个元素。

我看到一个大佬的博客解决了这个问题,而且我阅读之后也有了比较深刻的理解
大佬的博客————图的深度优先遍历和广度优先遍历理解

代码调试中的问题和解决过程

  • 问题1:先是在用邻接矩阵实现无向图的补全,前面的都一切OK,该输出的基本上都输出了,但是在最后出现了一个空指针问题

  • 问题1解决方案:之后发现,是当时写程序的时候不够严谨,结果这个变量为空的,但是我当时没有去注意就直接使用,就出现NullPointException。
  • 问题2:在实现pp15.1的时候,出现了一个数组越界异常,这就没道理了啊

  • 问题2解决方案:不断往上追溯,最后发现好像是之前的一个类里面的遗留问题,当时没注意到,这个类的在这里被使用就出问题了

代码托管

上周考试错题总结

这两道题改了选项,我当时没注意到群里面的,好气哦

结对及互评

  • 20172324曾程
  • 博客中值得学习的或问题:
    • 书上代码的学习很到位
    • 代码调试环节比较详细,从截图上来看注释也很规范整齐,值得学习。
  • 基于评分标准,我给本博客打分:11分。得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 加4分
    • 代码调试中的问题和解决过程, 加4分
    • 本周有效代码超过300分行,加2分
    • 进度条中记录学习时间与改进情况的加1分

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 671/671 1/2 17/25
第三周 345/1016 1/3 15/40
第四周 405/1421 2/5 23/63
第五周 1202/2623 1/5 20/83
第六周 1741/4364 1/6 20/103
第七周 400/4764 1/7 20/123
第八周 521/5285 2/9 24/147
第九周 1622/6907 2/11 17/164

参考资料

原文地址:https://www.cnblogs.com/N-idhogg/p/9959916.html

时间: 2024-08-24 05:41:53

2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结的相关文章

《JAVA程序设计》_第九周学习总结

一.学习内容 1.数据库的建立.配置 在官网先下载好MySQL.navicat for MySQL.XAMPP.MySQL-connecter 在XAMPP中点击start开启MySQL 在navicat for MySQL中点击连接,输入信息后确定 在连接名处右击,创建新数据库,输入数据库名,字符集和校对均选择gb2312... 在表处右击,输入表的信息 点开创建的mess表输入信息,按tab键可快速换行 将MySQL-connecter添加到IDEA的module中 输入以下代码,检测数据库

20172321 2018-2019《Java软件结构与数据结构》第三周学习总结

教材学习内容总结 第五章 5.1概述 队列是一种线性集合,其元素从一端加入,从另一端删除:队列的处理方式是先进先出(First in First out). 与栈的比较(LIFO) 栈是一端操作,先进后出 队列是两端操作,先进先出 栈的一些操作 操作 描述 enqueue 向队列末端添加一个元素 dequeue 从队列前端删除一个元素 first 考察队列前端的那个元素 isEmpty 判定队列是否为空 size 判定队列中的元素数目 toString 返回队列中的字符串表示 5.2javaAP

2018-2019-20172329 《Java软件结构与数据结构》第五周学习总结

2018-2019-20172329 <Java软件结构与数据结构>第五周学习总结 教材学习内容总结 <Java软件结构与数据结构>第九章-排序与查找 一.查找 1.查找概念简述: (1)查找3是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该组中并不存在该目标元素.对其进行查找的项目组有时也称为查找组. (2)查找方式的分类:线性查找,二分查找. (3)查找所要完成的目标:尽可能高效的完成查找,从算法分析的角度而言,我们希望最小化比较操作的次数,通常,查找池里项目数

20172302 《Java软件结构与数据结构》实验二:树实验报告

课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder:用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 (2)基于Linked

20172304 2018-2019《java软件结构与数据结构》 第一章 第二章学习总结

20172304 2018-2019<java软件结构与数据结构> 第一章 第二章学习总结 教材学习内容总结 第一章 概述 1.1软件质量: 高质量软件的几个特征: 正确性:软件在多大程度上满足其特定需求 可靠性:软件故障发生频率和危险程度 健壮性:出错情况下可以得到恰当处理的程度 可用性:用户学习和执行任务的难易程度 可维护性:对软件进行修改的难易程度 可重用性:软件组件可重用于其他软件系统开发的难易程度 可移植性:软件组件可以在多个计算机环境下使用的难易程度 运行效率:在不浪费资源的情况下

20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结

20172305 2018-2019-1 <Java软件结构与数据结构>第一周学习总结 教材学习内容总结 本周内容主要为书第一章和第二章的内容: 第一章 软件质量: 正确性(软件达到特定需求的程度) 可靠性(软件发生故障的频率和危害程度) 健壮性(很好处理错误情况的情况) 可用性(用户在软件中掌握和运行任务的容易程度) 可维护性(软件进行修改的容易程度) 可重用性(软件组件可被其他软件系统开发使用的容易程度) 可移植性(软件组成可用于多种计算机环境中的容易程度) 运行效率(不浪费资源的情况下软

2018-2019-20172329 《Java软件结构与数据结构》第三周学习总结

2018-2019-20172329 <Java软件结构与数据结构>第三周学习总结 教材学习内容总结 <Java软件结构与数据结构>第五章-队列 一.概述 1.队列是什么? 队列是种线性集合,其元素从一端加入,从另一端删除:注:队列是按照先进先出的方式处理的.从队列中删除元素的次序,与放置元素的次序是一样的. 2.队列的构成 (1)方法: 操作 描述 enqueue 向队列末端添加一个元素 dequeue 从队列前段删除一个元素 first 考察队列前端的那个元素 isempty

20172328 2018-2019《Java软件结构与数据结构》第六周学习总结

20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现,以及考察实现和使用树的实例. 教材学习内容总结 A summary of textbook 树(tree):树是一种非线性结构,其元素被组织成了一个层次结构.下面是树的术语,了解一下吧! 树有一个包含结点(node)和边(edge)的集构成,其中的元素被储存在这些结点中,边则将一个结点和另一个结点连接起来.

20172328 2018-2019《Java软件结构与数据结构》第七周学习总结

20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和各种二叉查找树实现,考察为二叉查找树添加和删除元素的算法以及维护平衡二叉查找树的算法 教材学习内容总结 A summary of textbook 二叉查找树(binary search tree):二叉树定义的扩展,一种带有附加属性的二叉树.附加属性是什么?树中的每个节点,其左孩子都要小于其父节点,而父节点