如何设计一个获取中位数并在 O(1) 中插入的数据结构?

how to design a data structure that getMedian and insert in O(1)?

我考虑过在排序数组中执行此操作并保存中位数的索引及其耗时 O(1)。但我想不出有什么方法可以在 O(1) 中进行插入并保持数组排序。 如果有人能帮我解决这个问题,我真的很感激

你要求的是不可能的,因为它允许在 O(n) 时间内进行基于比较的排序:

  • 假设您有一个长度为 n 的未排序数组。
  • 在O(n) 时间内找到最小元素和最大元素。
  • 将所有 n 个元素插入到数据结构中,每次插入都需要 O(1) 时间,所以这需要 O(n) 时间。
  • 插入 n-1 个额外的最小元素副本。这也需要 O(n) 时间。
  • 初始化长度为 n 的输出数组。
  • 重复 n 次:
    • 读出数据结构中当前元素的中位数,并将其写入输出数组的下一个位置。这需要 O(1) 时间。
    • 将最大元素的两个副本插入数据结构。这需要 O(1) 时间。

上述算法应该在 O(n) 时间内运行,结果是输入数组中元素的排序数组。但这是不可能的,因为比较排序需要 Ω(n log n) 的时间。因此,假定的数据结构不存在。