数据结构与算法
文章平均质量分 65
GongchuangSu
这个作者很懒,什么都没留下…
展开
-
弗洛伊德(Floyd)算法
简介罗伯特•弗洛伊德(Robert W.Floyd)计算机科学家,图灵奖得主,前后断言法的创始人,堆排序算法和Floyd-Warshall算法的创始人之一。第一次把“不确定性”概念引入程序,并且在分析理论、程序设计语言的逻辑与语义、自动程序验证、自动程序综合、算法分析以及编译器方面做出了巨大贡献,被授予第十三届图灵奖。Floyd-Warshall算法,中文亦称弗洛伊德算法,是解决任意两点间的最短路径原创 2016-04-18 20:22:29 · 2639 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra)算法
简介迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪杰斯特拉算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。算法流程初始时,S只包含起点s;U包含除s外的其他顶点,且U中顶点的距离为”起点s到该顶点的距离”[例如,U中顶点v的距离为(s,v)的长度,然后s和v不相邻,则v的距离为∞]。从U中选出”距离最短的顶点k”,并将顶点原创 2016-04-18 20:21:42 · 1617 阅读 · 0 评论 -
最小生成树
最小生成树在含有n个顶点的连通加权无向图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 普里姆(Prim)算法算法流程从单一顶点开始,普里姆算法按照以下步骤逐步扩大树中所含顶点的数目,直到遍及连通图的所有顶点。 - 输入:一个加权连通图,其中顶点集合为VV,边集合为EE; - 初始化:Vnew={x}V_{new} = \{x\原创 2016-04-18 20:19:53 · 693 阅读 · 0 评论 -
排序算法之归并排序(Java)
若人们不相信数学简单,只因他们未意识到生命之复杂。—— 约翰·冯·诺伊曼归并排序简介归并排序(Merge Sort),是创建在归并操作上的一种有效的排序算法。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并操作归并操作(merge),也叫归并算法,是指将两个已经排序的序列合并成一个序列的操作。原创 2016-03-28 21:30:48 · 542 阅读 · 0 评论 -
排序算法之快速排序(Java)
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious原创 2016-03-28 21:30:00 · 490 阅读 · 0 评论 -
排序算法之直接插入排序(Java)
直接插入排序简介直接插入排序(Insertion Sort)是一种简单直观的排序算法。其工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。直接插入排序过程1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果该元素(已排序)大于新元素,将该元素移到下一个位置4.重复步骤3,直到找到已排序的元素小于原创 2016-03-28 21:28:28 · 684 阅读 · 0 评论 -
排序算法之希尔排序(Java)
希尔排序简介希尔排序(Shell Sort),也称递减增量排序算法,是Donald Shell在1959年提出来的一种排序算法。它是插入排序的一种更高效的改进版本。希尔排序思想希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已经排好的原创 2016-04-03 21:51:34 · 648 阅读 · 0 评论 -
排序算法之冒泡排序(Java)
冒泡排序简介冒泡排序(Bubble Sort)是一种简单的排序算法。它重复的走访过要排序的数列,一次比较两个元素,如果反序则交换,重复地进行直到不再需要交换。冒泡排序过程1.比较相邻的元素,如果第一个比第二个大,就进行交换2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数3.针对所有的元素重复以上的步骤,除了最后一个4.持续每次对越来越少的元素原创 2016-04-03 21:50:54 · 604 阅读 · 0 评论 -
排序算法之简单选择排序(Java)
选择排序简介选择排序(Selection Sort)是一种简单直观的排序算法。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。简单选择排序过程简单排序过程很简单,其具体流程如下图所示:算法实现/** * @description 对顺序表L作简单选择排序 * @autho原创 2016-04-03 21:48:57 · 870 阅读 · 0 评论 -
排序算法之堆排序(Java)
堆排序简介堆排序(Heap Sort),是指利用堆这种数据结构所设计的一种排序算法。 堆排序的基本思想:将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它与末尾元素交换,此时末尾元素就是最大值,然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的次小值。如此反复执行,便能得到一个有序序列。堆结点的访问通常堆是通过一维数组来实现的。在数组起始位置为0的情形下:原创 2016-04-03 21:48:16 · 512 阅读 · 0 评论 -
十字链表(Java)
对于有向图来说,邻接表是有缺陷的。关心了出度问题,想要了解入度情况就必须要遍历整个图才能知道。反之也一样。那么,这一节就介绍有向图的一种存储方法,它能将邻接表和逆邻接表结合起来 ——十字链表。一、存储结构 定义顶点表结点结构:vertexfirstInfirstOut原创 2016-03-12 17:31:40 · 2956 阅读 · 0 评论 -
邻接表(Java)
无向图的邻接表结构如下所示:无向图的邻接表的代码实现:/* * 邻接表无向图(已提供参数) * 输入说明:vexs -- 顶点数组 * edges -- 边数组 * 输出说明:邻接表(即每个顶点所连接的点) */package test;public class ListUDG { int vlen; // 顶点个数 int elen原创 2016-03-11 22:21:16 · 3880 阅读 · 0 评论 -
拓扑排序(Topological Sorting)算法
拓扑排序(Topological Sorting)在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:每个顶点出现且只出现一次;若A在序列中排在B的前面,则在图中不存在从B到A的路径。用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网(Activity On Vertex Network)。 另外,AOV网是一种有原创 2016-05-27 12:47:49 · 3841 阅读 · 0 评论