展開処理
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使うとかしていたせいか、速度的にはどちらも大差なかった。
まあ、ボトルネックが他のところ(よばなくてはならない共通関数)にあるから、ってのもあるけど。