c++ - 如何高效地将元素插入到数组的任意位置?

标签 c++ algorithm data-structures insert time-complexity

是否有任何数据结构或算法可以像 O(1)O(log(n)) 那样高效地将元素插入数组的任意位置复杂?在 C++ 中有一个链表数据结构,它可以在 O(1) 的复杂度中高效地在 iterator 位置插入一个元素,但是要得到iterator 到那个位置需要 O(n),这是非常昂贵的。那么有没有任何数据结构可以支持这个函数 void insert(int pos, int val) 在位置 pos 之前插入一个元素 val 和这个函数复杂度小?

最佳答案

一些支持快速“插入到位置”操作的数据结构。

  1. Rope或类似的自平衡树数据结构。

    enter image description here

    引擎盖下:一个自平衡树,每个节点都包含其子树的“大小”。

    插入复杂度:O(logn)

    C++ 实现:SGI STL有一个绳索实现作为扩展。

  2. Skip list或修改。

    enter image description here

    引擎盖下:O(logn) 链接列表,其节点引用底层列表的元素,允许跳过下面列表中的元素

    插入复杂度:O(logn)

    C++ 实现:https://codereview.stackexchange.com/questions/116345/skip-list-implementation

  3. SQRT decomposition technique 基于链表的数据结构(不知道有没有名字)。

    enter image description here

    底层:带有索引数组的双向链表。索引数组有 O(sqrt(n)) 个元素引用列表的元素,允许一次跳过 O(sqrt(n)) 个元素。 插入复杂度:O(sqrt(n))

关于c++ - 如何高效地将元素插入到数组的任意位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540230/

相关文章:

javascript - JS - 创建智能自动完成

c# - 如何构建一棵与或树?

r - R 中的堆栈等值线图

c++ - "virtual A* someMethod"与 "virtual class A* someMethod"

algorithm - N-ary树 - 它是否对称

python - 如何找到二叉树中节点的位置?

c++ - 寻找阶乘的有效方法

c++ - Substitution 不失败有什么用

c++ - 通过迭代旋转重新排序算法

c++ - 使用 R 和 .C 返回点积