算法导论
文章平均质量分 65
CHEONG_KG
这个作者很懒,什么都没留下…
展开
-
DFS应用(拓扑排序和强连通分支)
本文将用实例分析DFS搜索算法的两大应用:1、运用深度优先搜索,对一个有向无回路图DAG进行拓扑排序; 2、运用深度优先搜索,将一个有向图分解为各强连通分支。一、拓扑排序首先拓扑排序是针对有向无回路图来说的,反之,如果图中有回路,就不可能存在这样的线性序列。 Topological-Sort算法可以产生一个有向无回路图G的拓扑序列。1、Topological-Sort算法实现思路:<1>调用DFS原创 2017-04-12 21:45:31 · 2415 阅读 · 0 评论 -
图的BFS和DFS原理及实例分析(java)
BFS和DFS是图的两种遍历方式,是最简单的图搜索算法。本文将给出给出BFS和DFS的以下几种实现方式: 1、使用队列Queue实现图的BFS遍历 2、递归实现图的DFS遍历 3、使用栈Stack迭代实现图的DFS遍历一、BFS(广度优先搜索算法)BFS算法之所以叫做广度优先搜索,是因为它始终将已发现的顶点和未发现的之间的边界,沿其广度方向向外扩展。亦即,算法首先会发现和s距离为k的所有顶点,原创 2017-04-06 11:27:06 · 10035 阅读 · 1 评论 -
java图的邻接表实现两种方式及实例应用分析
本篇博客来谈一谈图的邻接表实现的两种方式,首先我们明确一点“学会图的邻接表实现的关键点在于“:你所建立的图的邻接表的对象是什么!首先我们看一下《算法导论》中关于图的邻接表的定义:图G=(V,E)的邻接表表示有一个包含 |V| 个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点,对于每一个u∈V,邻接表Adj[u]包含所有满足条件(u,v)∈E的顶点v,亦即,Adj[u]包含图G中所有和顶点u原创 2017-04-05 20:26:11 · 17970 阅读 · 10 评论 -
Kruskal算法实现最小生成树MST(java)
Kruskal算法用于生成图的最小生成树MST,不多说下面直接进入主题!一、实现Kruskal算法需要会的数据结构知识1、最小堆:包括最小堆的初始化、插入和删除操作 最小堆的作用:每次从边的集合中选出权重最小的边,将其加入到MST中(当然此边当和MST中的元素构成环时不满足)2、等价类(并查集) 并查集的作用:便是判断加入到MST中的边是否会构成环3、EdgeNode类 在Kruskal算法中原创 2017-04-05 21:54:55 · 6992 阅读 · 0 评论 -
Prim算法实现最小生成树MST(java)
Prim算法是另一种生成图的最小生成树的算法,这里简单说一下Prim算法和Kruskal算法的在实现方面的区别:1、Kruskal算法在生成最小生成树的过程中产生的是森林,Prim算法在执行过程中始终都是一棵树;2、Kruskal和Prim实现上的最大区别是Kruskal不需要搜索每个顶点的邻接节点,而Prim中需要,所以Prim图构建时需要利用邻接链表进行构建,Kruskal不用!上面第二点边提出原创 2017-04-06 09:25:59 · 11508 阅读 · 1 评论 -
冒泡、选择、快速、归并、堆排序算法 python实现
一、冒泡排序核心思想: 通过相邻元素的比较实现排序def bubble_sort(a, length): '''冒泡排序''' for i in range(length-1): for j in range(0, length-1-i): if a[j] &gt; a[j+1]: a[j], a[j+...原创 2018-08-10 17:34:30 · 523 阅读 · 0 评论