グラフ探索アルゴリズム -...
TRANSCRIPT
![Page 1: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/1.jpg)
グラフ探索アルゴリズム
落合秀也
離散数学
![Page 2: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/2.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
2
![Page 3: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/3.jpg)
連結性の判定問題を考える
• グラフG(V,E)が与えられたとき、
Gが連結かどうか、を判定したい。
•小さいグラフなら、
紙に書いてみればよい
•一般には簡単ではない• 大きいグラフの場合
• コンピュータに判断させる場合
3グラフG
![Page 4: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/4.jpg)
コンピュータに判定させるには
•次の方法で判定できそう:• ある頂点sを開始点とし、辺をたどって、動けるだけ動き回る(Traverseする)。• すべての頂点に到達(reach)できれば、連結である。
• 到達可能な範囲をすべて動き回っても、まだ到達できていない頂点があれば、連結でない。
4
sすべて到達可能
到達できない頂点が残る
連結である
連結でない
![Page 5: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/5.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
5
![Page 6: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/6.jpg)
s
幅優先探索(Breadth-First Search)• 基本的な考え方
• 頂点sから開始 ・・・ L0とする
• L0から、外向きに辺をつたい、接続
する頂点を取り込む ・・・ L1とする
• L1から、外向きに辺をつたい、接続
する頂点を取り込む ・・・ L2とする
• L2から、外向きに辺をつたい、接続
する頂点を取り込む ・・・ L3とする
・・・
6
L0 L1 L2
L3
頂点sから湧き出す水によって引き起こされる洪水(Flood)が到達可能な頂点すべてに伝搬するイメージ
![Page 7: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/7.jpg)
層(Layer) L1, …, Ln を次のように作成する• 開始点sの近隣の頂点(の集合)をL1とする
• L1, …, Lj がすでに作られているとき、 Lj に辺でつながっていて、 L1, …, Lj に含まれない頂点(の集合)をLj+1とする
幅優先探索 (もう少し正確な定義)
7
s
L1
LjLj+1
• sからLjの頂点までの道(path)は存在する。
• Ljの頂点は、sからjの距離にある。
• sから頂点tまでの道が存在すれば、頂点tはいずれかの層に属する。
![Page 8: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/8.jpg)
幅優先探索によって作られる木
• Lj+1を作る実際的な方法:• Ljの各頂点に辺で接続する頂点が、Lj+1に新たに含まれるか、否かを判定する
8
s L0 L1 L2
L3
ここで、「新たにLj+1に含まれる場合」の辺で、グラフを作っていくと、木になる。
※右図の場合で、検証してみよう(コンピュータになった気分で1つずつ、試してみよう)
幅優先探索木と呼ばれる
![Page 9: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/9.jpg)
幅優先探索の終了
•幅優先探索の終了条件• 目的1 --特定の頂点(例: 頂点 t ) を発見する場合
-頂点 t が見つかった時点で終了
-探索可能なすべての頂点を巡回した時点で終了
• 目的2 --グラフが連結かどうかを判定する場合
-探索可能なすべての頂点を巡回した時点で終了
•幅優先探索が終了しないケース• 頂点 t が見つからない(or 特定の頂点を探していない)かつグラフが無限大に大きい
9
![Page 10: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/10.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
10
![Page 11: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/11.jpg)
幅優先探索を実現する
•幅優先探索を実現するアルゴリズムを設計する
•予備知識1• グラフの隣接リストによる表現
•予備知識2• キュー(Queue)の働きと使い方
11
![Page 12: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/12.jpg)
幅優先探索を実現する
グラフを隣接リストで表現する•隣接リスト(adjacency list)
1. ある頂点vの、近隣の頂点をリストで表現したもの: Adj[v]
2. 全頂点に対して、同様のリストを作る: Adj – 配列
12
1
2
3
4
5
1
2
3
4
5
2
1
1
1
3
3
4
5
2
4
4
5
着目する頂点近隣の頂点
AdjAdjの大きさは
O(n+m)n: 頂点の数m: 辺の数
![Page 13: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/13.jpg)
幅優先探索を実現する
キュー(Queue)の働きと使い方
•先入れ先出し装置: Fast In Fast Out (FIFO)
•入れた順番に取り出せるメモリ:• 3, 1, 2, 8, 6, 5, 4 の順に投入すれば、
3, 1, 2, 8, 6, 5, 4 の順に出てくる
13
キューEnqueue
(キューに入れる)
Dequeue(キューから出す)
![Page 14: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/14.jpg)
幅優先探索アルゴリズムの設計
•準備するもの• グラフGの隣接リスト配列: Adj
• 頂点vの隣接ノードはAdj[v]
• 訪問判別フラグ: F[v]
• vに訪問済みなら、F[v] = trueの値を取る
• vに訪問していなければ、F[v] = falseの値を取る (初期値)
• キュー: Q• キューにvを入れる操作
Q.enqueue(v)
• キューから取り出したものを、vとする操作
v := Q.dequeue()14
s L0 L1 L2
L3
![Page 15: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/15.jpg)
幅優先探索アルゴリズム
開始点sから幅優先探索を行うアルゴリズム
F[s] := trueQ.enqueue(s)While Q is not empty
v := Q.dequeue()Foreach node u in Adj[v]
If F[u] = false Then,F[u] := trueQ.enqueue(u)
EndIfEndFor
EndWhile15
時間計算量:O(n+m)
s
ab
c
d e
f
g
h
ij
k
(*) 厳密には初期化処理が必要だが省略している
![Page 16: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/16.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
16
![Page 17: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/17.jpg)
深さ優先探索 (Depth-First Search)
•基本的な考え方• 開始点sから、辺をたどって行きつくところ(=dead end)まで行ってみる
(ただし同じ頂点は取らない)
• 行き止まり(=dead end)に当たれば、1つ戻って、別の辺をたどってみる
• 1つ戻ってもダメなら、2つ戻ってみる
• 2つ戻ってもダメなら、3つ戻ってみる
・・・
17
s
頂点sから歩き始めた人が、すべての行き止まりにあたるまで、隈なく歩いていくイメージ
ab
c
de
f
g
h
ij
k
![Page 18: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/18.jpg)
深さ優先探索によって作られる木
• 出来るだけ深いところまで一気に作る
• 戻りながら、別に行ける頂点があれば、そちらの枝を作る
18
s
ab
c
de
f
g
h
ij
k
s
b
c
f
g
i
j
k
h
d
a
e
深さ優先探索木と呼ばれる
![Page 19: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/19.jpg)
深さ優先探索の終了
•深さ優先探索の終了条件• 目的1 --特定の頂点(例: 頂点 t ) を発見する場合
-頂点 t が見つかった時点で終了
-探索可能なすべての頂点を巡回した時点で終了
• 目的2 --グラフが連結かどうかを判定する場合
-探索可能なすべての頂点を巡回した時点で終了
•深さ優先探索が終了しないケース• 頂点 t が見つからない(or 特定の頂点を探していない)かつグラフが無限大に大きい
19
![Page 20: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/20.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
20
![Page 21: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/21.jpg)
深さ優先探索を実現する
•深さ優先探索を実現するアルゴリズムを設計する
•予備知識1• グラフの隣接リストでの表現
•予備知識2• スタック(Stack)の働きと使い方
21
![Page 22: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/22.jpg)
深さ優先探索を実現する
スタック(Stack)を利用する•後入れ先出し装置: Last In Fast Out (LIFO)
•入れた順番の逆に取り出せるメモリ:(1) 3, 1, 2を投入(2) 2個取り出す(3) 8, 6 を投入(4) 3個取り出す(5) 5, 4 を投入(6) 2個取り出す 22
スタック
Push(スタックに入れる)
Pop(スタックから出す)
取り出される列は2, 1, 6, 8, 3, 4, 5となる
![Page 23: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/23.jpg)
深さ優先探索アルゴリズムの設計
•準備するもの• グラフGの隣接リスト配列: Adj
• 頂点vの隣接ノードはAdj[v]
• 訪問判別フラグ: F[v]
• vに訪問済みなら、F[v] = trueの値を取る
• vに訪問してなければ、F[v] = falseの値を取る (初期値)
• スタック: S• スタックにvを入れる操作
S.push(v)
• スタックから取り出したものを、vとする操作
v := S.pop()23
s
ab
c
de
f
g
h
ij
k
![Page 24: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/24.jpg)
深さ優先探索アルゴリズム
開始点sから深さ優先探索を行うアルゴリズム
F[s] := true
S.push(s)
While S is not empty
v := S.pop()
If F[v] = false Then,
F[v] := true
Foreach node u in Adj[v]
If F[u] = false Then,
S.push(u)
EndIf
EndFor
EndIf
EndWhile24
時間計算量:O(n+m)
(*) 厳密には初期化処理が必要だが省略している
s
ab
c
de
f
g
h
ij
k
![Page 25: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/25.jpg)
深さ優先探索アルゴリズム2
再帰呼び出しによる方法深さ優先探索を行うアルゴリズム(再帰呼び出し版)
Function DFS(v)
If F[v] = false Then,
F[v] := true
Foreach node u in Adj[v]
If F[u] = false Then,
DFS(u)
EndIf
EndForEndIf
EndFunction
25再帰呼び出しは、実際には、裏ではスタックを使って実行される
頂点sから探索を行う場合:
DFS(s)を実行すれば良い
![Page 26: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/26.jpg)
幅優先探索と深さ優先探索の比較
幅優先探索
F[s] := trueQ.enqueue(s)While Q is not empty
v := Q.dequeue()Foreach node u in Adj[v]
If F[u] = false Then,F[u] := trueQ.enqueue(u)
EndIfEndFor
EndWhile
深さ優先探索
F[s] := trueS.push(s)While S is not empty
v := S.pop()If F[v] = false Then,
F[v] := trueForeach node u in Adj[v]
If F[u] = false Then,S.push(u)
EndIfEndFor
EndIfEndWhile
26
![Page 27: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/27.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
27
![Page 28: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/28.jpg)
木の構造
•根(root)
•枝(branch)
•葉(leaf)
•親(parent)
•子(child)
•先祖(ancestor)
•子孫(descendant)
•深さ(depth, level)28
![Page 29: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/29.jpg)
木(根付き木)の構造
29
根
葉
葉 葉
葉 葉 葉 葉
葉 葉
葉枝
枝
•根(root)
•枝(branch)
•葉(leaf)
![Page 30: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/30.jpg)
木(根付き木)の構造
•親(parent)
•子(child)
•先祖(ancestor)
•子孫(descendant)
30
ここに着目
親
子 子
先祖
子孫
![Page 31: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/31.jpg)
木の深さ (depth, level)
31
深さ1
深さ2
深さ3
深さ4
深さ0
![Page 32: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/32.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
32
![Page 33: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/33.jpg)
探索木
•木の組換えを許すとする
• このとき、何らかの規則に沿って木を組み換えれば、探索効率を向上できることがある
33適当な木
7はどこ?-幅優先探索-深さ優先探索などで探す
整理整頓された木7はどこ?- 8よりは小さい- 4よりは大きい- 6よりは大きい
4
6
5 7
2
1 3
12
14
13 15
10
9 11
8
6
5 7
2
1
3
1413
15
10
9
11
8
![Page 34: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/34.jpg)
二分探索木
• 二分木• 各ノードが高々2個の子を持つ(根付き)木• 片方を左、もう片方を右と呼ぶ
• 二分探索木• ノードの値を nとするとき左枝の各ノードの値 < n右枝の各ノードの値 > nとなるように構成された木
• 探索したい値を sとするとき以下の方法で発見できる(存在すれば)
Function 二分探索(s,n)s=n 探索終了s<n 左の子lに対して二分探索(s,l) を実行s>n 右の子rに対して二分探索(s,r) を実行 34
6
2 7
1 4
3 5
3?
3?
3?
3?
![Page 35: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/35.jpg)
平衡二分探索木
•二分探索木は、深さがアンバランスになることがある
•平衡二分探索木は、深さができるだけ等しくなるように構成された木
35
4
2 6
5 71 3
浅いノードを探索した場合は、効率がよいが、最悪の場合、最も深いところまで探索する必要があるつまり最悪の場合、O(n)となる (nは頂点の数)
深さは log nなので、O( log n )
で処理できる
![Page 36: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/36.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
36
![Page 37: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/37.jpg)
パトリシア・トライ (Patricia Trie)Practical Algorithm to Retrieve Information Coded in Alphanumeric
•辞書式順序を定義可能なノード探索のための探索木
•例)以下のノードの探索木a, aa, ab, aba, abb,
b, c, ca, cb, cc
•例) abaを検索する場合• 1文字目(a)で振り分け
• 2文字目(b)で振り分け
• 3文字目(a)で振り分け
abaに到達する 37
a bc
aaab
aba abb
ca cb cc
aba ?
![Page 38: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/38.jpg)
DNSの名前体系と探索木
• DNSの名前体系(例: www.u-tokyo.ac.jpなど)は、インターネット上にパトリシアを構築して管理されている
• 根(root)は . のみで表現される
• 深さ1のノードに、.com. .jp. .net. .org.
などがある
• .jp.の子に、.co.jp. .ac.jp. .ne.jp.
などがある
• .ac.jp. の子に、
.u-tokyo.ac.jp.
がある38
.com. .jp. .net.
.
.co.jp. .ac.jp. .ne.jp
.u-tokyo.ac.jp.…..ac.jp.
…..ac.jp.
www.u-tokyo.ac.jp.
?
![Page 39: グラフ探索アルゴリズム - 江崎・落合研究室へようこそjo2lxq/dm/lecture/07.pdfコンピュータに判定させるには •次の方法で判定できそう:](https://reader034.vdocuments.mx/reader034/viewer/2022051307/5ab0ee9a7f8b9a00728bacf2/html5/thumbnails/39.jpg)
今日の内容
• 「グラフの連結性」の判定
•幅優先探索
•幅優先探索の実現方法
•深さ優先探索
•深さ優先探索の実現方法
•木の構造
•探索木
•パトリシア・トライ
39