最优二叉树算法

【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表

前提是你 提交于 2019-12-04 20:51:38
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢。 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点都只有有限个子节点或无子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树里面没有环路(cycle) 1.2常见术语 节点的度 :一个节点含有的 子树的个数 称为该节点的度; 树的度 :一棵树中,最大的节点度称为树的度; 叶节点 或 终端节点 :度为零的节点; 非终端节点 或 分支节点 :度不为零的节点; 父亲节点 或 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 孩子节点 或 子节点 :一个节点含有的子树的根节点称为该节点的子节点; 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 节点的 层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 深度 :对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0; 高度 :对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;

数据结构――一些概念

匿名 (未验证) 提交于 2019-12-03 00:39:02
数据结构就是研究数据的 逻辑结构 和 物理结构 以及它们之间 相互关系 ,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。 数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的 基本 单位 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。 数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等等 逻辑结构:数据之间的相互关系。 集合 结构中的数据元素除了同属于一种类型外,别无其它关系。 线性结构 数据元素之间一对一的关系 树形结构 数据元素之间一对多的关系 图状结构或网状结构 结构中的数据元素之间存在多对多的关系 物理结构/存储结构:数据在计算机中的表示。物理结构是描述数据具体在内存中的存储(如:顺序结构、链式结构、索引结构、哈希结构)等 在数据结构中,从逻辑上可以将其分为线性结构和非线性结构 数据结构的基本操作的设置的最重要的准则是, 实现应用程序与存储结构的独立 。实现应用程序是“逻辑结构”,存储的是“物理结构”。逻辑结构主要是对该结构操作的设定,物理结构是描述数据具体在内存中的存储(如:顺序结构、链式结构、索引结构、希哈结构)等。 顺序存储结构中,线性表的逻辑顺序和物理顺序总是一致的。但在链式存储结构中

详细图解哈夫曼Huffman编码树

匿名 (未验证) 提交于 2019-12-03 00:36:02
1 引言    哈夫曼(Huffman)编码算法 是基于二叉树构建编码压缩结构的,它是数据压缩中经典的一种算法。算法根据文本字符出现的频率,重新对字符进行编码。因为为了缩短编码的长度,我们自然希望频率越高的词,编码越短,这样最终才能最大化压缩存储文本数据的空间。   假设现在我们要对下面这句歌词“we will we will r u”进行压缩。我们可以想象,如果是使用ASCII码对这句话编码结果则为:119 101 32 119 105 108 108 32 119 101 32 119 105 108 108 32 114 32 117(十进制表示)。我们可以看出需要19个字节,也就是至少需要152位的内存空间去存储这些数据。   很显然直接ASCII码编码是很浪费空间的,Unicode就更不用说了,下面我们先来统计一下这句话中每个字符出现的频率。如下表,按频率高低已排序: 2 哈夫曼二叉树构建 2.1 初始队列   那么我们按出现频率高低将其放入一个优先级队列中,从左到右依次为频率逐渐增加。   下面我们需要将这个队列转换成哈夫曼二叉树,哈夫曼二叉树是一颗带权重的二叉树,权重是由队列中每个字符出现的次数所决定的。并且哈夫曼二叉树始终保证权重越大的字符出现在越高的地方。 2.2 第一步合并   首先我们从左到右进行合并,依次构建二叉树。第一步取前两个字符u和r来构造初始二叉树

数据结构与算法之二叉树

馋奶兔 提交于 2019-12-01 09:32:12
树 树的概念 树(英语:tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>=0)个有限节点组成一个具有层次关系的集合。把它叫做“ 树 ”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 当n=0时,为空树,在任何一棵空树中: 有且仅有一个特定的称为根(Root)的节点 当n>1时: 除根节点外,其余节点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树的术语 节点的度 :一个节点含有的子节点的个数称为该节点的度。 B的子节点为D、E、F, 因此,节点B的度为3。 树的度 :一棵树中,最大的节点的度称为树的度。 最大的节点的度为B节点的度,因此该树的度为3。 叶节点 或 终端节点 :度为零的节点。 不能往下再分的节点:K、J、F、L、O、P。 父亲节点 或 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点。 如:K的父节点为I。 孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点。 B的孩子节点或子节点为:D、E、F。 兄弟节点

数据结构--哈夫曼树

