
数据结构
文章平均质量分 76
pppppppc
My interests are in Parallel Computing and Optimization.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最短路径
Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E)转载 2016-02-25 20:58:42 · 546 阅读 · 0 评论 -
最小生成树
一、最小生成树算法基本思想最小生成树是基于贪心法的。这里我只介绍prime算法,关于prime算法,核心思想就是:把找好的顶点放到v集合,剩下的顶点留在u集合,每次在寻找u集合中顶点与v集合中的顶点有相邻边的最短边,加入v集合,在u集合中移除,一直找到u集合为空为止。每次从u集合的点加入v集合的时候记得修改lowcost中的值。二、最小生成树的数据结构map[i][j]转载 2014-12-08 21:37:33 · 697 阅读 · 0 评论 -
图的存储和遍历
图的基本概念(1)图是由顶点集合以及顶点间的关系集合组成的一种数据结构。 Graph = (V,E) V是顶点的又穷非空集合;E是顶点之间关系的有穷集合,也叫边集合。(2)有向图:顶点对是有序的;无向图:顶点对是无序的。(3)无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用无序偶对(Vi,Vj)来表示。 如果图中任意两个顶点时间的边都是无转载 2016-02-23 16:59:50 · 1674 阅读 · 0 评论 -
堆
介绍堆,英文名heap。这个数据结构是来自于堆排序的,其结构近似于一颗完全二叉树,通常用数组来存储表示。堆是实现堆排序以及优先队列的基础数据结构。根据任何子树根节点都比左右孩子大或小,堆可以分为最大堆(又叫大根堆)和最小堆(又叫小根堆)。最大堆具有性质:任何结点大于等于它左右孩子结点。最小堆则恰好相反:任何结点小于等于它左右孩子结点。最小堆和最大堆如图所示:如何原创 2016-02-22 11:59:31 · 492 阅读 · 0 评论 -
哈夫曼树
介绍哈夫曼树,英文名 Huffman Tree, 又称赫夫曼树或最优二叉树。其主要用途是在于解决哈夫曼编码。哈夫曼编码则目的是在字节长度一定下,尽可能传输较多的信息。这也就是要让出现在明文中次数较多的字符对应较短的编码。这样即可达到在字节长度一定下,传输较多内容。为了介绍哈夫曼树的特点,先介绍一些名词,路径长度和带权路径长度。路径长度是指一个结点到另外一个结点之间分原创 2016-02-21 17:03:46 · 5133 阅读 · 0 评论 -
B-树
当查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。 1、定义与特性B-树是一种平衡的多路查找树,在文件系统中有所应用。主要用作文件的索引。B转载 2016-01-24 17:43:22 · 496 阅读 · 0 评论 -
AVL树的旋转
平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n) AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。 1. LL型 平衡二叉树某一节点的左孩子的左转载 2016-01-23 14:43:45 · 437 阅读 · 0 评论 -
二叉查找树
@:二叉查找树 定义二叉搜索树(Binary Search Tree),又称为二叉排序树(Binary Sort Tree), 简称为BST。它具有以下性质: ①. 任何一个结点大于它左子树所有结点的值,小于它右子树所有结点的值 ②. 任何一个结点的左右子树也是二叉搜索树 ③. 中序遍历结果是一个非递减序列相关操作以及时间复杂度分析查找(Find)在二叉搜索树中,查找操作从根结点出发分以下四个原创 2016-01-22 19:27:52 · 966 阅读 · 0 评论 -
二叉树
定义二叉树不是线性的数据结构,而是树型结构,它的特点是每个结点之多有两颗字数(即二叉树不存在出度大于2的结点),并且二叉树子树有左右之分,其次序不能任意颠倒。二叉树有5条非常重要的性质以及4种遍历方法。前者经常在笔试题中出现,后者经常会在机试,面试中出现。 性质性质1: 在二叉树的第i层上至多有2i-1(i≥1);利用数学归纳法证明此性质: ①. 当i=1时,只有一个根结点,显然2i-1 =原创 2016-01-19 12:34:34 · 991 阅读 · 0 评论 -
线索二叉树
@:线索二叉树定义由于一般二叉树的链式表示会有很多空闲的指针域,假设一课有n结点的二叉树,用二叉链表表示存储结构,则它的空闲链域有n+1个。因为每个结点有左右孩子链域,所以总链域为2n。又由于除了根节点,必定有它的父亲结点的某个链域指向它,因此使用的链域为n-1;所以空闲链域为2n-(n-1) = n+1个。为了充分利用这些链域,我们将这些链域设置为线索。线索的定义是,一棵树按照某种遍历方式将存储的原创 2016-01-21 11:15:18 · 1336 阅读 · 0 评论 -
栈
定义栈是一种特殊的线性表,它只允许对线性表的表头或者表尾数据进行操作。栈的实现方式有两种,一种是顺序映像实现,还有一种是链式映像实现。栈的顺序映像实现方式通常和线性顺序表中的原理一样,只不过他只能对表尾进行操作,也就是我们熟悉的top指针放在表尾,入栈出栈操作就是在顺序表表尾增加删除结点。利用这种方式实现,需要预分配栈空间,当存储元素个数超过预分配的栈空间的时候,需要扩充。栈的链式映像实现通俗点说就原创 2016-01-18 12:06:51 · 918 阅读 · 0 评论 -
队列
队列是一种特殊的线性表,它只允许对线性表的头尾进行操作,满足FIFO(先进先出)的规则。通常有两种实现方式,顺序结构和链式结构。一般顺序结构实现,都采用了循环队列的方式来减少空间的浪费。而链式结构则不需要做循环队列来减少空间浪费,因为本身就是动态生成结点的。对于入队和出队操作,两种方式都在对应在表头和表尾位置,时间复杂度都是相同的,这个会在相关操作和时间复杂度分析中具体分析。循环队列图链表队列图相关原创 2016-01-18 11:56:53 · 599 阅读 · 0 评论 -
线性链式表
定义线性链式表就是我们常说的链表,也被称为线性表的非顺序映像或链式映像。它与线性顺序表的最大区别就是各个存储单元是非连续的。它无法通过数学公式来确定每个存储单元在内存中的关系。链表中最重要的两个概念就是结点(Node)和next指针。在单向链表中结点通常只包含两个存储域,一个是data数据域,用来存储结点所代表的值。第二个是,next指针域,用来存储结点的后继。因此next指针成了寻找结点后继的唯一原创 2016-01-18 12:05:00 · 1097 阅读 · 0 评论 -
线性顺序表
定义线性顺序表是线性表中一种利用顺序结构实现的数据结构。线性顺序表又被称为线性表的顺序映射或者线性表的顺序存储结构。 它指的是利用一组地址连续的存储单元依次存储线性表的数据元素。就如上图所示,线性顺序表的元素之间是连续的。假设线性顺序表的每个元素需要占用d个存储单元,并且规定线性顺序表 第一个存储单元的地址为基地址(首地址)。那么线性顺序表中第i+1个元素的地址和第i个元素的地址有一下关系对以上原创 2016-01-18 12:01:46 · 1859 阅读 · 0 评论 -
Hash表
麻省理工公开课: http://open.163.com/movie/2010/12/R/E/M6UTT5U0I_M6V2TG4RE.html转载 2016-02-26 12:52:46 · 460 阅读 · 0 评论