[英]Can you help me figure out this algorithm?
我正在做家庭作业,作为“提示”,我们被告知要找到以下算法,然后将其证明为必要的答案。
设 L(1), L(2), .., L(k) 是每个有 n 个元素的排序列表。 给出一个 O(kn logk) 空间算法,支持 O(log n + t) Locate 操作,返回 t 项的位置。
理想情况下,我将能够使用此算法让我深入了解实现更好的解决方案(这是作业想要的),但这种效率较低的算法应该能激发我的灵感,但我想不通。 任何想法或知道这个算法是什么? 谢谢!
你在谷歌上搜索过 O(kn logk) 吗? 这似乎是一个非常独特的大 O 签名。
这是我的第一个结果: MergeSort --> k-way 合并中的合并与项目数之间的关系是什么
我似乎找不到一个给 O(log n + t) 时间的人,但我有一个想法,可能会也可能不会帮助......
O(kn log k) 是将每个可能的项目映射到包含它的列表的编号的表的大小。 但是,使用它来查找要查找的列表仍然会导致 t 个元素的 at*O(log n) 查找时间,因此这并不是真正需要的......
可能不是排序功能,因为您已经有 2 个排序列表。 对我来说听起来也像二分搜索。
我认为它要求你首先找到一个低效的算法,然后用它来制作一个高效的算法。 这听起来像是对列表的线性搜索,每个列表都有一个二分搜索来查看它们。 它将需要 O(2t) 空间,因为您需要复制 t 项的“坐标”。
即使使用那个丑陋的大 O 符号,我认为这是一个二分搜索问题,因为你有排序列表。
空间复杂度保持不变,因为它是一个分而治之的算法,所以你不会有问题。
可以肯定的是,logn 之外的 t 是 O((logn)+t) 之类的东西吗?
呃...听起来像...二分查找? 维基
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.