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

标签 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

    why initial assign the l to -1

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

想明白那个方法,终于吃不下了

可以帮助我吗? 😃

最佳答案

lu 是二分查找的低位和高位。

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

关于algorithm - 为什么二进制搜索 while 循环条件(l+1!= u)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43156330/

相关文章:

生成随机数字字符串的算法,长度为 10,000 个字符?

sql - 模糊匹配两个哈希表?

algorithm - 如何按位置和日期范围高效搜索大型数据集?

r - 在 R 中计算重复排列的函数

algorithm - 计算图中的唯一对(不允许重复顶点)

algorithm - Golang程序中的随机函数和持久化

algorithm - 高效动态聚类

c - 从函数返回指针并用指针递归调用函数 - BST

java - 在 O(n) 时间内找到正确的路径

c++ - 带回溯顶点的 Dijkstra 算法问题