SlideShare a Scribd company logo
アルゴリズム+データ構造
勉強会(13)
2013-05-20 アロハ)竹腰 彰成
第13回 二分探索木
二分探索木とは
• 探索=search
• 2つに分けながらsearchする木
• 値を検索するとき、その節より小さければ左へ、
大きければ右へ
• 一致する場合はその節の値
図はWikipediaより
二分探索木とB木の違い
• B木の特徴は3つ
• 根から葉への経路の長さはそれぞれ等しい
• 根は2~m個の子を持つ(ただし数が少ない時は葉になる)
• 根、葉以外の節はm/2~m個の子を持つ
• 二分探索木は
• 根から葉への経路の長さはバラバラ
• 節は0~2個の子を持つ
• その節より小さな値は左の子に、大きな値は右の子になる
• 左か右かの位置が重要=大きいか小さいかを表す
経路の長さの違い
• B木:経路の長さが同じ
• メリット:計算量が 𝑂(log 𝑛)
• デメリット:データの追加・削除時に木を大きく作り直すことになる
• 二分探索木:経路の長さがバラバラ
• メリット:データの追加・削除を楽に行える
• デメリット:計算量が最大で 𝑂(𝑛)
• 悪いことに、ソート済みの値で木を単純生成するとこうなる
子の個数の違い
• B木:最大m個
• メリット:木の大きさはコンパクトに収まる
• 木の作り直しが少なくなるので先のデメリットを和らげる
• デメリット:コーディングが複雑になる
• 二分探索木:左に小さい値1つ、右に大きい値1つ
• メリット:考え方がきわめて単純
• 不具合を起こしにくい
• 日常業務でも人の手で使っている(ログを検索するときにはソートして~~など)
• デメリット:木がすぐ成長する
• つまり末端までたどるのは大変
• 再帰は続くよどこまでも(=再帰で組むとメモリが大変なことになる)
予習:8クイーン問題を調べる
• 8クイーンは実習形式で進めます
• 8クイーンの概要を自分で調べておいてください

More Related Content

Viewers also liked (20)

アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)
noldor
 
アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)
noldor
 
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
noldor
 
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
noldor
 
とりあえずはじめるChatOps
とりあえずはじめるChatOpsとりあえずはじめるChatOps
とりあえずはじめるChatOps
正貴 小川
 
Study 20131009
Study 20131009Study 20131009
Study 20131009
fujii_t
 
OpenID 2.0 Quick Note
OpenID 2.0 Quick NoteOpenID 2.0 Quick Note
OpenID 2.0 Quick Note
Toru Yamaguchi
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
 
AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
 
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LTMackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
 
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
Masahiro Nagano
 
Bubble sort
Bubble sort Bubble sort
Bubble sort
rmsz786
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
 
Quicksort: illustrated step-by-step walk through
Quicksort: illustrated step-by-step walk throughQuicksort: illustrated step-by-step walk through
Quicksort: illustrated step-by-step walk through
Yoshi Watanabe
 
Sakura IoT Platform
Sakura IoT PlatformSakura IoT Platform
Sakura IoT Platform
Osamu Ogasahara
 
Bubblesort Algorithm
Bubblesort AlgorithmBubblesort Algorithm
Bubblesort Algorithm
Tobias Straub
 
Mergesort
MergesortMergesort
Mergesort
luzenith_g
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
 
アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)
noldor
 
アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)
noldor
 
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
noldor
 
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
noldor
 
とりあえずはじめるChatOps
とりあえずはじめるChatOpsとりあえずはじめるChatOps
とりあえずはじめるChatOps
正貴 小川
 
Study 20131009
Study 20131009Study 20131009
Study 20131009
fujii_t
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
 
AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
 
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LTMackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
 
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
Masahiro Nagano
 
Bubble sort
Bubble sort Bubble sort
Bubble sort
rmsz786
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
 
Quicksort: illustrated step-by-step walk through
Quicksort: illustrated step-by-step walk throughQuicksort: illustrated step-by-step walk through
Quicksort: illustrated step-by-step walk through
Yoshi Watanabe
 
Bubblesort Algorithm
Bubblesort AlgorithmBubblesort Algorithm
Bubblesort Algorithm
Tobias Straub
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
 

Similar to アルゴリズム+データ構造勉強会(13) (20)

