二分探索 ○探索~探し出す。見つける。 ○線形探索~テーブル内のデータを,先頭から順番に調べてい く方法。 データが並んでいなくても良い。 データが膨大な数の場合,探索時間がかかる。 ○二分探索~探したいデータとテーブルの中央値とを比較して, その前半部分を探すか,後半部分を探すかを決定していく方法。 データが並んでいなければならない。(昇順・降 順) データが膨大な数の場合,探索時間が短い。 二分探索 ○並替え(分類)については,別にて説明。 しくみ(探索の部分の要点) 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
© Copyright 2024 ExpyDoc