350 likes | 621 Views
06. グラフ 序論. 五島. 絵で書けばこういうもの 頂点 ( vertex , node )の集合 と , 辺 ( edge, arc ) の集合 ただし ,幾何的な 情報: 点 の位置 , 線分 の長さや , そもそも 線分であること など は 重要ではない 2 点間に「関係がある」という情報だけが重要. グラフとは. どんな 問題を考えるか ?. ありとあらゆる無数の 問題 最短路 全域木,最小木 最大流れ 最小カット マッチング 彩色 最長路 巡回 平衡分割 同型判定 埋め込み判定 etc.
E N D
離散数学 06. グラフ 序論 五島
絵で書けばこういうもの • 頂点(vertex, node)の集合 と, • 辺(edge, arc) の集合 • ただし,幾何的な情報: • 点の位置, • 線分の長さや, • そもそも線分であることなど は重要ではない • 2点間に「関係がある」という情報だけが重要 離散数学 グラフとは
離散数学 どんな問題を考えるか? • ありとあらゆる無数の問題 • 最短路 • 全域木,最小木 • 最大流れ • 最小カット • マッチング • 彩色 • 最長路 • 巡回 • 平衡分割 • 同型判定 • 埋め込み判定 • etc.
様々な問題がグラフ上の問題としてモデル化,定式化される様々な問題がグラフ上の問題としてモデル化,定式化される 離散数学 グラフと現実はどのように対応しているか
交通網 • 頂点: 都市や駅 • 辺: 道路や路線 • コンピュータ・ネットワーク • 頂点: 端末やスイッチ • 辺: ケーブル • WWW • 頂点: ページ • 辺: リンク • ディジタル回路 • 頂点: 論理素子 • 辺: 配線 • 分子構造 • 頂点: 原子 • 辺: 結合 • 履修ガイド • 頂点: 科目 • 辺: 科目間の依存関係 • 人間関係 (social network) • 頂点: 人間, • 辺: 関係(知人,etc.) 離散数学 「わかりやすい」例
地図 • 頂点: 国や地域 • 辺: 隣接関係 • 迷路 • 頂点: 交差点 • 辺: 隣の交差点 • 機械語プログラム(コントロール・フロー・グラフ) • 頂点:命令 • 辺:「次の命令」 • 非分岐命令: その直後の命令 • 分岐命令: そのターゲット 離散数学 少し自明でない例 (1/2)
ゲームetc.の状態遷移 • 頂点:状態 • 辺 : 1手で移れる状態の対 • 時刻(分刻み)を考慮した乗り換え案内 • 頂点: (時刻, 駅) • 辺 :可能な移動(または移動しない)手段 • (t, A) (t + 1, A) : A駅で 1分 待つ • (t, A) (t', B) : 時刻 t にA駅,t'にB駅を通る電車がある • 文書クラスタリング • 頂点:文書 • 辺 :文書の対がどのくらい似ているか? 離散数学 少し自明でない例 (2/2)
離散数学 グラフの用語
離散数学 数学的定義 • グラフ G = V, E • V : 頂点の集合 • E : 辺の集合 • E V V:頂点間の関係 • よく使われる記号 • 頂点:u, v, i, j, a, b, ... • 辺 :e, (u, v), uv, ... • 右のグラフ G = V, E • V = {a, b, c, d} • E = {e1, e2} ={(a, b), (b, c)} d a e1 e2 c b G
離散数学 有向 / 無向 グラフ • 有向(ゆうこう,directed)グラフ • (a, b) と (b, a) を区別する • a→ b • 無向(むこう,undirected)グラフ • (a, b) と (b, a) を区別しない 無向グラフ 有向グラフ
次数 (degree) • ある頂点につながっている辺の数 • 入次数 と 出次数(有向グラフの場合) • k-正則グラフ • すべての頂点の次数が k 離散数学 次数
重み無し (unweighted) グラフ • 辺があるかないか • 重みつき (weighted) グラフ • 辺があるかないか + • 辺に数値を付加 • 「重み」,「コスト」 離散数学 重み
離散数学 部分グラフ (subgraph) • G'= V', E' と G = V, E に対し,V'⊆ VかつE' ⊆ E • G: G'の親グラフ,拡大グラフ (supergraph?) • G': Gの部分グラフ (subgraph)
道 (path) • 隣接する頂点の系列(からなる部分グラフ) • 表記: • u1 u2 ... un • u1 * un (推移的閉包の記号) • u1から un へ到達可能 (reachable): • u1 から unへの道が存在する 離散数学 道 (1/2) u1 u3 un−1 u2 un
離散数学 道 (2/2) • 単純路 (simple path) • 同じ頂点を2度含まない道 • 閉路 (closed path),ループ (loop) • 始点と終点が一致する道 (u1 = un) • 単純閉路 (simple closed path, simple loop) • 同じ頂点を2度含まない閉路(始点と終点以外) u3 u2 u1 単純路ではない道 u3 u2 u1 単純閉路ではない閉路
連結 (connected)(無向グラフの場合) • 「全体がひとつにつながっている」 • 任意の2頂点間に道が存在する • 有向グラフの場合: • 連結 (connected) • 辺の向きを無視して,任意の2頂点間に道 • 無向グラフが連結 • 強連結 (strongly connected) • 辺の向きも考えて,任意の2頂点間に道 離散数学 連結 強連結 連結だが強連結でない
(強)連結成分: • あるグラフの部分グラフで,(強)連結かつ極大なもの. • (強)連結で極大: • それ以上頂点を加えると(強)連結でなくなる • (有向グラフの)強連結成分の言い換え: • ある頂点 u に対して, • u 自身と • u*vと v*u がともに存在するような vのすべて を頂点とする部分グラフ • 「行って帰ってこれる頂点全部」 離散数学 連結成分
離散数学 循環 / 非循環グラフ 森 • 木 (tree): • 森のうち,連結であるもの • 木 ⊆ 森 • 森の各連結成分は木 • 森は木の集合
離散数学 根 (root) • (連結非循環グラフの)根 (root): • 頂点を1つ選んで, それが一番「上」にあると考える • 木(無向): • どの頂点も根になり得る • 根付き木 (rooted tree) • DAG(有向): • 根がない場合もある どれが根? 根のない DAG
離散数学 循環 / 非循環グラフの例 非循環グラフ 循環グラフ 木 木 無向循環グラフ DAG DAG DAG 有向循環グラフ
疎 (sparse) なグラフ • 辺の数が少ない • 通常,頂点数 nに対して O(n),O(n log n) • 密 (dense) なグラフ • 辺の数が多い • 完全グラフ (complete graph) • すべての頂点間を結ぶ辺が存在するグラフ (E = V V) 離散数学 疎 と 密
離散数学 グラフの操作
操作 • adjacents(u) : • 頂点 uに隣接する頂点を(すべて)列挙する • (u, v) E : • 2頂点 u, v間に辺が存在するかどうかを調べるまたはその重みを得る • これらの操作が,少ないメモリで効率的に行えることが目標 離散数学 グラフに対する基本的な操作
典型的なデータ構造 • 行列表現(密なグラフ用) • リスト表現(疎なグラフ用) 離散数学 グラフ表現に用いるデータ構造
頂点の集合 V = { 0, 1, ..., n – 1 } とする • 辺の情報を2次元行列 M[i,j] (0 i < n, 0 j < n) に格納 • 重みなしグラフ • M[i,j] = 1 iff(i, j) E • M[i,j] = 0 iff(i, j) E • 重みつきグラフ • M[i,j] が辺 (i, j) の重み • 「重み 0」と「辺がない」の区別に注意 離散数学 密なグラフ用の表現(2次元行列)
離散数学 0 2 7 1 3 6 4 5 行列による表現 0 1 2 3 4 5 6 7 0 1 1 1 1 1 2 1 1 空欄は0 3 1 1 1 1 1 4 1 1 5 1 1 6 1 1 1 7 1 1
各頂点 i に対し,その隣接頂点の集合を格納 • 「0 にメモリを使わない」 • 辺の数に比例したメモリしか使わない • 疎な行列に向いている • 「隣接頂点の集合」の実現 • 配列,リンクリスト,平衡木,ハッシュ表 • ただし,疎行列(次数が定数かせいぜい log n)が前提であれば • 配列・リンクリストで十分 離散数学 疎なグラフ用の表現(リスト)
離散数学 0 2 7 1 3 6 4 5 リストによる表現 0 1 1 0 2 3 2 1 3 3 1 4 5 6 7 4 3 5 5 4 6 6 3 5 7 7 3 6
離散数学 オブジェクトとポインタによる表現 • 頂点:任意のオブジェクト (Java, C++) や構造体 (C) • 辺:ポインタ(参照) C/C++ ポインタ,Java オブジェクト参照 Java:class node { ... node[] adjacents;} C++:class node { ...intn_adjacents; node *adjacents[];} C++/Javaオブジェクト,C 構造体 etc.
離散数学 利害得失 • ただし: • 頂点数 n, 辺の数 mとする • 次数の最大値を dとする • オブジェクト+ポインタを用いた表現はリストに準ずる
通常, • n: 頂点数 • m: 辺の数 (m n2) の関数として計算量を評価する • n と m • nのみで表す • m n2なので n, mの関数は nだけの関数として上から押さえられる • nとm で表す • とくに,疎なグラフ(m << n2)に対して効率の良いアルゴリズム • 例:O(n + m) は,疎なグラフに対しては O(n2) よりも優れている 離散数学 グラフアルゴリズム計算量のパラメータ
そのほかの有用なパラメータ • 最大次数 • グラフの直径(単純な道の最大長) 離散数学 グラフ・アルゴリズム計算量のパラメータ
易しい(多項式時間アルゴリズムが存在する)問題易しい(多項式時間アルゴリズムが存在する)問題 • 問題とアルゴリズム • 頂点の探索とその応用 • 最短路(shortest path) • 全域木,最小木 (minimum spanning tree; MST) • 最大流と最小カット (max flow/min cut) • 難しい(計算困難な)問題 • 有名な問題の紹介 • 同型判定 • 彩色 • クリーク(完全部分グラフ)の発見 • 平衡分割 離散数学 これから議論する問題とアルゴリズム