代码改变世界

随笔档案-2012年05月

【图论】信手拈来的Prim,Kruskal和Dijkstra

2012-05-30 23:53 by 捣乱小子, 8229 阅读, 收藏, 编辑
摘要: 关于三个简单的图论算法 prim,dijkstra和kruskal三个图论的算法,初学者容易将他们搞混,所以放在一起了。 prim和kruskal是最小生成树(MST)的算法,dijkstra是单源最短路径的算法。 prim 最小生成树prim算法采用了贪心策略:把点分成两个集合,A为已被处理(已经在最小生成树中)的顶点,B为待处理的顶点,(A,B)也就是一个割。若边(u,v)满足u∈A,v∈B,那么(u,v)就是通过割(A,B)的一条边。 很自然的,会有一定数量的边会通过该割,其中权重最小的边就是轻边。 什么是轻边? 左边集合和右边集合就组成一个割,其中边... 阅读全文

【图论】拓扑排序应用

2012-05-22 23:52 by 捣乱小子, 4875 阅读, 收藏, 编辑
摘要: 拓扑排序虽是一种排序,但是它跟平时所接触的sort或者qsort不同,排序的意义不同。拓扑排序针对有向无回路图(DAG)而言的,不应用与存在回路的有向图。【图论】广度优先搜索和深度优先搜索 有说到了BFS和DFS,拓扑排序是DFS的一个应用。有向无回路图能说明事件的发生的先后的顺序。比如穿衣服,士兵排队等。一个具体的例子,有N个物体,下面给出物体的重量比较,比如(a,b)表示a比b重等等,问已给出的条件是否会矛盾?其实就是判断用所给条件所组织的一个图中是否会存在环?在DFS中加入时间戳,完成DFS后让节点按第二时间戳排序,就得到了DAG的拓扑排序结果。【图论】有向图是否存在环 拓扑排序还可以解 阅读全文

【图论】广度优先搜索和深度优先搜索

2012-05-18 09:23 by 捣乱小子, 38243 阅读, 收藏, 编辑
摘要: 写在最前面的两种图的遍历算法在其他图的算法当中都有应用,并且是基本的图论算法。广度优先搜索广度优先搜索(BFS),可以被形象的描述为“浅尝辄止”,具体一点就是每个顶点只访问它的邻接节点(如果它的邻接节点没有被访问)并且记录这个邻接节点,当访问完它的邻接节点之后就结束这个顶点的访问。广度优先用到了“先进先出”队列,通过这个队列来存储第一次发现的节点,以便下一次的处理;而对于再次发现的节点,我们不予理会——不放入队列,因为再次发现的节点:无非是已经处理完的了;或者是存储在队列中尚未处理的。《算法导轮》对两种搜索都采用了很聪明的做法,用白色WHITE来标志未发现的节点,用灰色GRAY来标志第一次被发 阅读全文

背包问题(01背包,完全背包,多重背包)

2012-05-06 18:27 by 捣乱小子, 48493 阅读, 收藏, 编辑
摘要: 写在最前面的近日为以下琐事烦身: 差不多要向学院提交项目申请了,本来是想做个多模式的IM系统的,可是跟往届通过审核的项目比起来,缺乏创新和研究价值,所以在文档上要多做手脚,花点心思。 一大堆的作业,每每期中都是这样。 一直想读的DirectUI开源代码一直没有进展下去。 准备五月底的软件设计比赛。魔... 阅读全文