カメヲラボ

主にプログラミングとお勉強全般について書いてます

第04回 接続行列っていらんのちゃう?

前回「隣接行列は扱い易いしヨロシイわよ」と書いたので、接続行列ってヤツはもういらないんじゃないかという気がしてきたのだが、否。断じてイナゾウ。武士の道は接続行列。・・・すんません疲れてます(´ω`)


確かに無駄な部分が多い。

第02回http://d.hatena.ne.jp/Ozy/20051005#p1で書いたように、接続行列というのは各列には0以外の値がせいぜい2箇所しか出てこないわけで、ほとんどが無駄である。しかしながら、これだけ「わかりやすい無駄」ならば容易にデータを整理できる。たとえば以下のようなグラフがあったとしよう。


このグラフは、点より辺の数が少ないので接続行列を作ると0が余計に目立つ。
\large\left(\begin{array}{c.cccccc}&e1&e2&e3&e4&e5&e6\\\hdash v1&1&1&0&0&0&0\\v2&0&0&1&1&0&0\\v3&0&0&1&0&1&0\\v4&1&0&0&1&0&0\\v5&0&0&0&0&1&0\\v6&0&1&0&0&0&1\\v7&0&0&0&0&0&1\\\end{array}\right)
しかし、プログラマの皆さんなら瞬時に思うだろう。『そんなん、行列なんか作らんと構造体[辺]{点1, 点2}とか、Pair<点1, 点2>でええやんかー、ほらっ!↓』と。
\large\left(\begin{array}{c.cccccc}&e1&e2&e3&e4&e5&e6\\\hdash P1&v1&v1&v2&v2&v3&v6\\P2&v4&v6&v3&v4&v5&v7\\\end{array}\right)
その通り。その通りなのですよ奥さん!


しかしですね奥さん、少ないデータ量で表現できると言っても、これは接続行列の0の部分を削っただけであって、本質的には接続行列なわけですヨ。だから、『接続行列?はぁ?おたくのぱそんこめもりはそんなもん使えるほどぶるじょわじーなわけですかそうですか』とか言ってやらないでください。そうじゃなきゃ、そうじゃなきゃおとーちゃん悲しわ・・・。


つづく