c++ - 缺少增强 AVL 树的合并和拆分?
问题描述
Boost 提供了可以配置boost::container::set/map/multiset/multimap
底层二叉搜索树 (BST) 的位置,并且可以选择它作为 AVL 树。
一个(也许是最关键的)原因,为什么人们更喜欢 AVL 树而不是红黑树,是复杂性的merge
和操作。但是,令我惊讶的是,它似乎不提供这些操作。文档描述为复杂的元素操作(这与底层 BST 实现无关!?),文档甚至没有提到!split
O(logN)
boost::container
merge
O(NlogN)
split
我不能说关于merge
,但至于split
,我可以假设缺少它可能是由恒定时间size
问题所证明的,因此split
复杂性O(logN)
可能不知道两个结果部分的大小。但这可以通过具有侵入性容器并保持每个节点的子树节点计数来解决。
也有,但我在文档boost::intrusive::avl_set
中找不到 AVLmerge
和split
算法。
所以问题是。
- 是否有一个功能齐全、现成的基于 AVL 的实现,
set/map/multiset/multimap
它提供merge
和split
操作的复杂性为O(logN)
? - 如果没有,我该如何构建一个使用
boost::intrusive::avl_set
?
解决方案
推荐阅读
- c# - 为什么我的 Visual Studio Community 2019 在“调试”>“Windows”下没有“模块”选项以及如何修复它?
- google-apps-script - 如何使用 Google Apps 脚本 (GAS) 创建多个驱动器文件夹
- javascript - Chrome调度KeyboardEvent不起作用
- php - 带有代理到 https 链接的 php curl 请求
- playframework - 当我从集群中删除成员时,Infinispan 8.0.1 崩溃
- python-3.x - OpenCV 分类器错误:(-215) !empty() in function detectMultiScale
- java - 静态初始化,main和premain的执行顺序
- html - 尝试在大型显示器上水平对齐项目,并使用引导程序在小型显示器上垂直对齐项目
- javascript - Semantic UI React:同一个组件中多个 useEffect 调用的问题
- ggplot2 - R:如何制作时间序列中最后(或任何)数据点的小提琴/箱线图?