あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

展開処理


 A
 |
 +------+
 | |
 B(2) D(2)
 | |
 | +-------+
 | | |
 C(3) E(1) F(2)
()は、上の物に対して、いくつの割合か、を示す。

 こんな感じの構成があったとき、Aが5個だったらB-Fはそれぞれいくつ必要か?ってな数を求めるとき、今までは子の数を調べる、という処理を一個作って再帰で呼び出す、という方式で考えていた。
 A→B,B→C,A→D,D→E,D→Fとそれぞれ調べるって感じ。


 そういう方式でなくて、階層ごとにまとめて処理する、って方法を教えてもらい、ちょっと感心した。
 A→B,Dを調べる。 B→C,D→E,Fを調べると2回で処理するイメージ。
 この方式だと、まとめて処理できるので、DBアクセスが少なくて済むのが利点。


 物事を解決するにはいろいろな方法があるけども、私の頭は固いので、いろいろな発想で解決する、という方向には向かっていないようだ。特に最近はそう思う。
 不要に悩まなくて済む、という点ではメリットだけど、視点をもっと広くもちたいものだ。


 ちなみに、再帰の方はHash使うとかしていたせいか、速度的にはどちらも大差なかった。
 まあ、ボトルネックが他のところ(よばなくてはならない共通関数)にあるから、ってのもあるけど。