2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数

Slides:



Advertisements
Similar presentations
データ構造とプログラミング技 法 (第3回) ー木構造ー. 木構造 (1) 根( root )と呼ばれる節 R が、 1 つだけ含まれ る。 R … TmTm T1T1 木構造: 1 個以上の節の有限集合 T であり、 次の二つの条件を満足するもの (2) 根以外の節は、 m (≧ 0 )個の互いに素な部.
Advertisements

Lecture02-Binary Search Trees 通信情報システム専攻 岩間伊藤研究室 M1 前田圭介.
卒業研究発表 2色木 (Red-Black Tree)
4.3 マージソート.
ヒープソートの演習 第13回.
アルゴリズムとデータ構造 第8回 ソート(3).
第10回 整列 ~ バブルソート,挿入ソート,選択ソート~
2分探索.
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
アルゴリズムとデータ構造 2010年7月5日
第8講: 平成19年11月9日 (金) 4限 E252教室 探索アルゴリズム(1).
On the Enumeration of Colored Trees
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 補足資料13-4 「2分探索木の追加・削除(ダイジェスト)」
アルゴリズムとデータ構造 2012年6月14日
データ構造とアルゴリズム 第7回 木 ~ データ構造(3)~.
アルゴリズムイントロダクション18章 D3照山順一.
情報工学概論 (アルゴリズムとデータ構造)
東京大学大学院情報理工学系研究科 数理情報学専攻 定兼 邦彦 2016年4月7日
2009/11/20 探索アルゴリズム(2) 第8講: 平成21年11月20日 (金) 4限 E252教室 コンピュータアルゴリズム.
探索アルゴリズム (1) 第7講: 平成21年11月13日 (金) 4限 E252教室.
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
s a b f c e d 2016年度 有限幾何学 期末試験 問1:15点
アルゴリズムとデータ構造 2011年6月14日
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
算法数理工学 第3回 定兼 邦彦.
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
“Purely Functional Data Structures” セミナー
アルゴリズムとデータ構造1 2005年7月26日
アルゴリズムとデータ構造1 2006年7月4日
1 T 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H
情報工学概論 (アルゴリズムとデータ構造)
二分探索木における要素削除 データ構造とプログラミング(10)
データ構造とアルゴリズム (第3回) ー木構造ー.
第9回 優先度つき待ち行列,ヒープ,二分探索木
データ構造と アルゴリズム 第七回 知能情報学部 新田直也.
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
離散数学 07. 木 五島.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
プログラミング 4 木構造とヒープ.
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
AVL木.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造 2011年6月16日
算法数理工学 第4回 定兼 邦彦.
アルゴリズムとデータ構造 2013年7月1日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
情報工学概論 (アルゴリズムとデータ構造)
Advanced Data Structure 第3回
アルゴリズムとデータ構造1 2009年7月2日
平面走査法を使った 一般線分の 交点列挙アルゴリズム
ヒープソート.
ヒープソート.
アルゴリズムとデータ構造 2013年6月20日
参考:大きい要素の処理.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数 2 分木構造を利用したデータ構造 key に線形順序がある要素の集合 A を蓄えている A の要素を,対象順(symmetric order)に点に保存 実行可能な操作 Member( x, A ), Insert( x, A ), Delete( x, A ) Max( A ), Min( A ) Successor( x, A, y ), Predecessor( x, A, y ) Join( A1, x, A2, A ), Split( x, A, A1, A2 ) 計算量 Join 以外 : O( 木の高さ ) Join :  O(1) 木の高さは,最悪 O(n) n = |A| : 要素の個数

平衡 2 分木 Balanced Binary Tree 平衡 2 分木を用いた 2 分探索木(データ構造) h≤ log 2 n 点の個数が n のとき,高さ h が O(log n) の 2 分木 完全 2 分木(Full Binary Tree) n = 2h+1 - 1 整列 2 分木(Complete Binary Tree) 2h  n < 2h+1 平衡 2 分木を用いた 2 分探索木(データ構造) AVL 木 (Adelson, Velskii, Landis) 各点において,左右の子の高さの差が高々 1 2 色木, (splay 木) h≤ log 2 n

AVL 木 ではない木 6 2 8 7 1 3 4 3 1 2 1 -1 -1 AVL 木 2 分木 T 子が無いとき, -1 の高さとする 1 2 8 7 1 1 3 -1 -1 4 子が無いとき, -1 の高さとする 左右の子の高さの差が高々 1

平衡 2 分木 Balanced Binary Tree 平衡 2 分木を用いた 2 分探索木(データ構造) h≤ log 2 n 点の個数が n のとき,高さ h が O(log n) の 2 分木 完全 2 分木(Full Binary Tree) n = 2h+1 - 1 整列 2 分木(Complete Binary Tree) 2h  n < 2h+1 平衡 2 分木を用いた 2 分探索木(データ構造) AVL 木 (Adelson, Velskii, Landis) 各点において,左右の子の高さの差が高々 1 2 色木, (splay 木)  h≤ log 2 n

