繁体   English   中英

在Ruby中是否有内置的二进制搜索?

[英]Is there a built-in binary-search In Ruby?

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

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

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

Ruby 2.0引入了Array#bsearchRange#bsearch

对于Ruby 1.9,您应该查看bsearchbinary_search gem。 其他可能性是使用与数组不同的集合,例如使用rbtree

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

要使用它今天,您可以require 'backports/2.0.0/array/bsearch'require 'backports/2.0.0/range/bsearch'

祝好运!

自2011年以来,在Ruby 2.3中已经发生了很多变化,您可以使用bsearch_index

https://ruby-doc.org/core-2.3.0/Array.html#method-i-bsearch_index

array.bsearch_index { |val| query <=> val }

我用bsearch 这是它的工作原理:

array = ['one', 'two', 'three', 'four', 'five']

search = array.sort.bsearch { |value| 'four' <=> value }

注意:二进制搜索需要一个排序数组; 这增加了一些开销,但与搜索速度相比,这很好。

search将返回array的值four ,否则返回nil如果找不到值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM