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

时间:2009-04-21 00:12:03

标签: algorithm list

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

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

理想情况下,我将能够使用这个算法给我一些洞察力来实现更好的解决方案(这就是作业所需要的),但这种效率较低的算法应该能激发我的灵感,但我无法理解它出。有什么想法或知道这个算法是什么?谢谢!

6 个答案:

答案 0 :(得分:2)

你是否用Google搜索了O(标识)?这似乎是一个非常独特的大O签名。

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

答案 1 :(得分:1)

我似乎无法找到一个给出O(log n + t)时间的人,但我有一个可能会或可能没有帮助的想法......

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

非常确定是否在log外面,就像O((logn)+ t)?

答案 5 :(得分:-1)

嗯......听起来像......二元搜索? Wiki