【问题标题】:Data structure with fast look up by index and element removal通过索引和元素删除快速查找的数据结构
【发布时间】:2021-07-14 03:39:02
【问题描述】:

总结: 我有一段代码想要初始化一个数组,然后迭代地查找一个索引,获取值,然后删除该索引处的元素,将上面的所有值向下移动一个索引。使用普通数组执行此操作是 θ(n^2)。如果有比我想出的更好的方法,我想这样做。

抽象数据类型需要支持: 使用一开始就知道的所有数据进行初始化。 查找索引的值。 删除索引,通过将所有元素向左移动来填补空白。

我想出的数据结构: 一棵完整的二叉树,在叶子和内部节点处具有“索引”,用于存储已填充的叶子数量。 初始化很简单而且是 nlogn 索引是通过从根检查其孩子的计数并递归到正确的孩子登录来完成的。 一旦你在一个叶子删除是通过清空数据然后返回树将所有计数减 1 logn 来完成的。

使用 nlogn 初始化和 n 个已登录的索引/删除,整个运行时间为 nlogn。

【问题讨论】:

  • 感觉很像skip list。初始化为O(n)。否则推理看起来是正确的。注意索引处的插入也是O(log n)
  • 您在这里提出的建议与 Fenwick 树和顺序统计树密切相关。似乎是一个很棒的方法!

标签: algorithm data-structures abstract-data-type array-splice


【解决方案1】:

我在想也许我们可以使用带有双链表的哈希图

在初始化时,以给定的数组值作为键填充哈希图,并使用指向链表节点的指针(迭代器)作为哈希图的值,也填充双链表

尝试移除时,使用hashmap根据值找到指针,并移除链表中的节点

这样,初始化是O(n),操作是O(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 2016-01-14
    • 2021-08-04
    • 2023-01-19
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多