5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Array.prototype.indexOf は線形検索してる。

Posted at

##事象
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はフラグ渡したら二分検索するで!ってかいてあるのに今きづいてシュンとした。
プログラミングクイズ的なところに実装をコピペで投稿してたからライブラリ使いにくかったんだよ。と言い訳して終わり。。。はぁ

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?