算法可以在O(log(n))中搜索组合2排序数组吗?
合并2个排序数组:
是2个排序数组的组合。
例:
{1,2,3,4,5} + {2,3,4,5,6,7,} = {1,2,3,4,5,2,3,4,5,6,7}
不幸的是,你不知道它们的边界
*请注意我知道一个以摊销时间给出O(log(n))的解决方案,但我只在一次搜索中需要O(log(n))..
编辑:您可以假设不同的元素
由于
答案 0 :(得分:1)
我认为在最坏的情况下,你必须检查组合数组的每个元素,这会给出O(n)
最坏情况的复杂性。
这就是直觉:假设您已经检查过某些元素子集,并发现它们的位置单调递增,并且您要查找的元素不存在于子集中。您无法放弃部分搜索空间,因为该元素 - 无论其大小 - 仍然可以有效地位于任何未经检查的位置。在最坏的情况下,在检查整个阵列之前,这种情况可以保持为真。
答案 1 :(得分:1)
不,你不能。
证明:
获取任何已排序的数组。将任何一个元素更改为任意的新值X.结果现在是排序数组或组合2排序数组。你必须搜索X.因为X被插入一个随机位置,而没有引用数组其余部分的内容,所以找到X的唯一方法就是蛮力。