Подтвердить что ты не робот

Есть встроенный двоичный поиск в Ruby?

Я ищу встроенный Ruby-метод, который имеет ту же функциональность, что и index, но использует алгоритм двоичного поиска и, следовательно, требует предварительно отсортированного массива.

Я знаю, что могу написать свою собственную реализацию, но в соответствии с "Ruby # index Method VS Binary Search", встроенный простой итеративный поиск, используемый индексом, быстрее, чем версия бинарного поиска с чистой рубиной, поскольку встроенный метод написан на C.

Предоставляет ли Ruby какие-либо встроенные методы, которые выполняют двоичный поиск?

4b9b3361

Ответ 1

Ruby 2.0 представил Array#bsearch и Range#bsearch.

Для Ruby 1.9 вы должны изучить драгоценные камни bsearch и binary_search. Другая возможность - использовать другую коллекцию, чем массив, например с помощью rbtree

bsearch находится в моем backports gem, но это чистая версия Ruby, поэтому довольно немного медленнее. Обратите внимание: чистый бинарный поиск Ruby будет по-прежнему быстрее, чем линейный встроенный поиск, например index или include? для достаточно больших массивов/диапазонов (или дорогостоящих сравнений), поскольку это не тот же порядок сложности O(log n) vs O(n).

Чтобы играть с ним сегодня, вы можете require 'backports/2.0.0/array/bsearch' или require 'backports/2.0.0/range/bsearch'.

Удачи!