我正在寻找一个内置的Ruby方法,它具有与index相同的功能,但使用二进制搜索算法,因此需要预先排序的array.

我知道我可以编写自己的实现,但根据"Ruby#index Method VS Binary Search",index使用的内置简单迭代搜索比纯Ruby版本的二进制搜索更快,因为内置方法是用C编写的.

Ruby是否提供了进行二进制搜索的内置方法?

推荐答案

Ruby 2.0引入了Array#bsearchRange#bsearch.

对于Ruby 1.9,您应该查看bsearchbinary_search个gem.

bsearch在我的backports gem中,但这是一个纯Ruby版本,所以速度要慢一点.请注意,对于足够大的数组/范围(或昂贵的比较),纯Ruby二进制搜索仍然比线性内置搜索(如indexinclude?)更快,因为它的复杂度顺序不同于O(log n)O(n).

今天你可以玩require 'backports/2.0.0/array/bsearch'require 'backports/2.0.0/range/bsearch'.

祝你好运

Ruby相关问答推荐

ruby 中嵌套哈希中相同键的平均值

清理 jruby 中输入数据的编码错误

PDFNet:Ubuntu 16.04 和 Ubuntu 20.04 上 PDF 输出文本的词序不同

从整数中 Select 重复数字的字符串

是否可以在 Ruby 中使用正则表达式匹配字符串\b(退格字符)?

Ruby 中无法解释的撬动行为

Rubymine - 启用行号

查明 IP 是否在 IP 范围内

在 Ubuntu 上安装 Ruby 1.9.1?

如何将消息附加到 RSpec 判断?

Ruby 中的 -> (stab) 运算符是什么?

迭代一个数组,一次 n 项

如何在 Ruby 中使用gets和gets.chomp

在 Ruby 中取消定义变量

确定一个值是否存在于哈希数组中

Ruby 中的标准文件命名约定

Sublime Text 2 控制台输入

错误数量的参数(1 代表 0)在 Ruby 中是什么意思?

如何在 Ruby 中编写复杂的多行 if 条件?

如何在 Capistrano v3 的服务器上运行 shell 命令?