カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

すぐループして処理しようという発想はやめよう!計算量考えることのススメ

配列とかにあるデータを一通り処理したいときはforとかforeachが便利なのですが、計算量を考えて、できるだけ使わないようにするのが大事という話。

$datas['key01'] = 1;
$datas['key02'] = 1;
$datas['key03'] = 1;

foreach ($datas as $key => $value) {
    if ($key === 'key01') {
        return true;
    }
}

こういうシンプルな処理でも、$datas配列の中身が1000万件などでかくなればなるほど、無駄な処理が増えてしまいます。

そんなときは、 isset() をうまく使うといいです。

PHP以外の言語でも計算量を調べた上で、適切な関数を使いましょう。

$datas['key01'] = 1;
$datas['key02'] = 1;
$datas['key03'] = 1;

$target_key = 'key01';
if (isset($datas[$target_key])) {
    return true;
}

これならループせず、1回で処理済みますね。

データ量が少ないうちから、出来る限り計算量が少なくなる癖をつけておくとよいでしょう。 ではでは!

P.S. 2016/06/15 追記

配列の要素確認と実行速度 : アシアルブログ によると、 isset() は計算量的にはO(1)とのことでした。総なめよりは早いですね。詳細なアルゴリズムはソース読んで勉強しておきますm( )m 詳しい方いましたらご教授ください。