我正在寻找一个内置的Ruby方法,它具有与index
相同的功能,但使用二进制搜索算法,因此需要预先排序的array.
我知道我可以编写自己的实现,但根据"Ruby#index Method VS Binary Search",index使用的内置简单迭代搜索比纯Ruby版本的二进制搜索更快,因为内置方法是用C编写的.
Ruby是否提供了进行二进制搜索的内置方法?
我正在寻找一个内置的Ruby方法,它具有与index
相同的功能,但使用二进制搜索算法,因此需要预先排序的array.
我知道我可以编写自己的实现,但根据"Ruby#index Method VS Binary Search",index使用的内置简单迭代搜索比纯Ruby版本的二进制搜索更快,因为内置方法是用C编写的.
Ruby是否提供了进行二进制搜索的内置方法?
Ruby 2.0引入了Array#bsearch
和Range#bsearch
.
对于Ruby 1.9,您应该查看bsearch
和binary_search
个gem.
bsearch
在我的backports
gem中,但这是一个纯Ruby版本,所以速度要慢一点.请注意,对于足够大的数组/范围(或昂贵的比较),纯Ruby二进制搜索仍然比线性内置搜索(如index
或include?
)更快,因为它的复杂度顺序不同于O(log n)
和O(n)
.
今天你可以玩require 'backports/2.0.0/array/bsearch'
或require 'backports/2.0.0/range/bsearch'
.
祝你好运