モデル化とグラフ

14.8. モデル化とグラフ

コンピュータで扱う情報は、画像(文字を含む)音といった人の五感と対応するものだけでなく、抽象的な内容もあります。 グラフも符号化できるので、 電車の路線図、化学反応の行程、自律動作の規則などをグラフで表現すると、コンピュータで扱えるようになります。

グラフ #

グラフは、接続関係を表すモデルです。 頂点 (ノード) と辺 (エッジ、アーク) の集合で定義されます。 頂点は、図では丸や長方形で表記します。 辺は頂点二つのペアで、向きを持つ場合は矢印で、持たない場合は線で頂点同士をつないで図示します。 通常は、位置関係は無視して考えます。

たとえば、鉄道を (経営や路線を無視すると)、駅をノードで、隣接する駅を辺として、グラフで表現することができます。

グラフは、行列で表現することができます。下のグラフは、頂点に整数で番号をつけ、r行c列の行列について成分が1のとき rからcへの辺があるという規則で表現しました。これを隣接行列と言います。 この例では行列の要素について、01で辺の有無を表現しましたが、辺の情報 (番号、コスト、遷移確率など) を表現することもできもあります。

stateDiagram-v2
    direction LR
    state "1" as s1
    state "2" as s2
    state "3" as s3
    state "4" as s4
	s1 --> s2
	s2 --> s3
	s3 --> s4
	s4 --> s2
	s4 --> s3
\( \begin{pmatrix}0& \underbrace{1}_{1\to 2} &0 &0 \\ 0& 0 &\underbrace{1}_{2\to 3} &0 \\ 0 &0 &0 &\underbrace{1}_{3\to 4} \\ 0 &\underbrace{1}_{4\to 2} &\underbrace{1}_{4\to 3} &0\end{pmatrix} \)
隣接行列の冪乗
隣接行列を2乗すると、その各要素は、非ゼロなら rからcにちょうど2歩で行けるという意味になります。n乗ならn歩です。

#

一つの頂点から、枝分かれしてゆくタイプのグラフをと言います。 厳密には、連結でサイクルを持たないグラフと定義します。 特に辺が向きを持つ木で、すべての出発点を (root)、辺で接続する頂点ペアについて、根に近い方を、遠い方を、子を持たない頂点を (leaf) と言います。

ファイルシステムの階層構造や2進符号が木に対応することを、これまで紹介してきました。 通常根を上に書くことが多いですが、回転させても意味は同じです。

stateDiagram-v2
    state "?" as s0
    state "?" as s1
    state "出席" as s00
    state "欠席" as s01
    state "遅刻" as s10
    state "早退" as s11
	[*] --> s0 : 0
	[*] --> s1 : 1
	s0 --> s00 : 0
	s0 --> s01 : 1
	s1 --> s10 : 0
	s1 --> s11 : 1
stateDiagram-v2
    direction LR
    state "?" as s0
    state "?" as s1
    state "出席" as s00
    state "欠席" as s01
    state "遅刻" as s10
    state "早退" as s11
	[*] --> s0 : 0
	[*] --> s1 : 1
	s0 --> s00 : 0
	s0 --> s01 : 1
	s1 --> s10 : 0
	s1 --> s11 : 1
木の集まりを森といいます。

オートマトン #

自立的な動作の表現に、グラフを用いることもできます。

右図は `a` または `b` で構成される文字列を読み、開始から今までに `aba` の並びがあったかどうかを判定するオートマトンの設計をグラフで示したものです。`Start` のノードで開始し、`a` または `b` の文字を読むたびに、対応するラベルを持つ矢印に従って次のノードに移動します。 `aba` を読むと `OK` のノードに移動していて、その後は何を読んでも、そのノードに留まります。これにより、1度でも `aba` を読んだか、を現在のノードにより判定することができます。(先頭ではなく途中で `aba` をよんだとしても `OK` のノードに到達していることを確認しましょう)
stateDiagram-v2
    state "start" as s0
    state "?" as sa
    state "?" as sab
    state "OK" as saba
	s0 --> sa : a
	s0 --> s0 : b
	sa --> sa : a
	sa --> sab : b
	sab --> saba : a
	sab --> s0 : b
	saba --> saba : a, b

「情報」の授業では、オートマトンについての演習も用意されています。

オートマトンシミュレータによる計算モデルの理解
公開鍵暗号と署名の検証 モデル化とグラフ ネットワークの利用と理解