使用O(n)初始化和O(1)查找编写数据结构

时间:2014-12-31 22:10:57

标签: data-structures heap time-complexity

给定数组a1, a2, a3, ... , aN

我想创建一个支持以下要求的数据结构:

  • O(n)
  • 中的初始化数据结构
  • 获取O(1)
  • 中的4n / 5值
  • 获取O(1)
  • 中的n / 5值

我尝试使用3个最大堆构建数据结构,但我无法在O(n)中初始化堆。

我怎么能搞清楚?

1 个答案:

答案 0 :(得分:2)

所谓的"median of medians" algorithm 可以在O(n)时间内找到无序集合中的第k个最小元素。 您希望将此应用于k = n / 5和k = 4n / 5.

算法的结果是一个部分有序的数组,其中所需的kth 元素位于k。将第n / 5个元素放在其位置后 我认为有可能将4n / 5元素放在其位置而不必 重新做整个算法,但无论如何它仍然是O(n)。

假设您在数组中有O(1)随机访问查找,那么您的O(1)查找 要求将得到满足。