スライド タイトルなし

データ構造とアルゴリズム
第6回の2
木
~ データ構造(3)~
1
木構造 (tree)
2
内容



グラフ
木構造
木の定義と用語






根,節点,葉
親子,兄弟,先祖,子孫
経路と経路の長さ
深さと高さ
木の走査
代表的な木構造
3
グラフ(graph)




有限個の節点(
の集合で構成される
V:(
)の集合
E:(
)の集合
G:(
)
)と,エッジ(
)
節点 v1
辺 (枝) e = (v1, v2)
v2
4
無向グラフと有向グラフ

(undirected graph)
枝に方向を考えないグラフ
(v1, v2) = (v2, v1)
1
v2
v

(directed graph, digraph)
枝の方向を考えるグラフ
(v1, v2) ≠ (v2, v1)
v1
v2
v2
v1
アーク
5
完全グラフ(complete graph)

すべての節点対の間に枝をもつ無向グラフ
6
部分グラフ(subgraph)

グラフG = (V, E)に対し,(
),(
)の作る
G’=(V’, E’)がグラフであるとき,G’はGの
(
)であるという
7
経路(path)




v1から v3への経路は存在する P: v1, v2,v3
v1から v4への経路は存在しない
経路P: v1, v2,v3は節点がすべて異なる⇒(
)
経路P: v1, v2,v3,v1は始点と終点が等しく、その他の節
点はすべて異なる⇒(
)
v4
v2
v1
v3
v5
v6
v7
8
ケーニヒスベルグの橋
陸地が4つ
橋が7本
同じ橋を2度渡らずに
すべての橋を通って
もとの場所に戻れるか
節点が4つ
辺が7本
同じ辺を2度通らずに
すべての辺を通って
もとの節点に戻る経路はあるか
9
連結グラフ(connected graph)


連結グラフ:任意の2つの節点間に経路が存在する
無向グラフ
無向木:閉路を持たない連結無向グラフ
10
木(Tree)
葉 leaf
根 root
12
階層構造(hierarchical structure)

木構造は,階層的な関係を表現するのに適している
A大学
C学部
B学部
D学科 E学科 F学科
G学科
H学科
Iコース
14
階層構造の例

組織図

系図

階層ディレクトリ
(p.39 図2.16)
etc...
15
木の再帰的定義
(1) 単一の節点は,
(1)’ 空集合でも木(
(2)
Ti : 木
ni : 木Tiの根
n : すべてのniの親
新しい木ができる
Tiは新しい木の
nは新しい木の根
(3) すべての木は,
得られる
(p.42)
)
n
n1
n2
nk
T1
T2
Tk
16
問題

a
右図は木といえるか?
⇒

右図のような構造を
という
c
b
d
e
f
g
h
17
兄弟
a
同じ親を持つ節点を
(sibling)という



bと
は兄弟
c と と は兄弟
gと
は兄弟
c
b
d
f
e
g
h
i
19
経路と経路の長さ

n1,n2,・・・,nk が木の中の
節点の列であって,1≦i<k
に対してni がni+1の親になっ
ているとき,この列のことを
「節点n1から節点nk への
(path)」という.

このとき,経路の長さは k -1

節点自身への経路の長さは0
n1
n2
n3
20
先祖と子孫



節点aから節点bへの経路があるとき,aはbの
(ancestor),bはaの
(descendant)であるという
どの節点も自分自身の先祖であり子孫である
自分自身以外の先祖や子孫を
という
21
例1 経路と子孫

aからhへの経路:

その経路の長さ:

fの子孫:
a
b
c

d
f
e
g
i
fの真の子孫:
h
22
例2 先祖
a


cの先祖
b
cの真の先祖
根(root)
⇒
 葉(leaf)
⇒
c
d
f
g
e
i

節点
節点
h
23
深さと高さ

節点の高さ(height)
ある節点から

木の高さ
木の

節点の深さ(level, depth)
根から
24
例3 深さと高さ

a
節点b
高さ ,深さ
深さ(レベル)0
b

節点g
高さ
,深さ
c

f
d
e
g
i
木の高さ
h
25
順序木と無順序木


順序木(ordered tree):兄弟間で順序づけを行った木
無順序木(unordered tree):子の順序を無視した木
a
b
無順序木としてみれば,同じ木
c
c
順序木としてみると,異なる木
左: bが ,cが
右: cが ,bが
a
b
26