2012-01-11 104 views
4

如何使用二分搜索来查找排序数组中是否有大于N的邻居数之间的距离?例如:BinarySearch坐标之间的距离

Input: 2 5 8 11 16 
Distance: 4 

所以我们应该得到答案,即邻居之间有这样的距离。 (11与16)

编辑:让我更清楚,为什么我要与二进制搜索做到这一点。
假设INPUT数组未经排序。例如:

Input: 11 8 2 16 5 

然后你应该对数组进行排序,看看哪些是邻居。所以在我们有了一个排序列表之后,这不是找到二进制搜索的一些变异的距离的最佳方法吗?

回答

0

不能使用在最坏的情况下,当所有的数字都在N等间隔的二进制搜索。

二进制搜索和其他分而治之算法的想法是,你消除大约一半的剩余里程的每一步。当所有项目的间距为N时,三个或更多个连续项目的每个范围都可能包含一对距离为> N的邻居,因此您无法消除所考虑的两个子范围中的任何一个。你最终会检查每一对连续的物品,花费你O(NumItems)

这就是说,你也许可以优化一般情况下做的相当好,因为潜在的修剪机会比O(NumItems)

+0

很好的解释。 – 2012-01-12 00:02:59

0

你(好,我)不会:二进制搜索需要一个排序列表,你会花更多的时间对该列表进行排序(对周边的项目,通过他们的距离排序的),比你只需扫描清单。

+0

你为什么要这样做?有没有其他方法基于修改的二进制搜索? – templatetypedef 2012-01-11 21:44:43

+0

二进制搜索需要一个排序列表,你没有。而且,再次,对列表进行排序需要更多的工作,而不仅仅是扫描它。 – 2012-01-11 21:59:25

+0

但是你认为这是二进制搜索可以在这里使用的唯一方法。我相当确信你是对的,并且你不能在这里使用二分搜索,但是我没有看到为什么不能使用削减数组的二进制搜索类算法的任何原因。 – templatetypedef 2012-01-11 22:00:48