Algorithm 为什么在循环条件(l+;1!=u)时进行二进制搜索? a=(1..10)。到 def搜索(x,t) l=-1 u=x.5米长 而l+1!=U m=(l+u)/2.5轮 如果x[m]{x[p]}” 如果p>=x.length | | x[p]!=T p=-1 结束 结束 搜索(a,5)

Algorithm 为什么在循环条件(l+;1!=u)时进行二进制搜索? a=(1..10)。到 def搜索(x,t) l=-1 u=x.5米长 而l+1!=U m=(l+u)/2.5轮 如果x[m]{x[p]}” 如果p>=x.length | | x[p]!=T p=-1 结束 结束 搜索(a,5),algorithm,Algorithm,我做了很长时间的研究,但找不到原因 l=-1 为什么要将l赋给-1 而循环条件为什么是l+1!=u大于l

我做了很长时间的研究,但找不到原因

  • l=-1

    为什么要将l赋给-1

  • 而循环条件为什么是
    l+1!=u
    大于
    l

  • 我试着理解这个方法,最后还是吃不下了


    你能帮我吗 lu是二进制搜索的上下限


    这里您将l分配给-1,u分配给x.length。您可以轻松地将l的赋值从-1更改为0,并更改条件l+1!=ullu是二进制搜索的上下限


    这里您将l分配给-1,u分配给x.length。您可以轻松地将l的赋值从-1更改为0,并更改条件l+1!=是的,是的,条件很可能是
    l
    ,但我在找一本书,里面有
    l+1!=这是不变性`lx[l]l
    ,但我正在找一本书,里面有
    l+1!=这是不变性`lx[l]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)