Day25——小结

1、回溯算法:包括探索和回溯两步,选择满足条件的条件前进,当不满足条件时,则回退到上一步,特征还是很明显的。适用于解决的问题:优化问题(找最佳方案)、决策问题(找可行方法)、枚举问题(找所有满足条件的方案)

2、贪心算法:最近的Dijkstra算法和Prim算法都是基于贪心策略,其特点是将问题分解成若干个小问题,从局部找到最优解到得到整体最优解,是自顶向下的过程。正是因为贪心算法不从整体上考虑,每次选取局部最优解后,就不再进行回溯处理,所以并不是所有问题都能通过贪心算法得到最优解。但相比进行枚举或回溯找最优解,贪心算法更加简洁、高效。

3、图、集合、矩阵:三者都是关系的表示方式。图对我们人来说更加直观;集合能很好解释、推理关系;计算机处理的是矩阵,所以作为一名程序员,我们要做的是合理结合、转换三者。

4、图的存储:稠密图用矩阵当然是很好的选择,但对于稀疏图,如果用矩阵存储会造成较大的空间浪费,应该选择使用邻接表或是十字链表,十字链表比邻接表多了一个循环用来链接指向各顶点的其它结点,相应的,我们也能方便的找到各顶点的入度。

5、图的连通性:根据那天通过矩阵乘法来判断图的连通性,我结合其特点用它实现了图的各点之间的最短路径,但时间复杂度达到了 O ( n 4 ) O(n^4) O(n4),这真的太高了。相比Floyd算法也并非是一无是处,Floyd是将 n n n个顶点作为中间结点,依次计算通过这些点的最短距离;但如果是要求计算通过 k k k个点求各个点到其它点的最短距离时,这个算法就发挥它的用处了。

6、画图理解的重要性:每次写代码前,我都喜欢在本子上写写画画,模拟解决问题的步骤,可能刚开始画的比较抽象,但自己的大脑已经走过一遍流程了,所以多画几次就好了,就像路多走几遍就能记得了。

7、伪代码的重要性:对于复杂的问题,不仅要画图,还需要在旁边写一下伪代码,然后整理这些伪代码,写代码的时候可以参照伪代码,能很好的帮我们理清逻辑和步骤。如果代码出错,我会首先看伪代码检查逻辑,毕竟要简洁得多。

8、 对算法的认识:我觉得自己对算法的认识还处于一个较浅的阶段,对于一个算法,除了想着如何实现,大部分都没有想着如何优化。

9、对于Java语言:我觉得没有花整块时间来学习的必要,多看看代码出现的这些就行了,其他的等需要的时候再查吧。

10、自己定位的认识:以前都觉得学习机器学习一定要有好的数学功底才行,所以在大二的时候花了太多时间来看数学,结果数学没看懂,大部分时间也浪费了,还消磨自己的学习兴致。说到底自己是一个程序员,代码才是基础,理解好并会应用算法才是王道,数学是很好的工具,现阶段还是打好代码基础更重要一些。

你可能感兴趣的:(Java,java)