【问题标题】:Can you help me figure out this algorithm?你能帮我弄清楚这个算法吗?
【发布时间】:2012-10-12 04:13:46
【问题描述】:

我正在做一项家庭作业,作为“提示”,我们被告知要找到以下算法,然后将其证明为必要的答案。

令 L(1), L(2), .., L(k) 是 n 个元素的排序列表。给出一个 O(kn logk) 空间算法,支持 O(log n + t) Locate 操作,返回 t 个项目的位置。

理想情况下,我将能够使用此算法让我深入了解如何获得更好的解决方案(这是作业想要的),但这种效率较低的算法应该会激发我的灵感,但我想不通出去。有什么想法或知道这个算法是什么吗?谢谢!

【问题讨论】:

  • 家庭作业是给你的,所以你可以从中学习。如果你在这里提问,你不会从中学习,你只会学习如何提问。相信我,尝试找出自己并给出错误的答案可能比在这里提问并给出正确的答案(别人给你的)要好,因为你什么都学不到。

标签: algorithm list


【解决方案1】:

你搜索过 O(kn logk) 吗?这似乎是一个非常独特的大 O 签名。

这是我的第一个结果: 合并排序 --> What is the relation between merges and number of items in a in k-way merge

【讨论】:

  • 我看到的一个直接问题:MergeSort 是一种 O(k n log n) time 算法。问题是空间复杂性,而不是时间。
【解决方案2】:

我似乎找不到一个可以提供 O(log n + t) 时间的方法,但我有一个想法可能会或可能不会有帮助...

O(kn log k) 是将每个可能的项目映射到包含它的列表的编号的表的大小。但是,使用它来查找要查看的列表仍然会导致 t*O(log n)-查找 t 个元素的时间,所以这并不是真正需要的......

【讨论】:

    【解决方案3】:

    可能不是排序功能,因为您已经有 2 个排序列表。对我来说听起来也像二分搜索。

    【讨论】:

      【解决方案4】:

      我认为它要求你首先找到一个低效的算法,然后用它来制作一个高效的算法。这听起来像是对列表的线性搜索,每个列表都有一个二进制搜索来查看它们。它将需要 O(2t) 空间,因为您需要复制 t 个项目的“坐标”。

      【讨论】:

        【解决方案5】:

        即使使用那个丑陋的大 O 表示法,我认为这是一个二进制搜索问题,因为您有排序列表。

        空间复杂度保持不变,因为它是一种分而治之的算法,所以你不会有问题。

        非常确定 t 在 logn 之外,类似于 O((logn)+t)?

        【讨论】:

        • 而n代表项或元素的个数?
        【解决方案6】:

        嗯...听起来像...二进制搜索? Wiki

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-24
          • 2021-02-12
          • 2011-03-25
          • 2011-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多