アルゴリズムとデータ構造勉強会 B+tree.

Slides:



Advertisements
Similar presentations
©2008 Ikuo Tahara探索 状態空間と探索木 基本的な探索アルゴリズム 横形探索と縦形探索 評価関数を利用した探索アルゴリズム 分岐限定法 山登り法 最良優先探索 A ( A* )アルゴリズム.
Advertisements

アルゴリズムイントロダクション第2章 主にソートに関して
第12回 ソート(3): シェルソート、クイックソート
第11回 整列 ~ シェルソート,クイックソート ~
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
5.チューリングマシンと計算.
5.チューリングマシンと計算.
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
アルゴリズムとデータ構造 補足資料13-4 「2分探索木の追加・削除(ダイジェスト)」
情報工学概論 (アルゴリズムとデータ構造)
データ構造とアルゴリズム 第7回 木 ~ データ構造(3)~.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 補足資料7-3 「単純選択ソートselsort.c」
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理 第6回.
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
データ構造とアルゴリズム 第6回の2 木 ~ データ構造(3)~.
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
第11回 整列 ~ シェルソート,クイックソート ~
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 構造体, 構造体とポインタの組み合わせ,.
第10回 プログラミングⅡ 第10回
二分探索木によるサーチ.
データ構造とアルゴリズム論 第8章 再帰処理 平成15年12月2日 森田 彦.
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
Cプログラミング演習 中間まとめ2.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造勉強会 第6回 スレッド木
6. リスト処理関数の設計(発展版) プログラミング論 I.
第11回 プログラミングⅡ 第11回
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2005年7月1日
データ構造と アルゴリズム 第七回 知能情報学部 新田直也.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
基本情報技術概論I (第4回) 埼玉大学 理工学研究科 堀山 貴史
B+Treeのバケットサイズ.
15.cons と種々のデータ構造.
データ構造とアルゴリズム 第11回 リスト構造(1)
基本情報技術概論(第10回) 埼玉大学 理工学研究科 堀山 貴史
AVL木.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2006年7月4日
アルゴリズムとデータ構造 2012年7月2日
5.チューリングマシンと計算.
情報基礎演習I(プログラミング) 第8回 6月8日 水曜5限 江草由佳
基本情報技術概論(第5回) 埼玉大学 理工学研究科 堀山 貴史
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2011年6月16日
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
情報工学概論 (アルゴリズムとデータ構造)
Microsoft SharePoint Online の Web サイトを カスタマイズする方法
アルゴリズムとデータ構造 2013年7月2日
4.プッシュダウンオートマトンと 文脈自由文法の等価性
2019/6/6 リストを格納する変数 配列と連想配列.
アルゴリズムとデータ構造 2013年6月20日
データ構造とアルゴリズム論 第9章 連結リスト
参考:大きい要素の処理.
アルゴリズムとデータ構造1 2005年7月12日
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Presentation transcript:

アルゴリズムとデータ構造勉強会 B+tree

B+木 多量のデータの移動を避ける方法として、B木の内部節点にレコードのキーだけを格納することができる。 これらの節点には、別の場所に保存された実際のデータレコードを指すポインタだけを格納する。 プログラムによってバケットを再配列する場合でも、レコードのキーとポインタだけを移動すればよく、レコード全体を移動する必要がなくなる。 この種のB木をB+木と呼ぶ。 B木については前回の輪講資料を参考 子節点へのポインタ キー ポインタ データ データへのポインタ データ データ キー ポインタ キー ポインタ

B+木の利点 B+木の節点に格納される要素サイズを小さくすれば、プログラムは各節点にそれだけ多くのキーを格納することが可能になる。 同じサイズの節点に対して、木の次数を上げることができ、それによって木の高さを低くすることができる。 B+木は複数のキーをレコードのセットに関連付けることが容易にできる。

B+木のプログラム 別紙参照 挿入のみ、2次のB+木 根節点の分割が起こる時点で終了 構造 Key (このプログラムではage をkeyとした) ポインタ Name (名前) Age (年齢) Address (住所) キー(age) ポインタ Name(名前) Age (年齢) Address (住所)

