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

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

有限幾何学 第 2 回. 有限幾何学 第 2 回 1. 様々なグラフの例 2. 道と最短経路問題 1. 用語の説明 2. 最短経路問題 3. ダイキストラのアルゴリズム.
PRML読書会第11回 8.4 グラフィカルモデルによる推論 SUHARA YOSHIHIKO (id:sleepy_yoshi)
2015 年度 有限幾何学 期末試験 次の各問に答えよ.( (1), (2), (3), (4), (5), (7), (8), (10) は答えだけでよい) (1) 有向閉路が存在しない位数 4 のトーナメントを描け. (2) 内点の個数が 10 個の正則 2 分木の葉の個数を求めよ. (3) グラフ.
算法数理工学 第 7 回 定兼 邦彦 1. グラフ グラフ G = (V, E) –V: 頂点 ( 節点 ) 集合 {1,2,…,n} –E: 枝集合, E  V  V = {(u,v) | u, v  V} 無向グラフ – 枝は両方向にたどれる 有向グラフ – 枝 (u,v) は u から.
集中講義(九州大学数理学研究院) バイオ構造データに対する数理モデルと アルゴリズム( 1 ) スケールフリーネットワーク 阿久津 達也 京都大学 化学研究所 バイオインフォマティクスセンター.
フロンティア法 - 組合せ問題の解を列挙索引化するZDD構築アルゴリズム
到着時刻と燃料消費量を同時に最適化する船速・航路計画
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
アルゴリズムとデータ構造 2011年7月7日
NetworkXによるネットワーク分析 東京海洋大学 久保 幹雄.
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
ラベル付き区間グラフを列挙するBDDとその応用
算法数理工学 第9回 定兼 邦彦.
    有限幾何学        第8回.
数理科学コース・ 倉田 和浩 2007/11/3 大学祭オープンラボ
An Algorithm for Enumerating Maximal Matchings of a Graph
Permutationグラフと Distance-Hereditaryグラフの 再構築アルゴリズム
JAG Regional Practice Contest 2012 問題C: Median Tree
オペレーティングシステムJ/K 2004年11月4日
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
第4章 空間解析 2.ネットワーク分析 (3) ネットワーク構造分析
s a b f c e d 2016年度 有限幾何学 期末試験 問1:15点
5.5 The Linear Arboricity of Graphs (グラフの線形樹化数)
アルゴリズム入門.
アルゴリズムとデータ構造 2012年7月12日
二分探索木によるサーチ.
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
アルゴリズムとデータ構造 2011年7月4日
遺伝的アルゴリズムへの 統計力学的アプローチ 大阪大学 大学院理学研究科 鈴木譲 CISJ2005 於早稲田大学理工学部
計算の理論 II NP完全 月曜5校時 大月美佳 平成17年1月17日 佐賀大学理工学部知能情報システム学科.
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
アルゴリズムとデータ構造 2013年7月16日
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
離散数学 08. グラフの探索 五島.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
WWW上の効率的な ハブ探索法の提案と実装
第3回 アルゴリズムと計算量 2019/2/24.
b f c a d e g h a b c d e f g 図1 図2 2012年度 有限幾何学 期末試験
アルゴリズムとデータ構造 2012年7月17日
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
A Simple Algorithm for Generating Unordered Rooted Trees
離散数学 07. 木 五島.
絡み目の不変量 カウフマンブラケット多項式 の効率的な実装
計算の理論 II 前期の復習 -有限オートマトン-
ベイジアンネットワーク概説 Loopy Belief Propagation 茨城大学工学部 佐々木稔
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
情報知能学科「アルゴリズムとデータ構造」
アルゴリズムとデータ構造 2011年7月11日
Max Cut and the Smallest Eigenvalue 論文紹介
オペレーティングシステムJ/K (管理のためのデータ構造)
九州大学大学院 情報学専攻特別講義 (8) ニューラルネットワークの 離散モデル
アルゴリズムとデータ構造 2013年7月8日
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
d b c e a f 年度 有限幾何学 中間試験 問1 次の用語の定義をそれぞれ述べよ.
2017年度 有限幾何学 期末試験 注意:ループと多重辺がないグラフのみを扱う. 問1 次の定理と,その証明の概略を読み,各問に答えよ.
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
卒業研究 Treedecompositionを生成するヒューリスティックアルゴリズムの幅に関する評価実験
卒業研究 木分解ヒューリスティック アルゴリズムの性能評価実験 ~アルゴリズムの改良の考察と そのプログラム作成~
離散数学 11. その他のアルゴリズム 五島.
問2 次の問に答えよ. (ただし,握手補題,オイラーの定理,Oreの定理 は授業で紹介したものとする) (1) 握手補題を書け.
計算の理論 I ε-動作を含むNFA 火曜3校時 大月 美佳 平成16年5月25日 佐賀大学知能情報システム学科.
BSPモデルを用いた 最小スパニング木 情報論理工学研究室 02-1-47-134 小林洋亮.
13.近似アルゴリズム.
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
アルゴリズムとデータ構造 2012年7月9日
Presentation transcript:

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

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

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

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

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

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

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

