寻找合适的数据结构

时间:2010-02-06 16:08:02

标签: data-structures

我有N键。

我需要找到一个数据结构,我可以通过以下操作来完成:

  1. 在O(N)中构建

  2. 在O(1)

  3. 中找到min
  4. 删除O(logn)中的中位数

  5. 找到n / 2 + 7的最大数字

  6. 我想过使用最小堆(构建是O(n),最小是O(1) - root)。

    然而,我很难找到办法做3和4。

    我认为中位数假定是在叶子上,但就我达到的那样。

3 个答案:

答案 0 :(得分:1)

当你说在O(n)中构建时,你的意思是加法必须是O(n),或者你必须在O(n)中构建一个元素集合,这样加法必须是O(1) )?

你可以使用额外的引用来扩充任何数据结构,以便在恒定时间内检索最小元素。

对于#3,听起来你需要能够在O(lg n)中找到中位数并在O(1)中删除,反之亦然。

对于#4,您没有指定时间复杂度。

到其他海报 - 这被标记为家庭作业。请提供提示而不是发布答案。

答案 1 :(得分:1)

数据结构1中的一个热门问题:考试/ hws /教程。 我会尝试给你一些提示,如果它们不够,请评论,我会给你更多提示。

  1. 请记住,您不必只使用一种数据结构,可以使用多种数据结构。
  2. 回想一下中位数的定义:n / 2的数字较大,n / 2的数字较小
  3. 您知道哪些数据结构是在O(n)中构建的,对它们的复杂操作是O(logn)还是更少? - 重读这些数据结构的教程幻灯片。
  4. 你可能更容易从1 + 2单独解决1 + 3,然后考虑合并它们。

答案 2 :(得分:0)

简单排序数组可以解决#2#3和#4的问题。但它的构造需要O(n n )。但是,对空间复杂性没有任何限制。我正在努力在数据结构的构建过程中使用Hashing概念,这会将顺序降低到O(n)。

希望这会有所帮助。如果我找到更好的解决方案,我会回来的