アルゴリズムとデータ構造7
アルゴリズムとデータ構造7アルゴリズムとデータ構造7
アルゴリズムとデータ構造7
Kenta Hattori
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
 
インターン講義8日目「データ構造」
インターン講義8日目「データ構造」インターン講義8日目「データ構造」
インターン講義8日目「データ構造」
Hatena::Engineering
 
データを工夫して記録するデータ構造
データを工夫して記録するデータ構造データを工夫して記録するデータ構造
データを工夫して記録するデータ構造
Katsutoshi Nagaoka
 
アルゴリズムとデータ構造5
アルゴリズムとデータ構造5アルゴリズムとデータ構造5
アルゴリズムとデータ構造5
Kenta Hattori
 
アルゴリズムとデータ構造8
アルゴリズムとデータ構造8アルゴリズムとデータ構造8
アルゴリズムとデータ構造8
Kenta Hattori
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
 
b木ノススメ
b木ノススメb木ノススメ
b木ノススメ
gotoloop
 
JOIss2013
JOIss2013JOIss2013
JOIss2013
Shunya Satake
 
IA14
IA14IA14
IA14
mfumi
 
アルゴリズム+データ構造勉強会(1)
アルゴリズム+データ構造勉強会(1)アルゴリズム+データ構造勉強会(1)
アルゴリズム+データ構造勉強会(1)
noldor
 
アルゴリズムとデータ構造6
アルゴリズムとデータ構造6アルゴリズムとデータ構造6
アルゴリズムとデータ構造6
Kenta Hattori
 
Nazoki
NazokiNazoki
Nazoki
Ken Ogura
 
PFDS 5.5 Pairing heap
PFDS 5.5 Pairing heapPFDS 5.5 Pairing heap
PFDS 5.5 Pairing heap
昌平 村山
 
アルゴリズムとデータ構造12
アルゴリズムとデータ構造12アルゴリズムとデータ構造12
アルゴリズムとデータ構造12
Kenta Hattori
 
アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説
tks_uno
 
第22回アルゴリズム勉強会資料
第22回アルゴリズム勉強会資料第22回アルゴリズム勉強会資料
第22回アルゴリズム勉強会資料
Yuuki Ono
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
Kenta Hattori
 
アルゴリズムとデータ構造7
アルゴリズムとデータ構造7アルゴリズムとデータ構造7
アルゴリズムとデータ構造7
Kenta Hattori
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
 
インターン講義8日目「データ構造」
インターン講義8日目「データ構造」インターン講義8日目「データ構造」
インターン講義8日目「データ構造」
Hatena::Engineering
 
データを工夫して記録するデータ構造
データを工夫して記録するデータ構造データを工夫して記録するデータ構造
データを工夫して記録するデータ構造
Katsutoshi Nagaoka
 
アルゴリズムとデータ構造5
アルゴリズムとデータ構造5アルゴリズムとデータ構造5
アルゴリズムとデータ構造5
Kenta Hattori
 
アルゴリズムとデータ構造8
アルゴリズムとデータ構造8アルゴリズムとデータ構造8
アルゴリズムとデータ構造8
Kenta Hattori
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
 
b木ノススメ
b木ノススメb木ノススメ
b木ノススメ
gotoloop
 
IA14
IA14IA14
IA14
mfumi
 
アルゴリズム+データ構造勉強会(1)
アルゴリズム+データ構造勉強会(1)アルゴリズム+データ構造勉強会(1)
アルゴリズム+データ構造勉強会(1)
noldor
 
アルゴリズムとデータ構造6
アルゴリズムとデータ構造6アルゴリズムとデータ構造6
アルゴリズムとデータ構造6
Kenta Hattori
 
PFDS 5.5 Pairing heap
PFDS 5.5 Pairing heapPFDS 5.5 Pairing heap
PFDS 5.5 Pairing heap
昌平 村山
 
アルゴリズムとデータ構造12
アルゴリズムとデータ構造12アルゴリズムとデータ構造12
アルゴリズムとデータ構造12
Kenta Hattori
 
アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説
tks_uno
 
第22回アルゴリズム勉強会資料
第22回アルゴリズム勉強会資料第22回アルゴリズム勉強会資料
第22回アルゴリズム勉強会資料
Yuuki Ono
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
Kenta Hattori
 
Ad

アルゴリズム+データ構造勉強会(13)