1 / 33

06. グラフ 序論

06. グラフ 序論. 五島. 絵で書けばこういうもの 頂点 ( vertex , node )の集合 と , 辺 ( edge, arc ) の集合 ただし ,幾何的な 情報: 点 の位置 , 線分 の長さや , そもそも 線分であること など は 重要ではない 2 点間に「関係がある」という情報だけが重要. グラフとは. どんな 問題を考えるか ?. ありとあらゆる無数の 問題 最短路 全域木,最小木 最大流れ 最小カット マッチング 彩色 最長路 巡回 平衡分割 同型判定 埋め込み判定 etc.

buffy
Download Presentation

06. グラフ 序論

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 離散数学 06. グラフ 序論 五島

  2. 絵で書けばこういうもの • 頂点(vertex, node)の集合 と, • 辺(edge, arc) の集合 • ただし,幾何的な情報: • 点の位置, • 線分の長さや, • そもそも線分であることなど は重要ではない • 2点間に「関係がある」という情報だけが重要 離散数学 グラフとは

  3. 離散数学 どんな問題を考えるか? • ありとあらゆる無数の問題 • 最短路 • 全域木,最小木 • 最大流れ • 最小カット • マッチング • 彩色 • 最長路 • 巡回 • 平衡分割 • 同型判定 • 埋め込み判定 • etc.

  4. 様々な問題がグラフ上の問題としてモデル化,定式化される様々な問題がグラフ上の問題としてモデル化,定式化される 離散数学 グラフと現実はどのように対応しているか

  5. 交通網 • 頂点: 都市や駅 • 辺: 道路や路線 • コンピュータ・ネットワーク • 頂点: 端末やスイッチ • 辺: ケーブル • WWW • 頂点: ページ • 辺: リンク • ディジタル回路 • 頂点: 論理素子 • 辺: 配線 • 分子構造 • 頂点: 原子 • 辺: 結合 • 履修ガイド • 頂点: 科目 • 辺: 科目間の依存関係 • 人間関係 (social network) • 頂点: 人間, • 辺: 関係(知人,etc.) 離散数学 「わかりやすい」例

  6. 地図 • 頂点: 国や地域 • 辺: 隣接関係 • 迷路 • 頂点: 交差点 • 辺: 隣の交差点 • 機械語プログラム(コントロール・フロー・グラフ) • 頂点:命令 • 辺:「次の命令」 • 非分岐命令: その直後の命令 • 分岐命令: そのターゲット 離散数学 少し自明でない例 (1/2)

  7. ゲームetc.の状態遷移 • 頂点:状態 • 辺 : 1手で移れる状態の対 • 時刻(分刻み)を考慮した乗り換え案内 • 頂点: (時刻, 駅) • 辺 :可能な移動(または移動しない)手段 • (t, A)  (t + 1, A) : A駅で 1分 待つ • (t, A)  (t', B) : 時刻 t にA駅,t'にB駅を通る電車がある • 文書クラスタリング • 頂点:文書 • 辺 :文書の対がどのくらい似ているか? 離散数学 少し自明でない例 (2/2)

  8. 離散数学 グラフの用語

  9. 離散数学 数学的定義 • グラフ G = V, E • V : 頂点の集合 • E : 辺の集合 • E V  V:頂点間の関係 • よく使われる記号 • 頂点:u, v, i, j, a, b, ... • 辺 :e, (u, v), uv, ... • 右のグラフ G = V, E • V = {a, b, c, d} • E = {e1, e2} ={(a, b), (b, c)} d a e1 e2 c b G

  10. 離散数学 有向 / 無向 グラフ • 有向(ゆうこう,directed)グラフ • (a, b) と (b, a) を区別する • a→ b • 無向(むこう,undirected)グラフ • (a, b) と (b, a) を区別しない 無向グラフ 有向グラフ

  11. 次数 (degree) • ある頂点につながっている辺の数 • 入次数 と 出次数(有向グラフの場合) • k-正則グラフ • すべての頂点の次数が k 離散数学 次数

  12. 重み無し (unweighted) グラフ • 辺があるかないか • 重みつき (weighted) グラフ • 辺があるかないか + • 辺に数値を付加 • 「重み」,「コスト」 離散数学 重み

  13. 離散数学 部分グラフ (subgraph) • G'= V', E' と G = V, E に対し,V'⊆ VかつE' ⊆ E • G: G'の親グラフ,拡大グラフ (supergraph?) • G': Gの部分グラフ (subgraph)

  14. 道 (path) • 隣接する頂点の系列(からなる部分グラフ) • 表記: • u1  u2  ...  un • u1 * un (推移的閉包の記号) • u1から un へ到達可能 (reachable): • u1 から unへの道が存在する 離散数学 道 (1/2) u1 u3 un−1 u2 un

  15. 離散数学 道 (2/2) • 単純路 (simple path) • 同じ頂点を2度含まない道 • 閉路 (closed path),ループ (loop) • 始点と終点が一致する道 (u1 = un) • 単純閉路 (simple closed path, simple loop) • 同じ頂点を2度含まない閉路(始点と終点以外) u3 u2 u1 単純路ではない道 u3 u2 u1 単純閉路ではない閉路

  16. 連結 (connected)(無向グラフの場合) • 「全体がひとつにつながっている」 • 任意の2頂点間に道が存在する • 有向グラフの場合: • 連結 (connected) • 辺の向きを無視して,任意の2頂点間に道 • 無向グラフが連結 • 強連結 (strongly connected) • 辺の向きも考えて,任意の2頂点間に道 離散数学 連結 強連結 連結だが強連結でない

  17. (強)連結成分: • あるグラフの部分グラフで,(強)連結かつ極大なもの. • (強)連結で極大: • それ以上頂点を加えると(強)連結でなくなる • (有向グラフの)強連結成分の言い換え: • ある頂点 u に対して, • u 自身と • u*vと v*u がともに存在するような vのすべて を頂点とする部分グラフ • 「行って帰ってこれる頂点全部」 離散数学 連結成分

  18. 離散数学 循環 / 非循環グラフ 森 • 木 (tree): • 森のうち,連結であるもの • 木 ⊆ 森 • 森の各連結成分は木 • 森は木の集合

  19. 離散数学 根 (root) • (連結非循環グラフの)根 (root): • 頂点を1つ選んで, それが一番「上」にあると考える • 木(無向): • どの頂点も根になり得る • 根付き木 (rooted tree) • DAG(有向): • 根がない場合もある どれが根? 根のない DAG

  20. 離散数学 循環 / 非循環グラフの例 非循環グラフ 循環グラフ 木 木 無向循環グラフ DAG DAG DAG 有向循環グラフ

  21. 疎 (sparse) なグラフ • 辺の数が少ない • 通常,頂点数 nに対して O(n),O(n log n) • 密 (dense) なグラフ • 辺の数が多い • 完全グラフ (complete graph) • すべての頂点間を結ぶ辺が存在するグラフ (E = V  V) 離散数学 疎 と 密

  22. 離散数学 グラフの操作

  23. 操作 • adjacents(u) : • 頂点 uに隣接する頂点を(すべて)列挙する • (u, v) E : • 2頂点 u, v間に辺が存在するかどうかを調べるまたはその重みを得る • これらの操作が,少ないメモリで効率的に行えることが目標 離散数学 グラフに対する基本的な操作

  24. 典型的なデータ構造 • 行列表現(密なグラフ用) • リスト表現(疎なグラフ用) 離散数学 グラフ表現に用いるデータ構造

  25. 頂点の集合 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次元行列)

  26. 離散数学 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

  27. 各頂点 i に対し,その隣接頂点の集合を格納 • 「0 にメモリを使わない」 • 辺の数に比例したメモリしか使わない • 疎な行列に向いている • 「隣接頂点の集合」の実現 • 配列,リンクリスト,平衡木,ハッシュ表 • ただし,疎行列(次数が定数かせいぜい log n)が前提であれば • 配列・リンクリストで十分 離散数学 疎なグラフ用の表現(リスト)

  28. 離散数学 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

  29. 離散数学 オブジェクトとポインタによる表現 • 頂点:任意のオブジェクト (Java, C++) や構造体 (C) • 辺:ポインタ(参照) C/C++ ポインタ,Java オブジェクト参照 Java:class node { ... node[] adjacents;} C++:class node { ...intn_adjacents; node *adjacents[];} C++/Javaオブジェクト,C 構造体 etc.

  30. 離散数学 利害得失 • ただし: • 頂点数 n, 辺の数 mとする • 次数の最大値を dとする • オブジェクト+ポインタを用いた表現はリストに準ずる

  31. 通常, • n: 頂点数 • m: 辺の数 (m n2) の関数として計算量を評価する • n と m • nのみで表す • m n2なので n, mの関数は nだけの関数として上から押さえられる • nとm で表す • とくに,疎なグラフ(m << n2)に対して効率の良いアルゴリズム • 例:O(n + m) は,疎なグラフに対しては O(n2) よりも優れている 離散数学 グラフアルゴリズム計算量のパラメータ

  32. そのほかの有用なパラメータ • 最大次数 • グラフの直径(単純な道の最大長) 離散数学 グラフ・アルゴリズム計算量のパラメータ

  33. 易しい(多項式時間アルゴリズムが存在する)問題易しい(多項式時間アルゴリズムが存在する)問題 • 問題とアルゴリズム • 頂点の探索とその応用 • 最短路(shortest path) • 全域木,最小木 (minimum spanning tree; MST) • 最大流と最小カット (max flow/min cut) • 難しい(計算困難な)問題 • 有名な問題の紹介 • 同型判定 • 彩色 • クリーク(完全部分グラフ)の発見 • 平衡分割 離散数学 これから議論する問題とアルゴリズム

More Related