包含范围的数组中的二进制搜索

时间:2017-07-15 12:10:05

标签: algorithm

让我们说我们有一个有序数组包含这样的元素,

[1,2-5,6,8-9,11-13],2-5是代表2,3,4和5的范围,如果我们想要找到" 4"然后索引1(从0开始)是我们需要的答案。

我们可以使用constans space和log(n)time来应用二元搜索,例如这种类型的元素吗?

1 个答案:

答案 0 :(得分:1)

您可以使用二进制搜索,这个概念也适用于像魅力这样的范围。实际上,这是一个常用于减少时间和空间复杂性的概念,例如gap encoding。 但是你需要自己编写它而不是使用任何库,因为库方法可能不接受范围。

让我们简单地在您[1, 2-5, 6, 8-9, 11-13]的给定输入上执行二元搜索,搜索 4 的值 1 。< / p>

数组[1, 2-5, 6, 8-9, 11-13]的长度 5 ,我们决定中间的索引 2 。它在那里读取值6。我们搜索值4,因此我们继续向左搜索。

我们现在将搜索间隔缩短为[1, 2-5, 6],长度 3 ,我们决定中间索引 1 。它读为2-5。由于4位于该范围内,我们已完成并返回索引 1 作为结果。

例如,如果它会显示5-7,那么我们会继续向左搜索,因为 4 不在5-7内。类似地,如果它会读1-3,我们会继续向右搜索。

以下是使用一些伪代码进行二进制搜索的说明:Binary search algorithm at Wikipedia

如果您在实施过程中遇到问题而不仅仅是编辑问题并告诉我们您目前所做的工作,我们将会进行调整和帮助。