2 色木(Red-Black Tree) 各点に黒あるいは赤の色を付けた 2 分探索木 下記 3 条件を満たす. 1: 根および外点は黒 1: 根および外点は黒 2: 赤点の親は黒 3: 根から外点への経路上の黒点の個数はどれも同じ

内点,外点 2 分木 T 内点 : n 7 2 9 1 3 8 6 外点 : n+1

内点,外点 n 個の内点を持つ 2 分木は, n+1 個の外点を持つ n = 1 のとき n = n’ のとき 根は子を 1 個持つ wlg,左の子と仮定 根は左右の子を持つ ・・・ n'-1 n'

内点,外点 k + n'-k+1 = n'+1 n 個の内点 ⇒ n+1 個の外点 n = n’ のとき 根は左右の子を持つ ・・・ k-1 wlg,以下を仮定できる 左の子を根とする部分木は,k-1 個の点を持ち, 右の子を根とする部分木は,n-k 個の点を持つ ・・・ k-1 n'-k k + n'-k+1 = n'+1 k n'-k+1

2 色木(Red-Black Tree) 各点に黒あるいは赤の色を付けた 2 分探索木 下記 3 条件を満たす. 1: 根および外点は黒 2: 赤点の親は黒 3: 根から外点への経路上の黒点の個数はどれも同じ 平衡 2 分木になっている.

2 色木(Red-Black Tree) 7 2 2 9 1 3 8 8 6 6 2 分木 T 1. 根,外点は黒 2. 赤点の親は黒 3. 根から外点への経路上の黒点の個数は同じ

2 色木にできない 2 分木 2 1 9 9 7 7 10 3 3 8 6 6 2 分木 T 経路上の点数 : 3 : 6 黒は 1 個 赤が続く 1 9 9 7 7 10 経路上の点数    : 3 3 3 8 6 6    : 6 経路長の比は倍まで

2 色木(Red-Black Tree) 2 色木は平衡 2 分木 n  20 + 21 +・・・ + 2d-1 = 2d -1 log2(n+1)  d 経路上の黒点の個数は高々 d+1 経路上の赤点の個数は高々 d 経路上の点の個数は高々 2d+1 木の高さは高々 2d Full d 1 2 d d+1 ・・・  2 log2(n+1)

2 色木(Red-Black Tree) 各点に黒あるいは赤の色を付けた 2 分探索木 下記 3 条件を満たす. 1: 根および外点は黒 2: 赤点の親は黒 3: 根から外点への経路上の黒点の個数はどれも同じ 平衡 2 分木になっている. Member などの探索操作は,2 分探索木と同じ. Insert,Delete は,3 条件を満たすように要変更. Join, Split は扱えない.

2 色木 (空) 2 色木 T 1, 2, 3, 5, 4 をこの順に Insert

1 を Insert 1 1 1 Insert を行うと,外点が内点に変わる. その内点は,とりあえず赤点にする.  経路上の黒点の個数は変化しない 根は黒点なので,色を黒に変える.  経路上の黒点の個数が 1 増加

2 を Insert 1 2 2 z の親が黒点なら, 2 色木になっている z Insert を行うと,外点が内点に変わる. 経路上の黒点の 個数は変化して いないから z 2 2 Insert を行うと,外点が内点に変わる. その内点は,とりあえず赤点にする. 新たに赤点になった点を z とする

3 を Insert 1 2 3 3 w w で単回転 y z の親 x が x 赤のとき, 要修正 z 赤点に なった点 z  赤のとき,  要修正 x 2 z 赤点に なった点 z 3 3 Case B1 :  x の兄弟 y が黒  x と z が同じ側 経路上の黒点数は同じ

3 を Insert.単回転 2 色木 T 1 w y 2 3 x z

3 を Insert.単回転 2 1 3 x z w y 2 色木 T z の子へ : 黒点の個数が 1 減少

3 を Insert.単回転 2 色木 T w 1 y x 2 z 3

3 を Insert.単回転後 2 2 1 1 3 x x と w の 色変換 z w y 経路上の黒点の個数が同じになる 2 色木 T 1 増加 y へ : 黒点の個数に変化無し 経路上の黒点の個数が同じになる

5 を Insert 2 1 3 5 5 色交換 w x y z 赤になった 点 z Case A : z の親 x x の兄弟 y が赤

5 を Insert,色交換 2 2 1 1 3 3 5 色交換 w x y z Case A : x の兄弟 y が赤 根が赤なので, 経路上の 黒点の個数 に変化無し z 5 Case A :  x の兄弟 y が赤 根が赤なので,

5 を Insert.色交換後 2 色木 T 根の色を黒に戻す 2 1 3 5 根から外点への経路上の 黒点の個数が 1 増加

4 を Insert 2 1 3 5 4 4 双回転 赤になった w 点 z z の親 x w で単回転 y x Case B2 : z  x の兄弟 y が黒  x と z が反対側 z 4 4 x で単回転後

