大部分人称呼它们为“胜者树”和“败者树”,也有人称呼它们为“优胜树”和“淘汰树”,我觉得还是优胜树和淘汰树比较好听点。
优胜树是完全二义树,每个结点的取值足两个孩子的较小值。根据定义,根结点的取值是整个树的最小值。
如果规定关键字较小的记录获胜,则优胜树与锦标赛的晋级过程相似,每个非叶结点都对应一场比赛的获胜选手,根是赛事的胜者,其关键字最小。由于每个结点通常占用的存储空间较大,为节省空间,在优胜树的归并过程,可用指针指向每路序列的第一个记录,图中的根结点仅包含一个指针,指向第4路的第一个记录。
为什么要这样呢?或者说,看到这里,依然是觉得这棵树平平无奇的。
不急,我们来看看优胜树的重构: 以上面的例子为例,取出了第一个“6”之后,第四排及时的补上了一个“15”, “15”和旁边的“20”进行比较,选出来“15”, “15”再和旁边的“9”进行比较,选出了“9”, “9”再和旁边的“8”进行比较,选出了第二个值:8。
从这个演示可以看出这个算法真正吸引我们的地方就是当决出一个胜者后,要取得下一个胜者的比较只限于从根到刚才选出的外结点这一条路径上。可以看出除第一次比较需要n-1次外,此后选出次小,再次小…的比较都是log n次,故其复杂度为O(nlogn)。但是对于有n个待排元素,锦标赛算法需要至少2n-1个结点来存放胜者树。故这是一个拿空间换时间的算法。
对于胜者树来说,在节点上升的时候首先需要获得父节点,然后再获得兄弟节点,然后再比较。这时人们又想能否减少访存次数,于是就有了败者树。
在败者树中,用父结点记录其左右子结点进行比赛的败者,让胜者参加下一轮的比赛。败者树的根结点记录的是败者,因此,需要加一个结点来记录比赛的最终胜者。
败者树重构过程如下:①首先,将新进入败者树的新结点与其父结点进行比较,并将败者存放在父结点中;②然后,将第1步中比较后的胜者再与上一级的父结点比较。
因为重构时覆盖原来叶子节点的下一个节点都比原叶子节点小,这里的小是指胜利的反方向,所以只要和败者比即可。此时父节点记录的就是败者,因此,只要和父节点比较即可。所以说对于败者树来说,它只要访问父节点,这是败者树的优势。
晕不?我也晕呐,看了半天我才缓过来,值小的为胜者,值大的为败者。。。。。 把这个观念扭过来,然后我们再看。
捋一下?捋清楚思路我们再往下,搞红黑树的时候都没这么折磨人,小者为胜,这个思想要扭过来。
难搞哦。。
【数据结构】第五章——树与二叉树详细介绍树的基本概念、重要术语以及一些基本性质……
Python数据结构深度探索:树的构建与遍历一、树的基础概念1.1 定义与特性树(Tree)是一种非线性的层次化数据结构,具有以下核心特征:由**节点(Node)和边(Edge)**组成每个节点有零个或多个子节点没有父节点的节点称为根节点(Root)没有子节点的节点称为叶节点(Leaf)任意两个节点之间有且仅有一条路径%% 可交互树结构graph TD A((8))
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
刚开始比较懒,淘汰树和优胜树差不多,就没补。代码部分测试,等整个系列写完再完整的测一遍#include<iostream>#include<vector>using namespace std;class Tree_Node {private: success_tree* father; //每个节点都会有父节点 int val; //当前节点的值public: Tree_Node(int val) :val(val) {}};vector<int
数据结构笔记6树与二叉树前言 数据结构笔记5数组写一下树与二叉树的笔记。思维框架图文章目录数据结构笔记6树与二叉树前言思维框架图树的定义和基本术语二叉树遍历二叉树和线索二叉树树和森林以及哈夫曼树习题选择是由多叉树F转换而成,那
目录树树的概念树的存储与表示常见的一些树的应用场景二叉树二叉树的概念二叉树的性质(特性)二叉树的实现二叉树添加结点二叉树的遍历广度优先遍历(层次遍历)深度优先遍历二叉树由遍历确定一个树树二维树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节
树与二叉树之间、森林与二叉树之间可以相互转换,而且这种转换是一一对应的。
树是一种非线性的数据结构,它包含n(n>=1)个节点,(n-1)条边的有穷集合。把它叫做“树”是因为它看起来像一个倒挂的树,也就是说它是根朝上,叶子朝下的。
树型结构是一类重要的非线性结构,树型结构是结点之间有分支, 并且具有层次关系的结构,它非常类似于自然界中的树
一、概述1、树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外
1. 树与树的表示1.1 什么是树1.2 查找1.2.1 静态查找1.3 树的定义1.4 树的一些基本术语1.5 树的表示2. 二叉树及存储结构2.1 二叉树的定义3. 二叉树的遍历1. 树与树的表示1.1 什么是树 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树具有以下的特点: (1)每个节点有零个或多个子节点; (2)没有父节点的节点称为根节点; (3)每一个非根.
1)结点的度:树所拥有的子树叫做树的度2)树的度:就是树中节点度最大的度3)树的层次:根为第一层次4)树的深度:指数的层次最大的5)二叉树:第i层上最多有2^(i-1)个节点 深度为k的数最多有2^k -1个节点 任何一颗二叉树,如果终端节点数为n1, 结点
查找的基本概念查找表运作查找算法的载体,可以使用多种数据结构来实现。关键字关键字是数据元素或记录中某个数据项的值,用它可以标识一个数据元素或记录。查找通过关键字,向查找表索要数据的行为。ASL平均查找长度,在查找操作中和给定值进行比较的关键字个数的期望值。公式线性查找树表查找线性查找对修改数据时内存开销较大,只适合静态查找。为此,用树表来进行动态查找的树结构便担此重任。散列查找二叉树排序二叉排序树
一、树的定义树是n(n>=0)个结点的有限集。n=0时称为空树,在任意一颗非空树:1、有且仅有一个特定的根结点。2、当n>1时其余结点可分为m(m>0)个互不相交的有限集T1、T2、.....Tm,其中每一个集合本身又是一棵树,并且称为根的子树。二、结点的度,拥有的子树称为结点的度如上图结点A的度...
数据结构中树的操作,很多时候我们不会自己写些底层的树算法,有很多的函数库已经实现了相关的算法并且性能较好,但是理解树的含义也尤为重要,下面是二叉树的四种遍历算法和相关的一些算法,本文给出都是非递归算法。 1.前序遍历(根左右)void PreOrderN(BTreeNode * BT){ const int MS = 10; BTreeNode * s[MS]; //用数组来
对于许多电脑爱好者,尤其是学生和刚入门的朋友来说,自己动手组装电脑(DIY)或升级硬件既充满乐趣,也伴随着不少困惑。面对市场上琳琅满目的CPU、GPU(显卡)和各种配件,如何根据预算和需求做出最具性价比的选择,常常是一个令人头疼的问题。 近期,一个名为“AI硬件助手”的在线工具出现在一些用户的视野中 ...
本文对市面上主流的5款甘特图产品进行了深度评测,重点关注功能和界面易用性。评测发现,iodraw界面简洁,支持主题切换和任务关联,但自定义列和任务移动受限;星甘StarGantt作为新晋开源产品,功能全面,支持自定义列、任务拖动和级联时间自动更新,体验较为优秀。 ...
降AI攻略:博主实测经验分享 一、为什么AI生成的文本容易被检测? 现在AI写作工具越来越普及,但随之而来的是AI检测技术的升级。很多同学和我抱怨,自己用AI写的内容很容易被系统识别出来,尤其是学术论文,一旦被判定为AI生成,后果可不小。这主要是因为AI生成的文本往往带有一些固定的“指纹”,比如特定 ...