Data structures 是否有允许快速合并的地图数据结构?

Data structures 是否有允许快速合并的地图数据结构?,data-structures,merge,binary-tree,big-o,Data Structures,Merge,Binary Tree,Big O,是否存在至少具有插入、删除、访问和合并的O(logn)的地图数据结构 大多数像和具有大多数这些属性,但我相信它们具有O(nlogn)合并。是否有更快合并的数据结构 编辑:我环顾四周,找不到像这样的东西。如果没有这样的数据结构,我想了解一下为什么不可能做到这一点。我想看看splay树。您可能最终会支付合并成本,但您应该能够插入另一棵树,并将成本推迟到以后。您是否需要一棵树来处理仅定义了比较的任意键类型,或者如果它仅适用于具有固定大小二进制表示的类型,那么是否可以(int、long、float、do

是否存在至少具有插入、删除、访问和合并的
O(logn)
的地图数据结构

大多数像和具有大多数这些属性,但我相信它们具有
O(nlogn)
合并。是否有更快合并的数据结构


编辑:我环顾四周,找不到像这样的东西。如果没有这样的数据结构,我想了解一下为什么不可能做到这一点。

我想看看splay树。您可能最终会支付合并成本,但您应该能够插入另一棵树,并将成本推迟到以后。

您是否需要一棵树来处理仅定义了比较的任意键类型,或者如果它仅适用于具有固定大小二进制表示的类型,那么是否可以(int、long、float、double等)?如果是后者,则二元基数树是一种具有非常高效合并的数据结构(幸运的话是O(1),最坏的情况是O(N))

有关数据结构的详细信息,请参见Chris Okasaki和Andrew Gill


Scala Collections库包含和的一个实现。所有其他java基元类型都可以转换为int或long,例如,使用java.lang.Double.doubleToLongBits表示Double。

看起来很酷,我可能会使用它……我只是不喜欢破坏性读取的想法。@Zifre:读取实际上不是破坏性的。如果有什么问题的话它们通常会改进树的结构,并且不会改变树的外部表示形式。八字树上的常量因子非常糟糕。如果合并频率不够高,则可能会出现“劣等”合并的最坏情况运行时间。此外,Captain Segfault所指的改进称为动态最优性猜想,已经建立了一些特殊情况。它本质上说明,对于任何访问序列,splay树最多使用O(1)操作数是任何其他二叉树的两倍。这会产生许多后果,例如:如果某些项访问非常频繁,那么它们的访问成本将低于O(logn)。