摘要: 更好的阅读体验? 前言 前置知识: 二叉搜索树 其实 Splay 的实现蛮多的,如果真的要能懂的话建议自己画图理解。 加油。 基础操作 准备操作 我们先把节点要维护的先定义出来。 子树大小 节点的权值 左儿子 右儿子 父亲 size val ch[0] ch[1] fa struct node{in 阅读全文
posted @ 2024-12-29 19:37 fush's_blog 阅读(66) 评论(0) 推荐(0)
摘要: 前言 更好的阅读体验。 无旋 treap。 默认读者会 BST 的基本操作、堆和旋转。 本文旋转部分和上面那篇文章的相同。 代码中是小根堆。 思想 treap 既是一棵二叉查找树(tree),也是一个二叉堆(heap)。 但是如果这两个数据结构用同一个权值维护,那么这两种数据结构是矛盾的。 所以 t 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(31) 评论(0) 推荐(0)
摘要: 更好的阅读体验。 定义 BST(二叉搜索树)是一种树形结构,有如下性质。 空树是二叉搜索树。 若左子树非空,那么左子树上所有点的权值均小于其根节点的值。 若左子树非空,那么其右子树上所有点的权值均大于其根节点的值。 二叉搜索树的左右子树均为二叉搜索树。 操作 BST 的单次操作最坏为 \(O(n)\ 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(160) 评论(0) 推荐(0)
摘要: 前言 更好的阅读体验 默认读者会基本的 BST 操作。 节点定义 平衡因子:BF(BalanceFactor),左子树高 \(-\) 右子树高。 平衡树是让树的形态尽可能像完全二叉树,而不是链。 在 AVL 中,我们认为 \(\left|\text{BF}\right|\le 1\),也就是 BF 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(72) 评论(0) 推荐(0)
摘要: 更好的阅读体验? 前言 默认读者会基本的 BST 操作和旋转操作。 本文旋转部分的代码。 rotate(x) 表示将 \(x\) 节点旋转到其父亲节点的位置。 建议阅读:B 树 红黑树 规则 红黑树的平衡不靠平衡因子实时监测,和 treap 的随机值,或像 splay 的均摊。 红黑树的平衡完全靠自 阅读全文
posted @ 2024-12-29 19:30 fush's_blog 阅读(61) 评论(0) 推荐(1)
摘要: 我是 fush,一个很菜的 oier。 这里,我只想分享一些自己的学习记录。 由于本人较菜,有哪里写的不严谨的地方欢迎在评论区指出。 除了下面几个账号(本人的),如果要转载请写明出处,谢谢。 阅读全文
posted @ 2024-12-29 19:14 fush's_blog 阅读(46) 评论(0) 推荐(1)
摘要: 线段树你肯定会吧,WBLT 就是把线段树和平衡树结合起来了。 阅读全文
posted @ 2024-12-29 19:05 fush's_blog 阅读(144) 评论(0) 推荐(1)
摘要: 前言 默认读者会 BST 的基本操作。 节点定义 替罪羊树采用了懒惰删除的方法,不会立即删除某个点,而是在重构时不放进数组。 struct node{ int ch[2], val; int siz1, siz2, cnt, sum; //扣去懒惰删除的节点数量,没扣去懒惰删除的节点数量,树内相同权 阅读全文
posted @ 2024-12-29 19:04 fush's_blog 阅读(31) 评论(0) 推荐(1)