php:関数のメモ化 高速化・最適化技法
たまたま辿り付いた記事(http://tm.root-n.com/programming:php:etc:memoization)
にて知らなかった方法が書かれていたのでメモ
function内のstatic変数に一度処理した結果を残していって
2回目以降は残しておいた結果を利用して高速化`(*'-')/
<?php function getSum($num) { static $cache = array(); if (isset($cache[$num])) { return $cache[$num]; } $i = 0; $ret = 0; while ($i <= $num) { $ret = $ret + $i; $i++; } $cache[$num] = $ret; return $ret; } $i = 0; $s = microtime(true); while ($i < 10000) { getSum($i); $i++; } $ret = microtime(true) - $s; print(round($ret, 6)); print("<br>"); $i2 = 0; $s2 = microtime(true); while ($i2 < 10000) { getSum($i2); $i2++; } $ret2 = microtime(true) - $s2; print(round($ret2, 6)); ?>
結果
1回目:4.661263 2回目:0.005207