
数据结构与算法
文章平均质量分 57
bobbypapa
这个作者很懒,什么都没留下…
展开
-
栈和队列的对比
众所周知,栈的特点是先入后出(FILO),队列的特点是先入先出(FIFO),这便是两者最大的区别。但从更深入的角度去理解,我认为栈是比队列更高级的数据结构,嗯,“这个栈比较高级“。栈能实现更复杂的算法,理由如下:1,栈结构记录了数据访问的返回路径(回溯),而队列没有。或者说,栈同时完成了数据的正序访问(入栈的过程)和逆序访问(出栈的过程),而队列只完成了顺序访问(入队列和出队列都是正序访问)。2,...原创 2018-04-11 09:33:19 · 1633 阅读 · 0 评论 -
理解递归的本质:递归与栈
递归的基本思想所谓递归,就是有去有回。递归的基本思想,是把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说,必须先解决子问题,再基于子问题来解决当前问题。或者可以这么理解:递归解决的是有依赖顺序关系的多个问题。我们假设一个抽象问题有两个时间点要素:开始处理,结...原创 2018-04-11 09:34:08 · 33003 阅读 · 10 评论 -
如何理解经典Prim算法---邻接矩阵图与双重链表图
经典Prim算法经典的Prim算法,都是利用邻接矩阵图来实现的,我认为算法的精妙之处在于仅利用双重循环就实现了MST构造,循环次数仅和顶点个数有关,这对于边稠密的图来说,确实是非常高效的。然而,经典Prim算法并不好理解,原因在于没有彻底搞明白一些辅助变量(数组)所表示的真正含义。对于临时数组变量的理解经典Prim算法,在循环构造MST的过程中,至少(或主要)依赖两个临时数组:candidate_...原创 2018-04-11 09:35:38 · 594 阅读 · 0 评论 -
如何理解Dijkstra算法(最短路径)
假设N=(V,{E})是连通网,V是顶点集合,共有n个顶点;对“最短路径“的两个理解:case-1,顶点V0到其它所有顶点的最短路径。case-2,顶点V0到顶点Vi的最短路径。对于Dijkstra算法来说,一次性求出V0到其它所有顶点的最短路径的时间复杂度是O(n^2).Dijkstra算法采用贪心思想,从V0出发,层层向外扩散,一步步求出V0到Vi之间所有顶点的最短路径,最终求得了V0~Vi的...原创 2018-04-11 09:37:02 · 850 阅读 · 1 评论 -
AOV网的拓扑排序
在AOV(Activity On Vertex)网(有向无环图)中,用顶点来表示某个活动,用边来表示活动之间的某种先后顺序或者制约关系。如果有向图中的顶点序列 v1,v2,v3,...,vn 满足:若从顶点vi到vj有一条路径,那么在此序列中vi必然排在vj之前。这个序列我们称之为拓扑序列。对有向图的所有顶点进行构造拓扑序列的过程,就叫做拓扑排序。另外,对一个有向图进行拓扑排序,结果可能不唯一。...原创 2018-04-11 09:38:24 · 1866 阅读 · 0 评论 -
图的应用--动态库依赖关系解析
主程序及其依赖的动态库,可以构成一张有向图,其起始顶点为主程序。主程序的装载过程,就是有向图的遍历+构造过程。根据遍历方法的不同(BFS广度遍历和DFS深度遍历),动态库的加载顺序也有可能发生变化,这影响到了动态符号的绑定结果,比如不同动态库中含有相同的动态符号。根据有向无环图的特性,还能够判断这些动态库中是否存在循环依赖,也就是liba依赖libb,libb又依赖liba的情况。我们只需要对这些...原创 2018-04-12 07:55:19 · 1233 阅读 · 0 评论