作者:情之瞬 | 来源:互联网 | 2023-06-15 19:31
一:感悟: 最近感觉上学期选了ACM是大有裨益的,这学期可以秒杀掉数据结构课的练习。
前两次的预选赛,回来又参加了一次练习,内容就是把网络预算赛的题挑了几个出来,并且翻译成了中文的题目,换成中文之后又能多做出几个来,比如下面这个:
所以就感觉,能看的懂题目真的很重要,读题太慢很影响比赛。
二:做了什么 这个月基本在看图论,最大的感悟就是,图论和并查集联系非常的密切
我从拓扑排序开始看,先看了拓扑排序,又看了单源最短路径,最后看了最小生成树。
拓扑排序,简单来说,就是先找到一个入度为0的顶点,然后将和这个顶点心相连的边全部删除,再去寻找下一个入度为0的点,直到得到一个序列。注意图的拓扑排序得到的序列并不唯一。
单源最短路径可以用DFS和Dijkstra算法,
Dijkstra 算法是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度 O(n2)
要点是每次从未求出最短路径的点中取出距离起点最小路径的点,以这个点为原点求出距离七点最近的点,可以用优先队列优化掉nlongn
最小生成树,主要有两种算法,Prim算法和Kruskal算法。
前者归并点,后这归并边
其中Prim算法和Dijkstra算法基本相同
Kruskal算法
选取的边的顶点是不同的连通分量,且边权值是最小的,所以我们保证加入的边都不使得非连通图有回路,且权值也最小。这样最后当所有的连通分量都相同时,即所有的顶点都在生成树中被连接成功了,我们构造成的树也就是最小生成树了。相比Prim Dijkstra适合系数图。
三:接下来做什么 接下来打算看二叉树,打算先从二叉树开始看起。争取半个月学会。