www.edu-s.pref.kagoshima.jp

二分探索
○探索~探し出す。見つける。
○線形探索~テーブル内のデータを,先頭から順番に調べてい
く方法。
データが並んでいなくても良い。
データが膨大な数の場合,探索時間がかかる。
○二分探索~探したいデータとテーブルの中央値とを比較して,
その前半部分を探すか,後半部分を探すかを決定していく方法。
データが並んでいなければならない。(昇順・降
順)
データが膨大な数の場合,探索時間が短い。
二分探索
○並替え(分類)については,別にて説明。
しくみ(探索の部分の要点)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
エアコン
160
パソコン
170
ポケコン
180
ワープロ
190
プリンタ
200
ハードディスク
上限・下限を決定
中央値を設定
中央値の場所と探
索値を比較
中央値の場所より
前か後ろか判断
二分探索
<処理手順>
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
エアコン
160
パソコン
170
ポケコン
180
ワープロ
190
プリンタ
200
ハードディスク
繰り返す
① 上限・下限を設定する。
下限=0:
上限=11(テーブルの要素数+1)
何故?
テーブルの最初と終わりが見つけら
れるようにするため。
② 中央値(中央の添字)を求める。
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
③ 探索したい内容(データ)と中央値の内容を比較。
一致しない場合
探索したい内容>中央値の内容 中央値→下限
探索したい内容<中央値の内容 中央値→上限
探索したい内容=中央値の内容 (探索終了)
二分探索
例
商品コードを入力し,そのコードに対応する商品名を出力する。
1
はじめ
ループ
SW=1
テーブルCODEと
MEIにデータを
記憶
(上限+下限)/2 → K
※
「160」を入力
YES
160=CODE(K)
NO
0→SW
※
※
YES
160>
CODE(K)
NO
K→上限
11→上限
1→SW
K→下限
MEI(K)を印字
0→下限
上限=下限+
1)
※
NO
YES
1→SW
“データエラー”を印字
1
ループ
おわり
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
ワープロ
190
プリンタ
200
ハードディスク
160
下
限
上
限
0
11
中
央
値
5
5
もっと下(後)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(0
+1
1)
/2
=5
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
180
ワープロ
190
プリンタ
200
ハードディスク
160
中
央
値
下
限
上
限
0
11
5
5
11
8
8
もっと上(前)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+1
1)
/2
=8
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
160
パソコン
170
ポケコン
180
180
180
ワープロ
190
プリンタ
200
ハードディスク
160
中
央
値
下
限
上
限
0
11
5
5
11
8
5
8
6
探索終了
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+8)
/2
=6
探索データがな
い場合の判断
検査値
155
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
ワープロ
190
プリンタ
200
ハードディスク
155
下
限
上
限
0
11
中
央
値
5
5
もっと下(後)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(0
+1
1)
/2
=5
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
180
ワープロ
190
プリンタ
200
ハードディスク
155
中
央
値
下
限
上
限
0
11
5
5
11
8
8
もっと上(前)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+1
1)
/2
=8
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
160
パソコン
170
ポケコン
180
180
180
ワープロ
190
プリンタ
200
ハードディスク
155
中
央
値
下
限
上
限
0
11
5
5
11
8
5
8
6
6
もっと上(前)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+8)
/2
=6
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
160
パソコン
170
ポケコン
180
180
180
ワープロ
190
プリンタ
200
ハードディスク
155
中
央
値
下
限
上
限
0
11
5
5
11
8
5
8
6
5
6
これ以上探索
は不可能だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+6)
/2
=5
計算しても一度探索した場所の指定や,無限ループの形になる
端のデータを検
索してみる
検査値
200
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
ワープロ
190
プリンタ
200
ハードディスク
200
下
限
上
限
0
11
中
央
値
5
5
もっと下(後)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(0
+1
1)
/2
=5
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
180
ワープロ
190
プリンタ
200
ハードディスク
200
中
央
値
下
限
上
限
0
11
5
5
11
8
8
もっと下(後)だ
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(5
+1
1)
/2
=8
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
(9)
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
180
180
ワープロ
190
プリンタ
200
ハードディスク
190
200
中
央
値
下
限
上
限
0
11
5
5
11
8
8
11
9
9
もっと下(後)
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(8
+11) /2
=9
トレース
検査値
(0)
(1
)
(2
)
(3
)
(4
)
(5
)(6
)
(7
)
(8
)
(9
(9)
)
(10
)
(11)
110
テレビ
120
ラジカセ
130
ビデオ
140
カメラ
150
150
エアコン
160
パソコン
170
ポケコン
180
180
180
ワープロ
190
プリンタ
190
200
200
200
中
央
値
下
限
上
限
0
11
5
5
11
8
8
11
9
9
11
10
探索終了
ハードディスク
中央値=(下限+上限)/2
(端数は小数点以下切り捨て)
(8
+11) /2
=9