数据结构
文章平均质量分 75
qq_20991785
这个作者很懒,什么都没留下…
展开
-
无权图的最短路径Java实现
利用广度优先的搜索方法写了一个最短路径的例子,自我感觉还可以优化,因为最后显示的结果不是很人性化节点类Vertex、边类Edge、图类Graph前几篇已经写了,这里作相应的修改,在节点Vertex类中添加路径长度pathLength变量和上一个节点的名称path变量,初始pathLength为0,path为null.利用这种方法可以计算出从某节点为起点的到达所有节点的最短路径,其中原创 2015-03-16 20:26:07 · 2378 阅读 · 0 评论 -
经典排序算法之希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。它是使用增量gap将原需要排序的数组元素分成一个个子数组,对这些子数组进行组内进行直接插入排序,然后缩小增量gap,再进行上述操作,直至增量缩小为1为止。例如一组随机数10,8,5,23,16,45,13,12,9,20元素个数为10,我们使用增量5开始:第一次排序分为五组:分别是原创 2015-03-09 15:34:42 · 386 阅读 · 0 评论 -
经典排序之堆排序
进行堆排序之前,先介绍一下堆。一般所说的堆指的是二叉堆,它的使用对于优先队列的实现相当普遍。具体来讲,堆是一棵完全二叉树,其有一个极其重要的性质就是:我们可以使用数组来表示一个堆,对于数组中的任何一个元素下标i,i/2对应的是其父节点,2*i对应的是其左孩子,2*i+1对应的是其右孩子。根节点是从下标1开始。这样的性质决定了我们可以方便的使用数组来构建一个堆。堆的非常明显一个特点就是:所有原创 2015-03-10 15:17:13 · 477 阅读 · 0 评论 -
单元Dijkstra算法求最短路径的的Java实现
上一篇写了无权值的最短路径的求法,是利用广度优先搜索的方法使用队列实现的,当有权值时,我们通常使用Dijkstra算法来求解最短路径的问题,这里我们假设所有的权值都是正值。 首先,在节点类改变了权值的成员变量pathLength起始为INFINITY(INFINITY设为10000),这样有助于寻找未访问节点中权值最小的点。边节点要增加一个表示权值的成员变量weight。其次,在图类Graph原创 2015-03-17 11:08:21 · 1760 阅读 · 0 评论 -
有向图的深度优先搜索和广度优先搜索
上一篇写了有向图的拓扑排序,紧跟着用这个图坐了深度优先和广度优先的搜索,对其中的节点类Vertex做了些许改进,一个是加了访问状态isVisited,还有在Graph类中新加了一个方法用来寻找以节点ver出发的所有节点,和之前寻找所有的相邻节点(包括发出的和指向该节点的)有所不同代码和结果如下:广度优先搜索:import java.util.ArrayList;import java原创 2015-03-13 16:43:00 · 5275 阅读 · 1 评论 -
JAVA实现拓扑排序
折腾了很久才实现的拓扑排序,把代码和思路整理一下:拓扑排序是用来对有向无环图进行排序的,和图的广度优先遍历类似,主要是利用队列把节点的入度为0(就是没有指向该节点的节点,只有从节点发出的)的元素入队,然后1:将队首元素出队输出并寻找该元素的所有相邻元素的节点,2:对这些节点的入度-1,并检查是否有入度减为0的,如有,则入队。重复上述操作直到队列为空为止。容易出问原创 2015-03-13 14:32:12 · 2053 阅读 · 1 评论