繁体   English   中英

你能帮我弄清楚这个算法吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM