20172311《程序设计与数据结构》第九周学习总结

20172311《程序设计与数据结构》第九周学习总结

教材学习内容总结

第十五章 图

  • 容许树的每一个结点连通多个其余结点,再也不有父亲、孩子之说,那么就获得了图的概念。
  • 无向图
  • 无向图是一种边为无序结点对的图
  • 若是图中的两个顶点之间有一条连通边,则称两个顶点是邻接的
  • 连通一个顶点及其自身的边称为自循环
  • 对有n个顶点的无向图,要使该图为彻底的,要有n(n-1)/2条边(此处假设没有自循环)
  • 路径长度是该路径中边的条数
  • 若是无向图中任意两个顶点之间都存在一条路径,则认为这个无向图是连通的
  • 环路是一种首末顶点相同且没有重边的路径
  • 有向图
  • 有向图是一种边为有序顶点对的图
  • 网络
  • 网络是一种每条边都带有权重或代价的图
  • 网络能够是无向的也能够是有向的
  • 经常使用的图算法
  • 图的遍历主要分为广度优先遍历和深度优先遍历
  • 广度优先遍历可以使用一个 队列和无序列表实现,深度优先遍历可以使用一个栈和无序列表实现
  • 广度优先遍历栈和队列变化过程

1.示例从9开始遍历
html

2.遍历过程当中栈和队列的变化过程
node

  • 测试连通性方法:在一个含n个顶点的图中,当且仅当对每一个顶点v,从v开始的广度优先遍历的resultList大小都是n(即广度优先便利中的顶点数目等于图中顶点数目)时,该图时连通的
  • 最小生成树是相对于网络而言,其边的权重总和小鱼或等于同一个图中其余任何一颗生成树的权重总和
  • 生成最小生成树过程当中最小堆和生成树的变化过程

1.示例从5开始生成最小生成树
git

2.生成过程当中最小堆和生成树的变化过程
算法

  • 断定最短路径一种是判断两顶点间的最小边数,另外一种是寻找加权图的最便宜路径
  • 可经过邻接列表和邻接矩阵的方法实现图

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

  • 问题1:深度优先遍历无序列表和栈的变化过程是怎样的?
  • 问题1解决方案:经过与同窗讨论得出以下总结:

1.深度优先遍历的算法表述以下:数组

1.访问初始结点v,并标记结点v为已访问。网络

2.查找结点v的第一个邻接结点w。数据结构

3.若w存在,则继续执行4,不然算法结束。学习

4.若w未被访问,对w进行深度优先遍历递归(即把w当作另外一个v,而后进行步骤123)。测试

5.查找结点v的w邻接结点的下一个邻接结点,转到步骤3。.net

2.遍历过程分析以下:

过程分析:
(1)、首先节点 1 进栈,节点1在栈顶;

(2)、而后节点1出栈,访问节点1,节点1的孩子节点3进栈,节点2进栈;

(3)、节点2在栈顶,而后节点2出栈,访问节点2

(4)、节点2的孩子节点5进栈,节点4进栈

(5)、节点4在栈顶,节点4出栈,访问节点4,

(6)、节点4左右孩子为空,而后节点5在栈顶,节点5出栈,访问节点5;

(7)、节点5左右孩子为空,而后节点3在站顶,节点3出栈,访问节点3;

(8)、节点3的孩子节点7进栈,节点6进栈

(9)、节点6在栈顶,节点6出栈,访问节点6;

(10)、节点6的孩子为空,这个时候节点7在栈顶,节点7出栈,访问节点7

(11)、节点7的左右孩子为空,此时栈为空,遍历结束。

  • 问题2:用邻接列表实现图的总体思路应该是怎样的?
  • 问题2解决方:经过与同窗讨论并查阅资料得出以下总结:

(一)无向图邻接表

(二)有向图邻接表

(三)带权邻接表

(四)邻接表的数据结构

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

  • 问题1:
    用邻接矩阵实现的图在测试广度优先遍历时出现错误以下:

    起初我觉得是遍历方法有错,可是通过调试后发现是以前的链式队列的enqueue方法有问题
    错误的enqueue方法代码以下:
public void enqueue(T element)
    {
        LinearNode<T> node = new LinearNode<T>(element);

        if (isEmpty())
            head = node;
        else

        tail = node;
        count++;
    }

修改后的enqueue方法以下:

public void enqueue(T element)
    {
        LinearNode<T> node = new LinearNode<T>(element);

        if (isEmpty())
            head = node;
        else
            tail.setNext(node);

        tail = node;
        count++;
    }

修改后运行结果以下:

  • 问题1解决方案:

代码托管

上周考试错题总结

本周无错题!

结对及互评

  • 本周结对学习状况
    本周主要对图进行了学习,刚开始的时候很是懵,通过对课本的深刻学习以及与同窗们的讨论还有老师的指点才算是理解了图。同时与结对伙伴对图的实现进行了较为深刻的讨论,收获不少,但愿继续加油,一块儿努力取得更大的进步!

感想

努力,努力再努力吧!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 4/4
第二周 464/464 1/2 10/14 理解掌握了用数组和链表实现栈的方法
第三周 494/958 1/3 10/24 理解掌握了用数组和链表实现队列的方法
第四周 1629/2587 2/5 20/44 对用链表和数组实现列表进行了学习
第五周 856/3443 2/7 15/59 较为深刻的学习了查找和排序方法的实现
第六周 668/4111 1/8 20/79 学习了链式二叉树的实现
第七周 900/5011 1/9 15/99 对二叉查找树进行了较为深刻的学习
第八周 1378/6389 2/10 16/115 较为深刻的学习理解了堆
第九周 1700/8089 1/11 12/127 图的理解和实现
  • 计划学习时间:16小时
  • 实际学习时间:12小时

  • 改进状况:进一步提升学习效率,遇到问题努力去解决!

参考资料

相关文章
相关标签/搜索