为什么二元搜索while循环条件(l + 1!= u)?

时间:2017-04-01 11:36:16

标签: algorithm

a = (1..10).to_a
def search(x, t)
  l = -1
  u = x.length

  while l+1 != u
    m = (l + u) / 2.round
    if x[m] < t
      l = m
    else
      u = m
    end
    puts "l:\t#{l} u:\t #{u} m:\t#{m}"
  end

  p = u
  puts "p: #{p} -> #{x[p]}"
  if p >= x.length || x[p] != t
    p = -1
  end
end

search(a, 5)

我长时间研究,但找不到原因,

  1. l = -1

      

    为什么将l分配给-1

  2. while循环条件为什么l+1 != ul < u

  3. 我试图理解这种方法,最后不能吃它

    可以帮到我吗?

1 个答案:

答案 0 :(得分:2)

l u 是二进制搜索的下限和下限。

在这里,您将 l 分配给-1,将 u 分配给x.length。您可以轻松地将 l 的分配从-1更改为0,并将条件 l + 1!= u 更改为 l&lt; û