人のコードをもらう

高速なSuffixArrayの構築の論文に書いてあるC++のソースをJAVAに起こした後輩がいたのでカツアg・・・基、流用させてもらうことに

にしてもJAVAの講義のときにも思ったけど、慣れている人のパッケージの階層はやたら深い。
どうにも私は面倒くさがりなので1階層くらいにしちゃう。
やはりこれがAnt使える人と使えない人の差なのだろうか(どうなの??w
とりあえず私はabstract classなんて作った事がないw

流用とは言ってみたものの、そのまま適当にやってみたら私のデータ構造の番犬が邪魔をしてひどい目にあってしまった。
そんなわけでちょいちょいと手直ししてたんだけど、人のソースを見てると私のclassの使い方の無駄が見えてしょうがないw

少し難しい話

SuffixArrayなんてものは最終的にintなんだから、SuffixArrayなんてクラスを作ってなかの要素をget(index)とかで呼び出すよりは、作らせるだけ作らせてbodyをリターンして呼び出し側で管理すればintで処理できてテラウレシス

もちろん、前者の実装だと、ソースにはSuffixArray saってインスタンスがあるからsaがSuffixArrayだってすぐわかると思ったからやったんだけど、その辺は命名規則とかjavadocで何とかするほうがあとからの流用に便利なんだろうなぁなんて思ったりしてみた

閑話休題

そんなわけで速度がかなりアップ
寝る前に300MBのコーパスを5個くらい処理させておいて朝起きたら一番大きなコーパスの処理が違うところでエラー起こして死んでた(´д`)
今まで出たことがない・・・って言うかただのforループで

for(int cnt=0;cnt<sa.size();cnt++)
...sa.get(cnt);

のcntがOutOfBounds! コレは驚愕

そんなややこしい処理はしてないはずだし今まで大丈夫だっただけに、スケーラビリティがないとか潜在的なバグとか不安が・・・こえー

でもとりあえず動いてそうなやつでちょいちょいやっていきますかね(気楽