Lecture 2 of Artificial Intelligence Problem formulation Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/1 Topics of this lecture • • • • • Review of tree structure Review of graph structure Graph representations State space representation Search tree and search graph Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/2 木 (tree) • 1次元データ構造: – 連結リスト、スタック、 キュー E • 2次元データ構造: A –木 • 木の例: – – – – 家系図 スポーツのトーナメント 会社の組織図 UNIX階層ファイルシ ステム A R S E T M Produced by Qiangfu Zhao (Since 2008), All rights reserved © P L E AI Lec02/3 木の用語(1) E • 木:ノードの集合とエッジ(edge) A R の集合からなる. A S T • エッジ:2つのノードを結ぶもの. • ルート(root):最初のノード. M P • 親ノード(parent):ノードの一個上 にあるもの. • 子ノード(child):一個下にあるもの. • 中間ノード:子ノードを持つノード. • 葉(leaf):子ノードを持たないノード. • パス(path):エッジで結ばれているノードの集合. Produced by Qiangfu Zhao (Since 2008), All rights reserved © E L E AI Lec02/4 木の用語(2) E • 親ノード、子ノード、兄弟(sibling) A R ノード. A S T • 葉、終端ノード(terminal)、 M P L E 外部ノード (external node). • 中間ノード、非終端ノード (non-terminal)、内部ノード(internal node). • レベル (level):ルートからノードに至るノード数のこと (ルート自身を含めない). • 高さ (height):ルートからもっとも遠いノードまでの距離. Produced by Qiangfu Zhao (Since 2008), All rights reserved © E AI Lec02/5 多分木と2分木 • 多分木 (multi-way tree or multi-branch tree): – どの非終端ノードもn (>2)以下の子ノードを持つ順序木. • 2分木 (binary tree): – 子のない終端ノードと2つ以下の子(左の子と右の子)をもつ非終端 ノードの2種類のノードからなる順序木. • 完全2分木 (complete binary tree): – どのレベルにおいても非終端ノードが完全に詰まっている2分木 – 一番下のレベルに限って、左詰めが許される. Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/6 木の走査 (traverse) • 走査:ノードをすべて訪れる(訪問する)こと. – 例:PrintTree, SearchTree • 捜査の順序: – 先行順 (pre-order) – 中央順 (in-order) – 後行順 (post-order) – レベル順 (level-order) Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/7 先行順 • ルートからスタートし、再帰的に次のことを実行する • 現在のノード、そして左子、右子の順に訪れる Traverse(struct node *t){ visit(t); if(t->l != z) Traverse(t->l); if(t->r != z) Traverse(t->r); } Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/8 中央順と後行順 • 中央順(対称順):ルートからスタートし、再帰 的に、左ノード、現在のノード、右ノードの順で 訪れる。 • 後行順:ルートからスタートし、再帰的に、左 ノード、右ノード、現在のノードの順で訪れる。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/9 レベル順 • キューによって実現される。 • 上から下へ、左から右へ、レベル毎にそのレベルにあるノー ドを全部を訪れる。 traverse(struct node *t) { enqueue(t); while (!queueempty()) { t = dequeue(); visit(t); if (t->l != z) enqueue(t->l); if (t->r != z) enqueue(t->r); }} Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/10 グラフ • グラフは、木の拡張である。形式的には、グラフは G=(V,E) のように、2つ組(2-tuple, 或は double)で定義される。 ここで、 – Vは頂点(vertex, vertices)或はノード(node)の集合。 – Eはエッジ(edge)或は連結(connection)の集合である。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/11 木とグラフの関係 • 木はロープがないグラフである。 – 任意のノードはルートと唯一のパスで結ばれる。 – 2つ以上のパスはない。 – 結ばれていないノードはない。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/12 グラフの例 • • • • コンピュータネットワーク 日本航空の路線図 会津若松の上下水道図 電気回路 • グラフはこれらのシステムを表 すためのもの。 • グラフにおいて、ノードの位置 は、通常意味はない。 • ノード間の繋がりは重要である。 1 3 4 6 Produced by Qiangfu Zhao (Since 2008), All rights reserved © 2 5 7 AI Lec02/13 グラフの用語 • Path(パス):ノードAとBの間に、連結で繋いでいるノード。 • Simple path(シンプルパス): ノードAとBを繋がるパスにおいて、同 じノードが2回以上出ない。 • Cycle(サイクル): Simple pathで、始点と終点が同じである。 • Connected graph(連結グラフ):すべてのノードの間にパスがある。 • Connected component(連結成分): 部分グラフで、それ自体は連 結グラフになっている。 • Directed graph(有向グラフ): 連結は方向性があるグラフ。 • Undirected graph(無向グラフ):連結に方法性はないグラフ。 • Weighted graph: 連結に重みが付いているグラフ。 • Expand node (ノード展開):ある節点の子節点の集合を求めること はそのノードを展開するという。 • Spanning tree: グラフのすべてのノードを持つツリー(部分グラフ)。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/14 グラフの表現(1) • グラフの隣接リスト表現(Adjacency-list representation): – N=|V|:ノード数 – N個のリストAdj[0],Adj[1],…,Adj[N-1]を定義する。 – Adj[i]は、i番目のノードに対応するリストで、このノードに隣接するす べてのノードを含む。 – 即ち、Adj[i]に含まれている任意のノードjに対して、(i,j)はEに属する 連結である。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/15 グラフの表現(2) • グラフの隣接行列表現(Adjacency-matrix representation) – – – – N=|V|:ノード数 ノードに番号を振る(任意) NxNの行列Aを定義する。 Aのi行目、j列目の要素は以下のように定義される: 1 if (i, j ) ∈ E aij = 0 otherwise Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/16 グラフ表現の例 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/17 AI問題の状態空間表現:例1 (State space representation) 8-パズル問題 • 初期状態: (2,B,3,4,5,6,7,1,8) • 目標状態: (1,2,3,4,5,6,7,8,B) • ルール – – – – ルール1: ルール2: ルール3: ルール4: Bを上に移動する Bを下に移動する Bを左に移動する Bを右に移動する • 現在状態により、ルール実行後の 結果が違う。 • また、現在状態により、実行できな いルールがある。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © 初期状態 2 B 3 1 8 4 7 6 5 ゴール状態 1 2 3 8 B 4 7 6 5 AI Lec02/18 AI問題の状態空間表現:例2 (State space representation) 迷路問題 • 初期状態:(0,0) • 目標状態:(2,2) • ルール – – – – ルール1:上へ移動する ルール2:下へ移動する ルール3:左へ移動する ルール4:右へ移動する y 2 1 0 • 現在状態により、ルール実行後の 結果は違う。 • また、現在状態により、実行でき ないルールがある。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © 0 1 2 x 迷路問題 AI Lec02/19 状態空間の利点 • 問題を形式的に定義する。 • 任意の初期状態から任意の 目標状態への遷移は、形式 的に求められる。 • 求められた結果が「知識」と して利用できる。 • 問題点:計算量は非常に大 きいかもしれない。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/20 迷路問題のグラフ表現 (Search graph) (0,2) U D (0,1) U (1,2) D (0,0) U R L D (1,1) U (2,2) D (1,0) U R D (2,1) L R L (2,0) • 解を求めることはこの探 索グラフ節点(0,0)から 節点(2,2)への経路を求 める問題に同値である。 • 経路は唯一ではないた め、最短なものを求める ことは重要である。 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/21 パズル問題のグラフ表現 探索木 (Search tree) • 探索グラフを作ってから問題の 解を探すことは非効率である。 • 8-パズル問題でさえ、状態の 数は9!/2(約18万)個ある。 • 初期状態からスタートし、ルー ルを適用して木の形に展開して いく。 • 展開の途中で解が見つかった ら終了する。 • 最適解を求めることは、状態数 が多い場合、非常に難しい問 題である。 2 B 3 B 2 3 1 8 4 1 8 4 7 6 5 7 6 5 2 8 3 1 B 4 7 6 5 2 3 B 1 8 4 7 6 5 Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/22 今週の課題 • スケルトンをもとに以下のプログラムを完成させよ – 幾つかの節点対を入力し、グラフを構成する – 探索開始節点を入力する – 探索開始節点から全節点を訪問し、訪問順に節点番号を出力する • アルゴリズムとして以下の2つの方法を使用する – 深さ優先探索 – 幅優先探索 • 深さ優先探索/幅優先探索についてわからなければ、授業資料やイン ターネットで調べること Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/23 今週のクイズ • 迷路問題の初期状態と目標状態は何ですか? • グラフを構成する2つの集合は何ですか? • 探索グラフ或いは探索木の解は何ですか? • 右のグラフについて、以下の文がある。それらが正しい場 合には○、間違っている場合には×を括弧に書け: – このグラフは連結グラフである。( ) – このグラフは無向グラフである。( ) – このグラフは重み付きグラフである。( ) このグラフのスパニングツリー(spanning tree)を一つ書け。 • Produced by Qiangfu Zhao (Since 2008), All rights reserved © AI Lec02/24
© Copyright 2024 Paperzz