- 感觉代码量越来越大,越来越复杂,有些代码自己手动边写边思考里面的逻辑,很有挑战性,也有一些难度。对于一些基础算法的理解,自己还需要继续提升。
- 了解到java的throws Exception 异常、错误抛出机制和C#有一些不同,java中强制异常处理方式, 一旦方法加入了throws关键字,那么调用这个方法的类就必须加上try和catch进行异常处理,C#中并不强制。
- 学习了图的广度遍历算法,广度优先搜索遍历类似于树的按层次遍历。对于无向连通图,广度优先搜索是从图的某个顶点v0出发,在访问v0之后,依次搜索访问v0的各个未被访问过的邻接点w1,w2,…。即从v0开始,由近至远,按层次依次访问与v0有路径相通且路径长度分别为1,2,…的顶点,直至连通图中所有顶点都被访问一次。
- 学习了图的深度遍历算法,1.从图中v0出发,2.找出v0的第一个未被访问的邻接点,访问该顶点。以该顶点为新顶点,重复此步骤,直至刚访问过的顶点没有未被访问的邻接点为止。3.返回前一个访问过的仍有未被访问邻接点的顶点,继续访问该顶点的下一个未被访问领接点。重复2,3步骤,直至所有顶点均被访问,搜索结束。
- 通过图的m着色问题,了解,明白,学会了回溯算法。
- 将图以链表的形式存储的邻接表,还有将有向图的邻接表和逆邻接表结合起来形成的十字链表。
- 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。
- 普里姆算法(prim)是求解一个无向图的一个最小生成树算法。(最小生成树的权值是唯一的但是树形可能不唯一),从某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点U0加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边,把它的顶点加入到集合U中。如此循环,直到网中的所有顶点都加入到生成树顶点集合U中为止。
- 学习了关键路径算法,从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径。
- 感觉java的写法和c#的写法还是有很多不同的地方,对于基础算法,还是需要加强学习理解,自己平时写的都是一些应用型的软件,逻辑也是用户逻辑,基础算法涉及不多,但是这是最重要的,必须要重视起来。