阿牧路泽

哪有那么多坚强,无非是死扛罢了
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

2018年10月14日

摘要: 一、桶排序介绍 桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。 假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排 阅读全文

posted @ 2018-10-14 22:41 阿牧路泽 阅读(180) 评论(0) 推荐(0)

摘要: 一、归并排序介绍 将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。1. 从下往上的归并排序:将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并;得到若 阅读全文

posted @ 2018-10-14 22:38 阿牧路泽 阅读(266) 评论(0) 推荐(0)

摘要: 一、堆排序介绍 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。 我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行详细说明。 最大堆进 阅读全文

posted @ 2018-10-14 22:37 阿牧路泽 阅读(199) 评论(0) 推荐(0)

摘要: 一、普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法。 基本思想 对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值 阅读全文

posted @ 2018-10-14 22:36 阿牧路泽 阅读(968) 评论(0) 推荐(0)

摘要: 一、最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 二、克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的 阅读全文

posted @ 2018-10-14 22:35 阿牧路泽 阅读(388) 评论(0) 推荐(0)

摘要: 一、拓扑排序介绍 拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。 这样说,可能理解起来比较抽象。下面通过简单的例子进行说明! 例如,一个项目包括A、B、C、D四个子部分来完成,并且A依 阅读全文

posted @ 2018-10-14 22:34 阿牧路泽 阅读(416) 评论(0) 推荐(0)

摘要: 一、深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径 阅读全文

posted @ 2018-10-14 22:33 阿牧路泽 阅读(493) 评论(0) 推荐(0)

摘要: 一、邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图。 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,<B,C>,<B,E>,<B,F>,<C,E>,<D,C>,<E,B>,<E,D>,<F,G>"共9条边。 上图右边的矩阵是G2在内存中的邻接矩 阅读全文

posted @ 2018-10-14 22:32 阿牧路泽 阅读(2321) 评论(0) 推荐(0)

摘要: 一、邻接矩阵无向图的介绍 邻接矩阵无向图是指通过邻接矩阵表示的无向图。 上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。由于这是无向图,所以边(A,C)和边(C,A)是同一条边;这里 阅读全文

posted @ 2018-10-14 22:31 阿牧路泽 阅读(2219) 评论(0) 推荐(0)

摘要: 一、图的基本概念 1. 图的定义 定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。 2. 图的种类 根据边是否有方向,将图可以划分为:无向 阅读全文

posted @ 2018-10-14 22:29 阿牧路泽 阅读(193) 评论(0) 推荐(0)

摘要: 一、斐波那契堆的介绍 斐波那契堆(Fibonacci heap)是堆中一种,它和二项堆一样,也是一种可合并堆;可用于实现合并优先队列。斐波那契堆比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。与二项堆不同的是,斐波那 阅读全文

posted @ 2018-10-14 22:22 阿牧路泽 阅读(539) 评论(0) 推荐(0)

摘要: 一、二项树的介绍 二项树的定义 二项堆是二项树的集合。在了解二项堆之前,先对二项树进行介绍。 二项树是一种递归定义的有序树。它的递归定义如下: (1) 二项树B0只有一个结点; (2) 二项树Bk由两棵二项树B(k-1)组成的,其中一棵树是另一棵树根的最左孩子。 如下图所示: 上图的B0、B1、B2 阅读全文

posted @ 2018-10-14 22:15 阿牧路泽 阅读(184) 评论(0) 推荐(0)

摘要: 一、斜堆的介绍 斜堆(Skew heap)也叫自适应堆(self-adjusting heap),它是左倾堆的一个变种。和左倾堆一样,它通常也用于实现优先队列。它的合并操作的时间复杂度也是O(lg n)。 相比于左倾堆,斜堆的节点没有"零距离"这个属性。除此之外,它们斜堆的合并操作也不同。斜堆的合并 阅读全文

posted @ 2018-10-14 14:01 阿牧路泽 阅读(265) 评论(0) 推荐(0)

摘要: 一、左倾堆的介绍 左倾堆(leftist tree 或 leftist heap),又被成为左偏树、左偏堆,最左堆等。它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到"对两个优先队列进行合并"的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左倾堆,则可以很好地解决这类问题。 左倾堆的定义 阅读全文

posted @ 2018-10-14 13:51 阿牧路泽 阅读(279) 评论(0) 推荐(0)

摘要: 一、堆和二叉堆的介绍 堆的定义 堆(heap),这里所说的堆是数据结构中的堆,而不是内存模型中的堆。堆通常是一个可以被看做一棵树,它满足下列性质: [性质一] 堆中任意节点的值总是不大于(不小于)其子节点的值; [性质二] 堆总是一棵完全树。将任意节点不大于其子节点的堆叫做最小堆或小根堆,而将任意节 阅读全文

posted @ 2018-10-14 13:41 阿牧路泽 阅读(228) 评论(0) 推荐(0)

摘要: 一、伸展树的介绍 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Tarjan创造。 (1) 伸展树属于二叉查找树,即它具有和二叉查找树一样的性质:假设x为树中的任意一个结点,x节点包含关键字key,节 阅读全文

posted @ 2018-10-14 13:33 阿牧路泽 阅读(254) 评论(0) 推荐(0)