離散数学 グラフの用語

数学的定義 グラフ G = V, E V : 頂点の集合 E : 辺の集合 E  V  V :頂点間の関係 よく使われる記号 離散数学 数学的定義 グラフ 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)} a d e1 e2 b c G

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

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

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

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

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

道 (2/2) 単純路 (simple path) 同じ頂点を2度含まない道 閉路 (closed path),ループ (loop) 離散数学 道 (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頂点間に道が存在する 有向グラフの場合: 連結 (connected) 辺の向きを無視して,任意の2頂点間に道 無向グラフが連結 強連結 (strongly connected) 辺の向きも考えて,任意の2頂点間に道 強連結 連結だが強連結でない

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

循環 / 非循環グラフ 木 (tree): 森のうち,連結であるもの 木 ⊆ 森 森の各連結成分は木 森は木の集合 無向 離散数学 循環 / 非循環グラフ 無向 Undirected 有向 Directed 閉路なし 非循環グラフ Acyclic 森 forest DAG 閉路あり 循環グラフ Cyclic 無向循環 グラフ 有向循環 木 (tree): 森のうち,連結であるもの 木 ⊆ 森 森の各連結成分は木 森は木の集合 森

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

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

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

離散数学 グラフの操作

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

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

密なグラフ用の表現(2次元行列) 頂点の集合 V = { 0, 1, ..., n – 1 } とする 離散数学 密なグラフ用の表現(2次元行列) 頂点の集合 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」と「辺がない」の区別に注意

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

離散数学 リストによる表現 1 1 2 3 4 5 6 7 1 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) 辺 :ポインタ(参照) 離散数学 オブジェクトとポインタによる表現 頂点:任意のオブジェクト (Java, C++) や構造体 (C) 辺 :ポインタ(参照) C/C++ ポインタ, Java オブジェクト参照 Java: class node { ... node[] adjacents; } C++: class node { ... int n_adjacents; node *adjacents[]; } C++/Javaオブジェクト, C 構造体 etc.

利害得失 メモリ消費量 (i, j)  E adjacents(i) 行列表現 O(n2) O(1) O(n) リスト表現 離散数学 利害得失 メモリ消費量 (i, j)  E adjacents(i) 行列表現 O(n2) O(1) O(n) リスト表現 O(n + m) O(d) または O(log d) O(d) ただし: 頂点数 n, 辺の数 m とする 次数の最大値を d とする オブジェクト+ポインタを用いた表現はリストに準ずる

グラフアルゴリズム計算量のパラメータ 通常, n: 頂点数 m: 辺の数 (m  n2) の関数として計算量を評価する n と m 離散数学 グラフアルゴリズム計算量のパラメータ 通常, 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) 難しい(計算困難な)問題 有名な問題の紹介 同型判定 彩色 クリーク(完全部分グラフ)の発見 平衡分割