数据结构
文章平均质量分 76
susandebug
keep moving
展开
-
堆及其应用
最近在看排序算法,看到堆排序的时候,顺带整理了一下堆的性质及应用。还有不详细的地方,之后慢慢补充。 对于堆的数据结构的介绍,在网上搜了下,具体讲的不是很多。发现比较好的一篇介绍堆的博客是http://dongxicheng.org/structure/heap/。在此感谢他。 通过对上面那篇博客的学习,然后自己也去翻了下《算法导论》里面关于堆排序(heapsort转载 2015-06-24 11:40:57 · 594 阅读 · 0 评论 -
TopSort(拓扑排序)中DFS和BFS的应用
图的搜索:深度优先搜索:下面图中的数字显示了深度优先搜索顶点被访问的顺序。为了实现深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。(3) 如果不能执行规则1和规则2,就完成了整个搜索过程。广度优先搜索:在深度优先搜索中,算法原创 2015-07-11 21:39:28 · 12877 阅读 · 1 评论 -
k-d tree算法
k-d tree算法 k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多转载 2015-08-25 17:18:12 · 635 阅读 · 0 评论 -
高级树形结构之字典树(Trie)
1.定义字典树又称单词查找树,前缀树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。即主要用于词频统计与查找(前缀匹配)。2.Trie的构建下面我们有and,as,at,cn原创 2015-08-19 21:11:22 · 1383 阅读 · 0 评论 -
动态查找树比较——BST、AVL、RBT、B、B+
原文转自:http://www.iteye.com/topic/614070感谢作者的分享。我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势:(1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作转载 2015-08-25 16:49:07 · 1806 阅读 · 0 评论 -
数据结构之红黑树——BST的变种2
转自:http://hxraid.iteye.com/blog/611816感谢原文作者的分享红黑树的性质与定义红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。2. 根结点是黑色的。3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关转载 2015-08-25 16:39:22 · 664 阅读 · 0 评论 -
数据结构之伸展树(Splay)--BST的变种
伸展树是二叉查找树的一种改进,和AVL不同的是,它不维持树的平衡,但对与树的一些操作,每次操作的均摊时间为O(log N),这是通过伸展树的一些特性保证的。特点:伸展树将每次查找或者插入的数旋转到根节点,根据理论90%的操作作用于10%的数据,因此,将经常操作的数前移可以极大地提高插入,查找的效率。伸展树与二叉查找树不同的是每次增删查找操作后需要进行spaly(x,S),它的含义是将x旋转原创 2015-08-25 15:51:16 · 650 阅读 · 0 评论 -
数据结构之红黑树——BST的变种
转自大神July的博客:点击打开链接在此mark一下教你透彻了解红黑树作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structur转载 2015-08-25 16:36:49 · 676 阅读 · 0 评论 -
数据结构之AVL树---BST的变种
数据结构之AVL树1 .基本概念AVL树的复杂程度真是比二叉搜索树高了整整一个数量级——它的原理并不难弄懂,但要把它用代码实现出来还真的有点费脑筋。下面我们来看看:1.1 AVL树是什么?AVL树本质上还是一棵二叉搜索树(因此读者可以看到我后面的代码是继承自二叉搜索树的),它的特点是:1. 本身首先是一棵二叉搜索树。 2. 带有平衡条件:每个结点的左右子树转载 2015-08-25 14:59:14 · 534 阅读 · 0 评论 -
单链表初始化、插入、删除
单链表初始化、插入、删除//单链表初始化、插入、删除#include #include typedef int ElemType; //定义结点类型 typedef struct Node{ ElemType data; //单链表中的数据域 struct Node *next; //单链表的指针域 }N转载 2015-07-14 16:29:16 · 1415 阅读 · 0 评论 -
最小生成树(MST)—prim和kruskal算法
最小生成树(MST:minimum-cost spanning tree)也称最小支撑树,任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通).加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和.最小代价生成树是其所有生成树中代价最小的生成树。实现最小生成树的算法常用的是Prim,Kruskal学校数据结构的书上讲解了这两大算法的思路及用C++实现,但关于其转载 2015-07-11 22:41:19 · 7323 阅读 · 0 评论 -
Huffman编码与解码C++程序
//*******************************huffman.h**********************//*****************叶子结点为n的哈夫曼树共有2n-1个结点**********#ifndef HUFFMAN_H#define HUFFMAN_Hclass HuffmanNode {public: char info; //结点原创 2015-07-04 17:06:18 · 4318 阅读 · 1 评论 -
最短路径—Dijkstra算法和Floyd算法
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html最短路径—Dijkstra算法和Floyd算法Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止转载 2015-07-11 22:14:47 · 2110 阅读 · 0 评论 -
B树、B+树、B*树
2-3树和B树很少用于实现,经常使用的是B树的变体B+树和B*树,它们具有更高的效率B树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少转载 2015-07-11 11:52:07 · 430 阅读 · 0 评论 -
线性表、栈、队列
线性表、栈、队列1.线性表线性表有两种实现方式:顺序表和链表具体实现见书上66页顺序表的缺点是大小是事先固定的,当所存元素较少时,浪费很多空间。链表的缺点是每个结点上附加一个指针开销。线性表适合查询,访问。而链表适合插入,删除。 还有一种结构是双链表,包括一个prev和一个next指针。 2.栈stack栈是限定仅在一端进行插入或者删除操作的线性表。原创 2015-07-01 22:44:12 · 795 阅读 · 0 评论 -
查找算法系列之复杂算法:哈希查找
目前为止已经介绍了顺序查找、二分查找、分块查找、二叉排序树,见作者之前的文章:http://blog.csdn.net/u010025211/article/details/46635325http://blog.csdn.net/u010025211/article/details/46635183今天这篇博文将介绍哈希查找。1.为什么要用哈希查找之前所讲原创 2015-06-25 15:14:39 · 4209 阅读 · 1 评论 -
查找算法系列之复杂算法:二叉排序树BST
前面总结了顺序查找,二分查找,分块查找算法,此篇博文将详解介绍二叉排序算法(Binary Sort Tree)。在介绍二叉排序算法之前,首先介绍什么事二叉排序树(BST)。首先从二叉树讲起:1、二叉树的概念二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(leftsubtree)和“右子树”(rightsubtree)。二叉树常被用作二叉查找树和二叉原创 2015-06-25 13:54:34 · 4481 阅读 · 0 评论 -
STL——stack/queue 的使用方法 C++
1、stackstack 模板类的定义在头文件中。stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。定义stack 对象的示例代码如下:stack s1;stack s2;stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是转载 2015-06-25 12:32:45 · 782 阅读 · 0 评论 -
Huffman树编码与解码
#include #include using namespace std;#define MAX 32767 typedef struct{ int weight; char value; int parent; int lchild; int rchild;}HTNode, *HuffmanTree; //动态分配数组存储霍转载 2016-05-23 17:10:45 · 774 阅读 · 0 评论