数据结构-第六章学习小结

第六章的内容是图,其中包含的相关术语和算法比我想象中的要更多和更有难度些。我是按照老师安排的内容来学的,十字链表、邻接多重表、拓扑结构这些都是大概看过一下(没有细看,也没看懂)。虽然学知识应该追究到底、把它看懂,但我目前真的抽不出时间来看...只能先放一放,之后有机会再细看好了。

这些相关术语和算法除了抽象外还很容易混淆。像我一开始只是看过一两遍“用邻接矩阵创建无向图”的内容时,完全把邻接表、邻接矩阵在无向图、无向网、有向网中的应用搞混了。其实网就是带权重的图,邻接矩阵中每个元素的值就写上对应的权重或是一个能与正常权重区别出来的值,从而判定有/无边和权值为多少。而图的话,用1/0表示有/无边,有向/无向的区别在于度的计算。有向图中每一行的和就是出度,列的和就是入度。而用邻接表存储的话,就相当于把矩阵中的这些信息存储在边表中。要是有向网/图的话,计算度会复杂一点,因为入度无法直接看出来。

以下是梳理出来的提纲:

数据结构-第六章学习小结_第1张图片

 

在做整理的时候发现自己完全把最小生成树算法、最短路径算法搞混了...... 所以又细看了一遍。确实真的有相似之处,找到不同点和这样做的用意后基本就分清了。譬如Prim算法和Dijkstra算法都用了一个辅助的数组来记录迭代过程,但是Prim算法中的权值记录的是当前所选择最短边的权重,Dijkstra算法中的权值区记录的是上一顶点的D值与两顶点间边的权值的和。

在写BFS算法的时候(作业题)体会到算法是真的可以很灵活的吧。同样是BFS算法和应用队列模块,但是在这个应用场景下需要用pop函数清空队头元素的,还有其他一些需要加上的细节。觉得做完作业题收获蛮大的,最重要的还是之前想过的多翻课本。我也确实是在做作业题的过程中才算更理解了BFS算法,尽管之前看书和看视频已经看了有两三遍了...

另外这次的实践题是我最快做出来的一道...原本以为很难,要用浮点数,而且有许多种方案,无规律可循,都要算一遍才知道可不可行。上完今天的课后突然想到用辅助数组的方法,想着想着思路就来了。不过最后也是调试了好十几遍才确定一个更加合理的思路,感觉跟学到的图(顶点、边)的算法没多大关系,我只是套用了算法中辅助数组的思路。而且用最小生成树、最短路径这些思路做不出来的,每次都选最大值也不行。后来看了同学利用DFS算法去做的代码,真心佩服!在自己打代码的过程中也有想过用递归,但是递归调用点放在什么位置都不对。现在看来是我一开始没停留在表层去想清楚递归调用时要做什么,只是后来写着写着觉得应该要用递归,就在重复的操作附近加递归调用的语句。因为整个函数有分情况处理的并列的if-else语句,这样随便加上去逻辑就完全错了。我真的很佩服那位同学的思路!我自问还是没消化完课本的内容...看来还是做得不足......

下一章的内容是查找。看着前面几节蛮简单的,看到散列表就有种不太好的预感... 目前我感觉图这章是整本书最难的内容了吧,它提供的算法是真的很耗时间去理解,但也很值得学习。我觉得自己掌握得还行,不过做题偶尔会看错题......这个得在后面的复习中加强一下,图的应用真的太多了还得多看几遍才能彻底区分。下一阶段的学习目标是掌握查找这一章内容,也要像这两周一样早早地预习、多回顾、早点完成作业(emm效果确实不错)。

你可能感兴趣的:(数据结构-第六章学习小结)