文章目录
- day40 小结
- 1.回顾
- 2.面向对象思想
- 3.收获
- 4.联系与区别
- 5.不足
day40 小结
1.回顾
这10天主要从图的存储结构和图的应用方面进行了学习,在实现不同的存储结构都借助了矩阵来实现。首先,再回过去看这些代码,平时自己也写过许多业务逻辑代码,相比于实际问题的开发与写这些代码,区别在于这些算法更在于去解决 一类问题,在遇到这类问题可以用这个思想去解决,更像是提供的一种方案。其次,在图的应用中,或者在解决一些其他问题中,能够把问题简化为图形化界面的,去思考问题我觉得比直接看问题去思考更容易也更高效。
2.面向对象思想
在这几天学习中,在构建不同存储结构的图时,都需要借助一个矩阵,而矩阵我们已经抽象为一个对象,在这个对象中包含两部分,一部分成员变量和方法。我们在图中需要用到矩阵只需要new一个对象即可获取这个矩阵对象中相应的变量和方法(这里也有访问权限控制的问题)同理我们的队列对象,栈对象,我们的图也是一个对象。在java中真的是万事皆可对象。面向对象相比于面向过程他更有利于模块化,调用更方便。其实在学习中是深有感触的;数据的安全性有保障(如我们最常见的就是privite,public,protected等访问控制符);
3.收获
从开始跟着敲这个代码,到现在,一些解决问题的思维方式(问题转换)我觉得是挺受益匪浅的。如:
- 1.day26 二叉树的后序遍历 (结合先序遍历和栈的特点将问题转换为简单问题求解)
- 2.day35 根据着色问题,把排列问题转换为解空间树,利用深度优先遍历思想求得解
- 3.day39 关键路径问题 结合拓扑排序(正向和反向)进而去求解关键路径问题
- 4.图用一个二维数组存储(矩阵),判断两节点是否直连,真的就很容易,一行代码就解决了。
其中还有一些其他的小细节,就如初始化值如何初始化等。
4.联系与区别
在day38中,其实Dijkstra 算法和Prim 算法之间解决的问题是不一样的,但是他们在代码实现上的思路却极为相似,差别就在比较距离时是累加还是只看当前节点出度个边的距离。在关键路径代码实现时,也去借助了Dijkstra 算法思想,但是发现并行不通。万事万物皆相互联系也相互区别。如果在不查阅其他资料的前提下,我应该做不到会把他们联系起来,但如果有些问题的求解方式相似,那么解决问题不是就更快了。所以感觉还是自己知识储备量不够
5.不足
其实在其中的一些算法可以解决一类问题,例如深度优先算法有回溯的思想,在m着色问题可以借助这个回溯思想去解决,Dijkstra算法可以解决单源最短路径,prim算法的最小生成树等,在遇到相似问题能否及时想到这些基础算法?在写代码的过程,我也一直在想,图以及图相关的这些算法思想主要应用在什么地方呢?查阅了一些资料,发现用到的地方太多了,所以会觉得地基牢很重要。
目前只能写出那么多了~想到再写吧