安西祐一郎氏の「認識と学習」(岩波講座 ソフトウェア科学)僕は落ちたのですが、科学技術振興事業団の「さきがけ21」の審査委員長だったので、ヒアリングは終わってしまっていたけれど、本屋で見かけて本を買いました。そうしたら、この本の135pageにも、4進木(quad-tree
representation)が出てきました。単にデータ構造の1つとして紹介しているだけですが、僕ならこんなデータ構造は反面教師としてしか紹介しません。最初から効率など眼中にない審査員だと知っていれば、プレゼンの仕方も変えていたでしょう。
4分木のデータ構造の効率の悪さを、256*256の大きさの画像で中心の2*2ドットだけ値が1で、残りが0の2値画像という極端な例で、2分木と比較してみます。4分木のアルゴリズムでは、29個の4分木(4進木)が必要になります。他方は、2つから4つの2分木ですみます。まず、4分木ですが、このサイズの時、リンクは最大で、128*128*4/3ですから、15bitさらに、リンクか値かのフラグが1bit、値であれば1bit。この場合には、4分木1つあたり22bit。最下位はリンクがないので、合計623bit必要です。他方、二分木の場合、リンクの数は最大で256*256-1ですからリンクを表現するのに必要なbit数は1bit増えて16bit。値かリンクかのフラグが1bit。値の場合が1bit。そして、分割軸に1bit。分割位置に8bit必要になります。この場合には、合計94bitです。極端な例でも高々数倍と感じる人がいるかもしれませんが、圧縮率で倍違う様なアルゴリズムの差は速度で言えば何桁もの差に相当する別の世界です。