libdivsufsortのRubyバインディング

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/divsufsort/ruby/divsufsort.c?root=svn&view=markup
http://divsufsort.rubyforge.org/
とりあえずbwt/unbwtだけ実装。

require 'divsufsort'
include Divsufsort

bwt = divbwt(<<-EOS)
London bridge is falling down,
Falling down, falling down,
London bridge is falling down,
My fair Lady.
EOS

unbwt = inverse_bw_transform(bwt)

puts <<-EOS
#{bwt}
-----
#{unbwt}
EOS

追記

divsufsortも実装したけど、使い方はあってるかな…

require 'divsufsort'
include Divsufsort

src = 'abracadabra$'
sa = divsufsort(src) #=> [11, 10, 7, 0, 3, 5, 8, 1, 4, 6, 9, 2]
sa.map {|i| src[i - 1].chr }.join #=> "ard$rcaaaabb"