アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

14
アアアアアアアアアアアア アアアア 13-1 2 アアアアアアアアアア アアアア アア アアアアアアア アアアア

Upload: kyna

Post on 17-Jan-2016

61 views

Category:

Documents


6 download

DESCRIPTION

アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. 静的データ  /  動的データ. 静的データ あらかじめ、データの全量がわかっている データの追加・削除がない →静的データ構造: 配列 動的データ データ の追加・削除がある したがって 、データの全量もわからない(増減する) →動的データ構造 順 アクセスだけ: 線形リスト 効率的 な探索、局所的なデータ管理: 木構造. 動的データ構造. 線形リスト 次の項目への「ポインタ」 木構造 複数の「部分木」を持つ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

アルゴリズムとデータ構造補足資料 13-1

「 2 分探索木」

横浜国立大学理工学部

数物・電子情報系学科富井尚志

Page 2: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

静的データ  /  動的データ• 静的データ

– あらかじめ、データの全量がわかっている– データの追加・削除がない

→ 静的データ構造:配列

• 動的データ– データの追加・削除がある– したがって、データの全量もわからない(増減する)

→ 動的データ構造順アクセスだけ: 線形リスト効率的な探索、局所的なデータ管理:木構造

Page 3: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

動的データ構造• 線形リスト

– 次の項目への「ポインタ」

• 木構造– 複数の「部分木」を持つ

• 部分木が高々 2 個の木構造: 2分木 binary tree

• 動的データ構造共通のオペレータ– 要素の生成(追加)

• 生成先 ポインタ変数 = (struct 構造体名 *)malloc(sizeof(struct 構造体名 ))

– 要素の削除• free( 削除先へのポインタ )

Page 4: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

おまけ• 木構造 tree structure– 複数の「部分木」を持つ

• 部分木が高々 2 個の木構造: 2分木 binary tree

– どの部分木にも、自分自身(の節)を含まない– 親と子は 1:n の関係

• 網構造 network structure– 複数の「参照先」を持つ

– 参照先の参照先の…参照先に自分自身を含んでよい

Page 5: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

解の候補

2分探索のイメージ: 解の候補を片側「半分」に絞り込む

解の方針:「区間」と「中央」を決めて、「中央」より「右」、「左」のどちらかに絞り込む

n 件のデータ 解

解の候補

解の候補

解の候補

解の候補

log2 n

2分探索:  O( log n ) (オーダ ろぐエヌ) のアルゴリズム

静的データの探索:2分探索

Page 6: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

2分探索の特徴• 探索の計算量(比較回数)は O(log n)• あらかじめソートされている必要がある– ソートの計算量:クイックソート O( n log n )– ソートの計算量の方が重い

→ 最初に一度だけソートする。探索は頻繁に行う。(固定的な名簿の探索に使える)

• つまり、静的データ(データの増減、追加・削除が起こらない)を対象にしている。

Page 7: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

動的データを木構造を使って2分探索可能にする方法: 探索木 (search tree)

• 任意の節点 N について、以下の条件を満たしている木1. (N の ) 左部分木中のすべての節点のキーが、

N のキーよりも小さい2. (N の ) 右部分木中のすべての節点のキーが、

N のキーよりも大きい

Page 8: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

動的データを木構造を使って2分探索可能にする方法: 探索木 (search tree)

root

1

4

3 5

6

2

8 10

9

7

キーの値が小さい キーの値が大きい

Page 9: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木のオペレータ• 探索木を探索する

• 探索木に節点を追加(挿入)する

• 探索木から節点を削除する

Page 10: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木 (search tree)root

1

4

3 5

6

2

8 10

9

7

キーの値が小さい キーの値が大きい

8 を探せ!

Page 11: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木 (search tree)root

1

4

3 5

6

2

8 10

9

7

キーの値が小さい キーの値が大きい

8 を探せ!根から始めて

8 は左?右?→  右

Page 12: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木 (search tree)root

1

4

3 5

6

2

8 10

9

7

キーの値が小さい キーの値が大きい

8 を探せ!根から始めて

8 は左?右?→  左

Page 13: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木 (search tree)root

1

4

3 5

6

2

8 10

9

7

キーの値が小さい キーの値が大きい

8 を探せ!根から始めて

発見! O(log n)

Page 14: アルゴリズムとデータ構造 補足資料 13-1 「 2 分探索木」

探索木のオペレータ• 探索木を探索する

• 探索木に節点を追加(挿入)する

• 探索木から節点を削除する