##事象
JavaScriptで数値配列を扱ってたところ、ソート済の数値の配列の中に目的の数値があるか探すところで速度がでない。
##原因
Array.prototype.indexOfが線形探索らしいので、遅いらしい。
最初に書いたコードが概ねこんな感じ
var numberList = [1,5,9, .... , 25321];
var exists = !(numberList.indexOf(number) < 0)
処理時間はO(n),配列が増えるほど比例的に処理時間が増加してしまう。
##対応
ソート済の配列が相手だったので、二分検索すればO(log2 N)まで落ちる。
ちょっと探せば実装はあったのでこれを仕込んで処理時間の問題を解決した。
https://gist.github.com/Wolfy87/5734530
##ライブラリを使おう
そのあとに、
underscore.jsやlodash.jsの_.indexOfはフラグ渡したら二分検索するで!ってかいてあるのに今きづいてシュンとした。
プログラミングクイズ的なところに実装をコピペで投稿してたからライブラリ使いにくかったんだよ。と言い訳して終わり。。。はぁ