プログラムの動作確認(1) <初期状態> saino@bass[~]%./b+tree2-24 Q:insert node ? yes: input 1 // no: input other 3                  ROOT<22#67# 0# 0>      ________________________________________|   |   |   |   |     /        _____________________________ |  |  |  |     /       /       ___________________|   |  |     /       /        /        ________|   |       /B_1      /B_2       /B_3     /B_4     |B_5 < 9#14#20# 0> <23#45# 0# 0> <77#112# 0# 0> < 0# 0# 0# 0> < 0# 0# 0# 0> Q:print ? yes: input 1 // no: input other 1 ROOT.b[0]:Daisuke,22,Fukuoka ROOT.b[1]:Mike,67,Hawaii B_1.[0]:Wong,9,HongKong B_1.[1]:Kent,14,London B_1.[2]:Youngman,20,Tokyo B_2.[0]:Ann,23,New York B_2.[1]:Bill,45,Paris B_3.[0]:Lucky,77,Rome B_3.[1]:Oldman,112,Okinawa

プログラムの動作確認(2) 挿入するデータ <データの挿入> Q:insert node ? yes: input 1 // no: input other 1 name = Kitano age = 50 address = Cannes                 ROOT<22#67# 0# 0>       ________________________________________|   |   |  |  |        /        _____________________________|  |  |   |     /       /       ___________________|   |  |     /       /        /      ________|  |     /B_1      /B_2       /B_3     /B_4     |B_5 < 9#14#20# 0> <23#45#50# 0> <77#112# 0# 0> < 0# 0# 0# 0> < 0# 0# 0# 0> Q:print ? yes: input 1 // no: input other 1 ROOT.b[0]:Daisuke,22,Fukuoka ROOT.b[1]:Mike,67,Hawaii B_1.[0]:Wong,9,HongKong B_1.[1]:Kent,14,London B_1.[2]:Youngman,20,Tokyo B_2.[0]:Ann,23,New York B_2.[1]:Bill,45,Paris B_2.[2]:Kitano,50,Cannes B_3.[0]:Lucky,77,Rome B_3.[1]:Oldman,112,Okinawa 挿入するデータ

プログラムの動作確認(3) 挿入するデータ この時点で バケットが一杯 <バケットの分割> name = Rui age = 13 address = Vienna                    ROOT<22#67# 0# 0>     ________________________________________|   |  |  |  |      /       _____________________________|   |  |  |      /      /        ___________________|  |   |      /      /        /       ________|  |      /B_1     /B_2       /B_3     /B_4      |B_5 < 9#13#14#20> <23#45#50# 0> <77#112# 0# 0> < 0# 0# 0# 0> < 0# 0# 0# 0> Q:print ? yes: input 1 // no: input other 1 ROOT.b[0]:Daisuke,22,Fukuoka ROOT.b[1]:Mike,67,Hawaii B_1.[0]:Wong,9,HongKong B_1.[1]:Rui,13,Vienna B_1.[2]:Kent,14,London B_1.[3]:Youngman,20,Tokyo B_2.[0]:Ann,23,New York B_2.[1]:Bill,45,Paris B_2.[2]:Kitano,50,Cannes B_3.[0]:Lucky,77,Rome B_3.[1]:Oldman,112,Okinawa 挿入するデータ この時点で バケットが一杯

プログラムの動作確認(4) 挿入するデータ 中間キーを新たに加える 分割 !! <バケットの分割> name = Shinji age = 17 address = Amsterdam                    ROOT<14#22#67# 0>     ________________________________________|  |   |  |   |     /       _____________________________|  |  |   |     /       /       ___________________|  |   |        /       /       /       ________|   |     /B_1      /B_2      /B_3      /B_4     |B_5 < 9#13# 0# 0> <17#20# 0# 0> <23#45#50# 0> <77#112# 0# 0> < 0# 0# 0# 0> Q:print ? yes: input 1 // no: input other 1 ROOT.b[0]:Kent,14,London ROOT.b[1]:Daisuke,22,Fukuoka ROOT.b[2]:Mike,67,Hawaii B_1.[0]:Wong,9,HongKong B_1.[1]:Rui,13,Vienna B_2.[0]:Shinji,17,Amsterdam B_2.[1]:Youngman,20,Tokyo B_3.[0]:Ann,23,New York B_3.[1]:Bill,45,Paris B_3.[2]:Kitano,50,Cannes B_4.[0]:Lucky,77,Rome B_4.[1]:Oldman,112,Okinawa 挿入するデータ 中間キーを新たに加える 分割 !!