=begin
= Ruby/Bsearch: 配列を 2分探索する Ruby用のライブラリ
Ruby/Bsearch は配列を 2分探索する Ruby用のライブラリです。ブ
ロックで与えた条件にマッチする、最初の要素および最後の要素を
見つけます。
最新版は
(())
から入手可能です
== 使用例
% irb -r ./bsearch.rb
>> %w(a b c c c d e f).bsearch_first {|x| x <=> "c"}
=> 2
>> %w(a b c c c d e f).bsearch_last {|x| x <=> "c"}
=> 5
>> %w(a b c e f).bsearch_first {|x| x <=> "c"}
=> 2
>> %w(a b e f).bsearch_first {|x| x <=> "c"}
=> nil
>> %w(a b e f).bsearch_last {|x| x <=> "c"}
=> nil
>> %w(a b e f).bsearch_lower_boundary {|x| x <=> "c"}
=> 2
>> %w(a b e f).bsearch_upper_boundary {|x| x <=> "c"}
=> 2
>> %w(a b c c c d e f).bsearch_range {|x| x <=> "c"}
=> 2...5
>> %w(a b c d e f).bsearch_range {|x| x <=> "c"}
=> 2...3
>> %w(a b d e f).bsearch_range {|x| x <=> "c"}
=> 2...2
== 説明図
<<< figure
== API
--- Array#bsearch_first (ange = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする最初の要素の添字を返す。見つ
からなかったら nil を返す。省略可能な引数 range は検索範囲を
指定する
昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。
降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。
当然のことながら、配列は2分探索の前にソートしておく必要があります。
--- Array#bsearch_last (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする最後の要素の添字を返す。
見つからなかったら nil を返す。省略可能な引数 range は検
索範囲を指定する
昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。
降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。
当然のことながら、配列は2分探索の前にソートしておく必要があります。
--- Array#bsearch_lower_boundary (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする下限の境界を返す。
省略可能な引数 range は検索範囲を指定する
昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。
降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。
当然のことながら、配列は2分探索の前にソートしておく必要があります。
--- Array#bsearch_upper_boundary (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする上限の境界を返す。
省略可能な引数 range は検索範囲を指定する
昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。
降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。
当然のことながら、配列は2分探索の前にソートしておく必要があります。
--- Array#bsearch_range (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする下限と上限の境界を
Range オブジェクトとして返す。
省略可能な引数 range は検索範囲を指定する
昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。
降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。
当然のことながら、配列は2分探索の前にソートしておく必要があります。
--- Array#bsearch (range = 0 ... self.length) {|x| ...}
Array#bsearch_first の別名
== ダウンロード
Ruby のライセンスに従ったフリーソフトウェアとして公開します。
完全に無保証です。
* (())
* (())
satoru@namazu.org
=end