首页 > 其他分享 >平衡树

平衡树

时间:2022-12-26 00:55:14浏览次数:27  
标签:rand 考虑 merge treap 有序 平衡 节点

fhq-treap

对于一个集合,需要维护它,我们考虑一个包含集合中所有元素的有序序列,并使用一棵树,其中每一个子树都对应着一个子序列:
image
这棵树有什么性质呢?首先它是一棵二叉查找树,也就是要保持内部有序性。如何保持?它按照中序遍历是有序的。如下图,是集合 \(\{1, 4, 2, 8, 5, 7\}\) 映射到的两棵二叉查找树。
image

这种树上可以进行查询,例如第 \(2\) 小的数是哪个?考虑第一颗树。根的左儿子有三个节点,应该在左儿子中。递归直到确定在根上。

这样做,支持动态加入点,并且减少了遍历次数。是比较优秀的。但我们知道树的期望高度是 \(\log n\),因此最好让树高相对“平衡”一些。

那么我们考虑给每个点赋随机权值,让每个点形成一个二元组 \((val, rand)\)。然后让这棵树对 \(rand\) 形成一个小根堆。那么这就是 treap。它是笛卡尔树的一种,当所有二元组确定下来的时候具有唯一性。

image

建树和一些基本的操作都可以用分裂/合并这两个 treap 上操作描述。下面介绍两种操作。

合并

image
考虑两棵子树,一棵上的节点都小于等于 \(k\),另一棵上的节点都大于 \(k\)。(也就是两个互相有序的数组)需要合并为一棵树。(保证了有序能做什么?等会会说)
image
期望复杂度 \(O(\log n)\)。
考虑建树过程。新插入一个数 \(k\)。我们先将维护着的树分裂成 \(\le k\) 和 \(>k\) 这两棵树 \(a,b\),且令只有单独一个节点 \(k\) 的树是 \(c\),然后执行 \(\operatorname{merge}(\operatorname{merge}(a, c), b)\)。

标签:rand,考虑,merge,treap,有序,平衡,节点
From: https://www.cnblogs.com/Zeardoe/p/17004891.html

相关文章

  • 平衡树
    平衡树包括很多种类,常见的有B树、AVL树、红黑树等。这些树都大致平衡,能保证最坏情况下为O(logN)的性能,因此广受大家的欢迎。但是由于平衡机制的不同,这些树都有着不同的应......
  • P3369普通平衡树 学习笔记
    题意写一棵平衡树,需要实现如下几种操作:插入\(x\)数删除\(x\)数(若有多个相同的数,因只删除一个)查询\(x\)数的排名(排名定义为比当前数小的数的个数\(+1\))查......
  • 嘤嘤的新平衡树
    给定一棵二叉树,二叉树的每个结点只有0或2个孩子。你需要对每个结点赋值一个正整数,使得每个结点的左右子树权值和相等。你需要返回所有结点的最小权值和对109+7取模的结......
  • #yyds干货盘点# LeetCode程序员面试金典:检查平衡性
    题目:实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过1。示例1:给定二叉树[3,9,20,null,null,15,7]  3 /\......
  • R语言统计学DOE实验设计:用平衡不完全区组设计(BIBD)分析纸飞机飞行时间实验数据
    全文链接:http://tecdat.cn/?p=31010原文出处:拓端数据部落公众号平衡不完全区组设计(BIBD)是一个很好的研究实验设计,具有从统计的角度看各种所需的特征。最近我们被要求撰......
  • P3369 【模板】普通平衡树
    题目链接题目要求:插入数据,删除数据,查询数的排名,查询排名为x的数,找前驱,找后继旋转操作,左旋和右旋,旋转$x$,旋转操作一定要符合先序遍历前后一致voidrotate(intx){ ......
  • 玩转OpenHarmony PID:教你打造两轮平衡车
     简介此次为大家带来的是OpenAtomOpenHarmony(以下简称“OpenHarmony”)系统与PID控制算法相结合并落地的平衡车项目。PID控制算法是一种经典的,并被广泛应用在控制领......
  • 各种平衡树
    如题,就是各种平衡树。FHQTreapAC记录#include<bits/stdc++.h>usingnamespacestd;intQread(){ intx=0;boolf=false;charch=getchar(); while(ch<'0'||ch>'9......
  • C/C++简易图书管理模拟系统(二叉平衡树)
    C/C++简易图书管理模拟系统(二叉平衡树)C/C++简易图书管理模拟系统(二叉平衡树)数据结构课程实验教案第8页实验题目八:综合实验简易图书管理模拟系统 机时......
  • 平衡二叉树(java版)
    题目描述:标签:树深度优先搜索递归给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值......