设计高度优化的数据结构,以执行insert,delete和getRandom三个操作

时间:2012-06-27 09:01:46

标签: optimization data-structures

我刚接受过软件访谈。其中一个问题是使用三种方法insert,delete和getRandom以高度优化的方式设计任何数据结构。面试官让我想到数据结构的组合来设计一个新的数据结构。插入可以设计无论如何但是随机和删除我需要获得特定元素的位置。他给了我一个思考数据结构的提示,这种数据结构花费的时间最少。

欢迎任何答案或讨论......

5 个答案:

答案 0 :(得分:3)

t成为要存储在数据结构中的元素的类型。 有一个可扩展的数组elements包含所有元素,没有特定的顺序。有一个哈希表indices,可以将t类型的元素映射到elements中的位置。

  • 插入e表示
    • e末尾添加elements(即push_back),获取其位置i
    • 将映射(e,i)插入`indices
  • 删除e表示
    • i中找到e的{​​{1}}位置,感谢elements
    • 使用indices
    • 的最后一个元素e覆盖f
    • 更新elements:删除映射indices并插入(f,indices.size())
  • 随机绘制一个元素(将其留在数据结构中,即它是(f,i),而不是peek)只是在pop中绘制一个整数i并返回{{ 1}}。

假设散列表非常适合[0,elements.size()[类型的元素,则所有三个操作都是O(1)。

请注意数据结构中有0或1个元素的情况。

答案 1 :(得分:2)

树可能在这里运作良好。订单log(n)插入和删除,并选择random也可以是log(n):从根节点开始,在每个交叉点随机选择一个子节点(由每个子节点的叶节点总数加权),直到达到叶。

答案 2 :(得分:0)

排序时间最少的数据结构是排序数组。

get_random()是二进制搜索,所以O(log n)。

insert()和delete()涉及添加/删除有问题的元素然后求助,即O(n log n),例如可怕。

我认为他的暗示很差。你可能面试不好。

答案 3 :(得分:0)

我觉得你可以使用一些像红黑树一样的树木。这将给出O(log n)插入和删除时间。 要获取随机元素,可以使用额外的哈希表来跟踪树结构中的元素。

答案 4 :(得分:0)