具有区间的二进制搜索算法

时间:2016-11-28 14:26:07

标签: python algorithm search binary

我正在尝试更改我的代码,所以不是找到数组的特定值,而是输出间隔的值,如果找到,例如60-70。任何帮助表示赞赏。

using Plots, TestImages
img = testimage("cameraman")
p = plot(
    axis = nothing,
    layout = @layout([a [b [c [d;_]; _]; _]]),
    size = (800,400)
)

for i=1:4
    plot!(p[i], img, ratio=1)
end
p

到目前为止我有这个并希望它找到一个指定的间隔,所以如果我指定60-70,它将找到它们之间的内容。

1 个答案:

答案 0 :(得分:0)

实际上这很简单:
在区间(lower, upper)中搜索元素时,对数组arr执行二进制搜索,以获取最小元素arr[n]的索引,使arr[n] >= lower和索引成为arr[m]。最大元素arr[m] <= upper,例如n

现在有几种可能性:

  • n&lt; m:阵列中存在多个解决方案。所有这些都在子索引中从索引m开始直到索引arr[n]包含
  • n = m:恰好存在一个解决方案:def lowestGreaterThan(arr, threshold): low = 0 high = len(arr) while low < high: mid = math.floor((low + high) / 2) print("low = ", low, " mid = ", mid, " high = ", high) if arr[mid] == threshold: return mid elif arr[mid] < threshold and mid != low: low = mid elif arr[mid] > threshold and mid != high: high = mid else: # terminate with index pointing to the first element greater than low high = low = low + 1 return low
  • n&gt; m:没有解决方案

可以使用二进制搜索来搜索超过特定阈值的值,如下所示:

ind

对不起代码的外观,我的python远非完美。无论如何,这应该表明这种方法背后的基本思想。该算法基本上搜索具有属性arr[ind] >= threshold的数组中第一个元素的索引<table> <thead> <tr> <th>Field 1 Name</th> <th>Field 2 Name</th> </tr> </thead> <tbody> {% for item in identity_France %} <tr> <td>{{ item.field1 }}</td> <td>{{ item.field2 }}</td> <tr> {% endfor %} <tbody> </table>