利用二进制搜索算法

时间:2014-11-06 21:03:16

标签: c algorithm

我对思考过程比对代码本身更感兴趣。我应该在排序数组中找到 v [i] 组件的数量,以便 x< v [i]< y ,其中 x y 作为键盘输入发送。 我应该使用修改后的二进制搜索来有效地解决这个问题,而不是通过向量进行常规搜索。

我的问题是,在这种情况下,我无法想象如何实现二进制搜索,这种方法似乎不适合我。

有什么想法?

3 个答案:

答案 0 :(得分:6)

您可以在数组中对xy进行二进制搜索。然后,您可以从x的索引中减去y的索引,以获取它们之间的项目数。

你实际上必须从该结果中减去1,因为你使用的是严格小于。

例如,假设你有一个数组:

[3, 6, 8, 10, 14, 39, 41, 100]

设x = 8且y = 39。

x的索引是2,y的索引是5.

5-2 = 3

3-1 = 2

如果允许xy为数组中未包含的值,您仍然可以采用相同的方法。搜索x,如果找不到,请使用大于x的元素的索引。同样,对于小于y的元素的索引。

答案 1 :(得分:2)

假设原始数组v已排序,请按照以下步骤操作:

  1. 使用二进制搜索在数组中定位值x - 如果不存在(二进制搜索的下限和上限相遇),请获取最接近的较高值的索引
  2. 对y值执行相同操作,如果不是这个时间,则获取最接近的较低值的索引
  3. 找出中间有多少项(通过减去索引并加1)

答案 2 :(得分:0)

如果您有兴趣,请参阅以下文章:Binary Search

取决于xy的值,如果它们分别是数组中数字的下限和上限,那么它就像应用一般BS一样简单具有这些限制的算法而不是数组的一般第一个和最后一个元素。

在纸上绘图会有所帮助。