【问题标题】:Finding an appropriate data structure寻找合适的数据结构
【发布时间】:2011-01-13 21:31:54
【问题描述】:

我有 N 个键。

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

  1. 在 O(N) 中构建它

  2. 在 O(1) 中找到最小值

  3. 删除 O(logn) 中的中位数

  4. 找到第 n/2+7 个最大的数

我考虑过使用最小堆(构建是 O(n),最小是 O(1) - root)。

但是,我很难找到实现 3 和 4 的方法。

我认为中位数应该在叶子上,但这是我所达到的。

【问题讨论】:

标签: data-structures


【解决方案1】:

简单的排序数组可以解决 #2 #3 和 #4 的问题。但是构建它需要 O(nn)。但是,对空间复杂度没有限制。我正在考虑在构建数据结构期间使用哈希概念,这会将顺序降低到 O(n)。

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

【讨论】:

    【解决方案2】:

    数据结构 1 考试/硬件/教程中提出的一个热门问题。 我会尽量给你一些提示,如果还不够,请发表评论,我会给你更多提示。

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

    【讨论】:

    • 关于 3 - 就是这样。我想不出这样的数据结构。在 O(Logn) 中搜索通常涉及一棵树,但我现在所讨论的树可以在不小于 O(nlogn) 的时间内构建。我可以在 O(logn) 中进行二进制搜索,但同样,排序是 O(nlogn)。请提供更多提示
    • 请注意,您不需要搜索 any 值,只需搜索单个值 - n/2'th 元素。跨度>
    • 我正在链接到 Technion 的 Data Structures 1 教程幻灯片。这应该会给你另一个线索。 webcourse.cs.technion.ac.il/234218/Winter2009-2010/en/…
    • 嘿,安娜,我只是在检查你的技术资料。我在开放大学学习,几天后我有一场相当大的考试,所以我正在做一些较早的考试,以进行练习。我还没有找到解决方案,希望它会尽快解决。感谢您的帮助
    • 嗨,安娜,我浏览了那个链接,我猜文本是希伯来语的。如果你有英文版的,可以分享一下吗?谢谢。
    【解决方案3】:

    当你说在 O(n) 中构建时,你的意思是加法必须是 O(n),还是你必须在 O(n) 中构建元素集合,使得加法必须是 O(1 )?

    您可以通过额外的引用来扩充几乎任何数据结构,以在恒定时间内检索最小元素。

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

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

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

    【讨论】:

    • 我需要在 O(n) 中构建整个集合。是的,我确实需要找到并删除 O(logn) 中的中位数,但除了订单统计树(需要 nlogn 进行构建)之外,我想不出其他解决方案。帮助?
    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 2011-10-24
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多