◇◆丶佛笑我妖孽 提交于 2019-11-28 22:27:45
Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。 定义 :给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 这个定义里面涉及到了几个陌生的概念,下面就是一颗哈夫曼树,我们来看图解答。 (01) 路径和路径长度 定义 :在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。 例子 :100和80的路径长度是1,50和30的路径长度是2,20和10的路径长度是3。 (02) 结点的权及带权路径长度 定义 :若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。 例子 :节点20的路径长度是3,它的带权路径长度= 路径长度 * 权 = 3 * 20 = 60。 (03) 树的带权路径长度 定义 :树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。 例子 :示例中,树的WPL= 1* 100 + 2*5 0 + 3* 20 + 3* 10 = 100 + 100 + 60 + 30 =290。 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径。 ② 路径长度

数据结构之树

时光总嘲笑我的痴心妄想 提交于 2019-11-28 16:11:32
本篇只涉及树的概念范围和应考思路,不涉及具体结构或算法的实现与思考 1.树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: ①每个节点有零个或多个子节点; ②没有父节点的节点称为根节点; ③每一个非根节点有且只有一个父节点; ④除了根节点外,每个子节点可以分为多个不相交的子树; 然后你要知道一大堆关于树的术语:度,叶子节点,根节点,父节点,子节点,深度,高度。 二叉树 二叉树:每个节点最多含有两个子树的树称为二叉树。(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树。) 在二叉树的概念下又衍生出满二叉树和完全二叉树的概念 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上 完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。 算法实现(笑) 二叉树: private static class TreeNode {

数据结构与算法

ぐ巨炮叔叔 提交于 2019-11-28 12:05:29
第一章:概述 1. 数据和数据结点   数据是对客观事物的描述形式和编码形式的统称。   数据是由数据元素组成的,数据元素又称为数据结点,简称结点。   每个数据元素又包括多个数据项,每个数据项又称为结点的域,其中,用来唯一标识结点的域称为关键字。 2.数据结构、逻辑结构、物理结构   一个有穷的结点集合D,以及该集合中各结点之间的关系R,组成一个数据结构,表示成B=(D, R);   D和R是对客观事物的抽象描述,R表示结点间的逻辑关系,所以(D, R)表示的数据的逻辑结构。   数据结构在计算机内的存储形式称为存储结构,也称为物理结构。 3. 数据结构的种类   表结构(一对一)、树结构(一对多)、图结构(多对多)、散结构(结点之间没有关系,或者说存在特殊关系-无关关系) 4. 抽象、抽象数据类型、抽象数据类型的表示   抽象 - 从一般意义上将,抽象是指“抽取事物的共性,忽略个性;体现外部特征,掩饰具体细节”。   抽象数据类型简称ADT(abstract data type), 是将“数据”连同对其的“处理操作”(即运算)封装在一起而形成的复合体。注意: ADT是对一个确定的数学模型,以及定义在该模型上的一组操作的抽象表示,不涉及具体的实现。   抽象数据类型的表示 - 如可以将有序表有关的数据和处理操作封装成一个ADT,涉及的数据可能有元素个数、数据元素等

词向量技术原理及应用详解(二)

感情迁移 提交于 2019-11-28 11:10:04
当前文本向量化主流的方式是word2vec词向量技术,从基于统计的方法,到基于神经网络的方法,掌握word2vec词向量技术是学习文本向量化的最好的方式 下面是Tomas MIkolov的三篇有关word embedding的文章: 1、Efficient Estimation of Word Representation in Vector Space, 2013 2、Distributed Representations of Sentences and Documents, 2014 3、Enriching Word Vectors with Subword Information, 2016 因此严格意义上说,word2vec是一个2013年出现的新方法,15年以后逐渐流行起来。 Word2vec的几个关键点 什么是word2vec? word2vec是词的一种表示,它将词以固定维数的向量表示出来。是用来将一个个的词变成词向量的工具。例如:“我爱中国”这句话通过分词为 我/ 爱/ 中国。那么这时候三个词都将表示为n维的词向量。中国 = [x1,x2,…,xn] 为什么要用word2vec?word2vec有什么好处。 传统的基于词袋模型 one-hot representation在判定同义词,相似句子的时候很无力。 例如在一个只有两个词的词典中。快递被编码为v1 = [0

Huffman编码树

半世苍凉 提交于 2019-11-28 03:03:25
先简单回顾一下哈夫曼二叉树的概念:哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。 构造哈夫曼树的算法如下: 1)对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,...,Ti,..., Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。 2)在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。 3)从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。 4)重复2)和3),直到集合F中只有一棵二叉树为止。 下面举一个很普通的例子: 对于权2,3,5,7,11,13,17,19,23,29,31,37,41,求具有最小带权外部路径长度的二叉树. 1>找到最小权值和次小权值2和3,然后2+3=5构成两个节点的父母,并将5作为下次合并的新权值;