标签:思路 结构体 比较 博客 存储方式 omega 哲学 真题 就是
啊,一下子就第三周了(〃‘▽‘〃)
时间总是匆匆,什么该在乎又什么该不在乎呢,有时候回头真的挺可惜自己拿来打游戏玩乐的时间,然而玩的时候真。。。爽┐(?~?)┌
直入真题,这周讲的是有关拓扑排序和最短路径的东西,这个最短路径我老是想用深搜广搜,不过在大量数据面前,这明显会TLETLETLE来个三连( ̄ー ̄)
当我们在存储一些点类数据之间的情况时,往往是用一个二维数组来存储,而当数据大时明显再开这样的二维数组时明显会爆内存爆内存爆内存ヽ(´¬`)ノ
所以这时就可以用邻接链表的方式来存储相应的数据,建一个结构体来代表链表的节点(具体的实现之后再说了0____0),总而言之就是一个链状的存储方式( ̄∠ ̄)?
这又关拓扑排序和最短路径什么事呢,大事,我们可以用邻接链表来存储每条边的信息,这样首先可以避免爆内存,然后对每个点,我们就可以只处理和它有关的边,感觉像废话ヽ(ー_ー)ノ
拓扑排序感觉用法很多我也只是学到了个皮毛,最简单是就是分层,将数据分成一层一层,还有就是判断有没有环,当拓扑时,所入队的点数不等于总点数,就表明有环存在整个序列中(?>?<)☆
而唯一的拓扑序列则说明这个序列的元素之间是全序关系,每次拓扑入度为0的点应该只有一个,否则拓扑序列不唯一。换种思路来想的话,拓扑排序就是带有级别的排序(?ω?`ll)
说最短路的话,我们先来个最长路,求一个图中的最长路径,其实就是找它的直径,这个涉及到个几何知识,一个点到离它最远的点的路径肯定会与直径有交点,为什么呢,百度一下(没打广告(; ̄д ̄))
由此当要求直径时,首先随便一个点找到离它最远的点,然后再由这个点再去找离这个点最远的点,这条路径就是直径了,具体的过程可以深搜或广搜实现,个人喜欢深搜,深搜大法好啊(◎_◎;)
回到最短路,求最短路的方法有好几个,最简单的就是floyd算法,三个for循环,以一个点为媒介去松弛任意两点之间的关系,问题就是,只适用于小数据,毕竟是三个for,还是得尊重下的(?•ˇ?ˇ•?)
然后是我比较喜欢的Dijkstra算法,这个算法在找任意两点间的最短路时比较快捷,每次以当前队列且没被标记的点中离起点最短的点去松弛其他的点,这样每次确定一个点,直到到达终点( ̄▽ ̄)~*
最后Bellman-Ford和spfa我觉得它们差不多,后者好像是对前者的改进,大体思想就是,每次松弛距离起点为n的点,总共就是n-1次松弛,要是松弛完后,还能松弛就说明有回路(有正的负的)( ̄︶ ̄)↗
感觉相比前几周态度有些松懈了,得加把劲了,不然得被大佬们抛之脑后。之前都喜欢在代码中附上简单的题解,方便日后回顾,但是也变懒了得要捡起来。啊啊啊,总之要勤快一点了(`ε´)|
每周的题都没能按时补完,坏习惯,得改,也太依赖题解了,得强迫自己去独立思考锻炼自己的思维能力。在学习的过程中,取经了很多大佬的博客,不过都忘了记下来,不能忘恩负义,以后记得转载留出处,之前的大佬请宽恕我(oT-T)尸
又回顾了下瑞克与莫蒂,生命是什么,生命的意义又是什么,我不是个哲学家,好好吃饭睡觉活下去吧(≧?≦*)
标签:思路 结构体 比较 博客 存储方式 omega 哲学 真题 就是
原文地址:https://www.cnblogs.com/LMCC1108/p/9427749.html