ものがたり(旧)

atsushieno.hatenablog.com に続く

IndexOf(string,char)の最適化(解決)

mono --profileで調べていて気になっていたのだけど、コストがかかっているのは1文字検索も同じだった。ちなみにMS.NETも同じような傾向でコストがかかっている。そんなわけで、bitap (shift-or)とsuffix arrayからヒントを得て、既にマッチしないと判断された文字については、sortkeyを何度も比較せずにサクッと次に行くようにしたら(といってもASCIIだけの話だけど)、当社比4倍も早くなった。びっくし。corner caseだからということもあるだろうけど、monologueに載せたサンプルでは、MS.NETのだいたい1.5倍くらいの速度で動く。メモリコストは16バイト。なかなかお買い得だ。

とりあえずmonologueに載せたサンプルでは全面的におっと、Compare()を忘れてた。「概して」.NETに勝る速度が出るようになったっぽい。しかしIBM ICUがめっちゃ速いのは何でだ…