
いや、実は夏の前にざっと目を通したんですけどね。ちょっと電車の中で読むには、理解力が追いつかないのでホント内容を理解しないままにパラパラ頁をめくった程度でした。
(その割に、数時間を費やしたとは言わないでおこう。馬鹿なのがバレてしまう・・・)
実は、うちの部署で新しい業務サービスの提供に伴い、作業量が増大しちゃいましてね。処理すべき対象件数が倍以上になっている。ほんの数ヶ月前と比べて。
顧客IDをキーに当初2千件以下のものを別の2千件のものと比較して内容に応じて分岐処理されるんだけど、最初は総当りで力ずくで処理させていても全然問題じゃなかったりする。
EXCEL自体のVLOOK関数で処理速度も速かったし・・・。
とある訳ありで型の不一致を起こす事例があった為、独自の関数を実装して代替することに。まあ、いいんだけど・・・。ここでまずは処理速度が当然落ちる。
更に、処理対象件数が一気に4千件になり、比較される側も対象をさらに増加した3~4千件内で検索するようになった。10桁の文字列の比較なので他の処理も含めて全部で5分もかかっていてビックリした!
最近、自分では使ってないので全然気づかなかったなあ~、まずいっす、この状態は。
他の作業をしていればいいと言っても、効率悪過ぎ(号泣)。誰も言わないんだもん・・・。
処理が終わった段階でも無駄に最後まで検索を続けるのは、当然途中で処理から出るようにした他、比較用のデータを事前にソートで並べ替えた後、データを二分したグループに分けた。
ちょうど中間のところで大小判定をさせ、それより小さなグループか大きなグループのどちらかで検索させることにした。当然比較件数が半減するので処理速度は2分半近くまで落ちた。
だったら、そのグループを今度はそれぞれニ分割して計四分割したグループで分けて処理させるようにすれば、更に処理時間は半減するでしょう。
これを延々とやっていけば、処理時間は逓減していくはずですが、そもそもの比較する顧客IDがどのグループ内になるかを判別するif文が入れ子状態になるかな?
ん~? そうか、select文で分岐させれば、もっと単純になるか? 明日時間があれば、それでやってみようっと。8分割ぐらいさせちゃおうか? 楽しそう♪
とまあ、こんなことを通勤電車の中で考えつつ、この特別付録を思い出した。アルゴリズムって大事だよねぇ~。
改めて読んでいたら、ちゃんと私が思いつく程度のこのアイデアは載ってました。ふむふむ。やっぱり読んでも身に付いてない知識は駄目だね。こうやって自分が問題に直面して初めて身に付く気がします。
改めて他の記事も読んでみましたが、最初読んだ時とは全然感じ方が違います。まさにカラーバス効果ってやつか?(笑)
問題意識を持って、こういった考え方に向き合えるなら役に立つと思います。この手の考え方は普遍性がありますからね! 会社のエレベータは二台しかなくて、待ち時間が長いし、動きのアルゴリズムがあまり合理的には思えないのですが、制約条件や効用関数の設定が違うんだろうなあ~。
私個人の感覚とは? でも、いろいろと思考実験にはなったりします。面白いですよ~。
そうそう、本書を読みながら思ったのですが、文字列10桁の比較なのですが、これを頭3桁とか5桁とかにして比較することで処理速度とかも上がりそう・・・上がるかな?
まずは頭5桁の一致不一致を判定してから、残りの比較すれば、処理速度も向上しそうなんだけど???
よし、時間が取れたらやってみよう。それが使えるなら、他の処理でも応用利くもんね。
どんな仕事でもそうですが、それまでの知識や経験を生かして、どんどん作業を効率化していけるっていうのは大好きですね。プログラムの開発は、自分用にサンプルコードが増えていくので、半年や一年前に比べると明らかに作成速度や成果物の質が倍以上に向上しているのが分かって楽しい限りです(元が酷過ぎるというのもあるんですけどね)。
本書はそういう意味で、役に立つ本です。ただ、目的意識もなく読んでいると頭を使うのでかなり辛いです。興味のない人には拷問かもしれません。使うべききっかけや必要性のある人にはお薦めですねぇ~。
処理速度が上がるってのは、PCのUPGRADEした時のように快感です♪
日経ソフトウエア 2009年 07月号(amazonリンク)
ブログ内関連記事
「Excel/VBAまるごと活用ブック」日経ソフトウエア 2009年 09月号特別付録
「日経ソフトウエア 2008年 07月号」日経BP社