2017-09-27 63 views
0

我想问一个关于算法的问题。执行范围搜索算法

假设有若干段(段编号不受固定的,也许因此longd)

例如:。

segment     data range (data range not fixed) 

**A        0~10** 

**B        11~45** 

**C        46~49** 

**D        50~100** 

**E        101~105** 

**F        106~128** 

如果输入→99

我将从我的程序中获得输出'D'。

我会把这个例子实现在java中。

那么,你有什么方法或算法可以使程序执行时间更快吗?

+1

至少试着写一些代码然后寻求帮助。 – Punit

+0

你在java中的示例实现在哪里? – user7294900

+0

如果范围总是连续的,就像在你的例子中一样,只需使用二分查找。 –

回答

0

假设你的数据范围都排序,不重叠,那么你可以尝试使用二进制搜索风格的方法。

你可以把每个范围的起始值到一个数组:

[0, 11, 46, 50, 101, 106] 

正确起始值,如果它存在,将具有以下两个属性:

  • 它小于90
  • 右边的相邻值大于90或不存在(例如,如果起始值是阵列中的最后一个范围)

寻找90在这种情况下是微不足道的,因为我们会立即打它。比方说,我们希望能找到20.我们将采取以下步骤:

[0, 11, 46, 50, 101, 106] 
Choose 50; fails because 50 > 20; go left 
[0, 11, 46] 
Choose 11; succeeds because 20 > 11 and 20 < 46 

因此,这将产生一系列11-45,我们还需要一个检查,以确保20在此范围内。在这种情况下,它不是必须的。上述的二进制搜索方法只能找到最合适的范围,不一定包含实际的数字。