4 を Insert,双回転 2 色木 T 双回転 2 w y 3 1 5 x z 4

4 を Insert.双回転後 2 1 4 4 3 3 5 w y x z z 経路上の 黒点の 個数が 同じになる z と w の 色変換 黒点の個数に変化無し x の子へ : 黒点の個数が 1 減少 1 増加

2 色木のデータ構造 親は探索時に 覚えておく ポインタが NULL なら外点を指す Color element LeftSon RightSon 親は探索時に 覚えておく Color element LeftSon RightSon Color element LeftSon RightSon ポインタが NULL なら外点を指す

5 を Insert 2 1 8 6 9 3 7 5 5 経路上の黒点数 : 3 w x y Case A : x の兄弟 y が赤 z 色交換

5 を Insert.色交換後 2 1 8 6 6 9 3 3 7 7 5 w 双回転 x y z Case B2 : x の兄弟 y が黒  x と z が反対側 5

5 を Insert,双回転 2 色木 T w 2 x y 1 8 z 6 9 3 7 5

双回転後 6 6 2 2 8 1 3 7 9 5 経路上の黒点の個数が同じに z と w の z 色変換 x w y 2 色木 T 黒点の個数に変化無し x の子へ : 黒点の個数が 1 減少 1 増加

Insert の操作 w x y z z の親 x が黒. x が赤で,x の兄弟 y が黒 x が赤で,x の兄弟 y が赤 w x y 何もしない  x が赤で,x の兄弟 y が黒 Case B1: x と z が同じ側 w で単回転 → 色の変換 Case B2: x と z が反対側 双回転 → 色の変換 x が赤で,x の兄弟 y が赤 Case A: 色交換 w x y z w x y z (繰り返し) → Case B1 or B2   根に到達

Insert の操作 z の親 x が黒. x が赤で,x の兄弟 y が黒 x が赤で,x の兄弟 y が赤 Case B1: x と z が同じ側 Case B2: x と z が反対側 x が赤で,x の兄弟 y が赤 Case A:

Delete の操作 2 色木 T (6 を Delete) 6 2 8 or 1 3 7 9 5

Delete の操作 (5 を移動) 5 2 8 1 3 7 9 2 色木 T 実際に除去される 左の子の子孫中 点の子は高々 1 個 最大の要素 実際に除去される 点の子は高々 1 個

実際に除去される点 左右の子のどちらも外点 問題 or 内点の子と外点の子 a a 除去される点は黒. 内点の子は赤で,  その子は共に外点.

黒の内点が外点に 2 色木 T 7 2 8 z 1 3 9 除去 5 黒の内点 z が 外点に変わる z : 黒点数が 1 減少

Case B-1-a 7 2 8 8 1 3 9 9 5 v z w 2 色木 T w : z の兄弟 w の子が共に黒なら v が赤なら  完了 v を黒に  z への黒点数 1 増加 w へも!

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 B-3: w の z から近い方の子 y だけが赤 x y

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 B-3: w の z から近い方の子 y だけが赤 x y

Case B-2 b d d b b d A C E E A C v w v z w x x y z y E : 黒点数 1 増  完了 1 増 v b d v w z A C E x y d b z w z : 黒点数 1 少ない b d x y E A C v で単回転

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 x y

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 x y

Case B-3 f b d f d b f d A C G E G A C E y v z v w w y x z x y を v の色に  完了 f v w z b d A C G x y E v f d z w z : 黒点数 1 少ない b f y x G d A C E 双回転

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 双回転 → 色の変換で完了 x y

Delete の操作 v w z Case A: w が赤 x y Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 双回転 → 色の変換で完了 x y v の子孫全てで, 経路上の黒点数 1 減 : w を赤に v が新 z → Case A or B

Delete の操作 v w z x y Case A: w が赤 Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 : w を赤,v を新 z → Case A or B B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 双回転 → 色の変換で完了

Case A : w が赤 b d d b b d A C E E A C v w z w v z w を黒, v を赤に → Case B へ v は赤 Case B-1-b 以外 v b d v z A C E w d b z w z : 黒点数 1 少ない b E d A C v で単回転

Delete の操作 Case A: w が赤 Case B: w が黒 B-1 : w の子が共に黒 v で単回転 → 色の変換 → Case B (B-1-b 以外)  Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 : w を赤,v を新 z → Case A or B B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 双回転 → 色の変換で完了

Delete の操作 Case A: w が赤 Case B: w が黒 B-1 : w の子が共に黒 高々 3 回の単回転 Case A: w が赤 v で単回転 → 色の変換 → Case B (B-1-b 以外)  Case B: w が黒 B-1 : w の子が共に黒 B-1-a : v が赤 : 色の変換で完了 B-1-b : v が黒 : w を赤,v を新 z → Case A or B B-2: w の z から遠い方の子 x が赤 v で単回転 → 色の変換で完了 B-3: w の z から近い方の子 y だけが赤 双回転 → 色の変換で完了 必ず完了