我正在做家庭作业,作为“提示”我们被告知找到以下算法,然后证明它是必要的答案。
设L(1),L(2),...,L(k)为每个n个元素的排序列表。给出一个O(kn logk)空间算法,该算法支持O(log n + t)Locate操作,该操作返回t项的位置。
理想情况下,我将能够使用这个算法给我一些洞察力来实现更好的解决方案(这就是作业所需要的),但这种效率较低的算法应该能激发我的灵感,但我无法理解它出。有什么想法或知道这个算法是什么?谢谢!
答案 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)