搜索组合的2个排序数组

时间:2011-04-01 10:39:05

标签: algorithm search binary-search

算法可以在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))..

编辑:您可以假设不同的元素

由于

2 个答案:

答案 0 :(得分:1)

我认为在最坏的情况下,你必须检查组合数组的每个元素,这会给出O(n)最坏情况的复杂性。

这就是直觉:假设您已经检查过某些元素子集,并发现它们的位置单调递增,并且您要查找的元素不存在于子集中。您无法放弃部分搜索空间,因为该元素 - 无论其大小 - 仍然可以有效地位于任何未经检查的位置。在最坏的情况下,在检查整个阵列之前,这种情况可以保持为真。

答案 1 :(得分:1)

不,你不能。

证明:

获取任何已排序的数组。将任何一个元素更改为任意的新值X.结果现在是排序数组或组合2排序数组。你必须搜索X.因为X被插入一个随机位置,而没有引用数组其余部分的内容,所以找到X的唯一方法就是蛮力。