100 likes | 223 Views
-プログラミング-. 二分探索. 佐賀商業高等学校. シンデレラを探せ!. シンデレラが忘れていった ガラスの靴. ×. ×. ×. ×. ×. ×. シンデレラ候補の足. この靴に合う足のサイズは、. 線形探索 は、 順番に 探していく方法なので、候補者が多くなると、探索にかなり時間がかかる可能性がある。. 線形探索 で、探してみよう。. この サイズの人. ×. ○. この人が シンデレラ. シンデレラを探せ!. シンデレラが忘れていった ガラスの靴. この靴に合う足のサイズは、. 二分探索 で探してみよう。 その前に、.
E N D
-プログラミング- 二分探索 佐賀商業高等学校
シンデレラを探せ! シンデレラが忘れていった ガラスの靴 × × × × × × シンデレラ候補の足 この靴に合う足のサイズは、 線形探索は、順番に探していく方法なので、候補者が多くなると、探索にかなり時間がかかる可能性がある。 線形探索で、探してみよう。 この サイズの人 × ○ この人が シンデレラ
シンデレラを探せ! シンデレラが忘れていった ガラスの靴 この靴に合う足のサイズは、 二分探索で探してみよう。 その前に、 小さい順に並べー!! シンデレラ候補の足
シンデレラを探せ! 真ん中の人と比べると、 シンデレラが脱ぎ忘れていった ガラスの靴 この靴に合う足のサイズは、 二分探索で探してみよう。 小さい順に並べー!! > 真ん中の人が 大きいということは 1.当然、真ん中の人はシンデレラではない。 2.真ん中の人より大きい人たちも シンデレラではない。 × 一気に候補者が減った!! まず、真ん中の人を探す
シンデレラを探せ! シンデレラが脱ぎ忘れていった ガラスの靴 この靴に合う足のサイズは、 二分探索で探してみよう。 真ん中の人と比べると、 < 真ん中の人が 小さいということは 1.当然、真ん中の人はシンデレラではない。 2.真ん中の人より小さい人たちも シンデレラではない。 × × × 残った候補者から、真ん中の人を探す
シンデレラを探せ! 真ん中の人と比べると、 シンデレラが脱ぎ忘れていった ガラスの靴 この靴に合う足のサイズは、 二分探索で探してみよう。 二分探索は、候補者を半分ずつ一気に減らすことができるので、高速な探索ができる。 ただし、並べ替えが行われているのことが前提。 この人が シンデレラ = × × × 残った候補者から、真ん中の人を探す
二分探索 入出力例 (例題)商品コードを入力し、そのコードに対応する商品名を出力するプログラムを作成せよ。 <処理条件> 1.商品コードを画面より入力し、ICOに保存する。 2.商品コードはテーブルCODEに、商品名はテーブルMEIにあらかじめ記憶されている。 3.テーブルは商品コードの昇順に並んでいる。 4.999が入力されたときに処理を終了する。 5.テーブルにない商品コードが入力された場合は画面に"エラー”と表示する。 025 055 030 エラー MEI 999(終了) CODE カメラ クリーナー
二分探索 SWは探索が終わったことを知らせる役割 印字 ループ2 ループ1 候補 候補 KAの右隣からJOの左隣までが候補 はじめ SW ループ2 SW = 1 0 1 (例題)商品コードを入力し、そのコードに対応する商品名を出力するプログラムを作成せよ。 ICO 下限と上限を足して2で割り、 真ん中を指定 (KA+JO)/2 →TYU <処理条件> 1.商品コードを画面より入力し、ICOに保存する。 2.商品コードはテーブルCODEに、商品名はテーブルMEIにあらかじめ記憶されている。 3.テーブルは商品コードの昇順に並んでいる。 4.999が入力されたときに処理を終了する。 5.テーブルにない商品コードが入力された場合は画面に"エラー”と表示する。 ループ1 ICO = 999 YES ICO=CODE(TYU) NO 0 → SW MEI(TYU) 下限の初期値はいつも0 YES ICO>CODE(TYU) NO 0 → KA 1 → SW 上限の初期値はテーブルの数+1 TYU→JO TYU→KA MEI 11 → JO YES NO “エラー” ICO 025 の場合 > = CODE < 1 → SW ↑ KA ↑ TYU ↑ JO ICO ↑ JO ↑ KA ↑ TYU おわり
二分探索 ループ1 ループ2 はじめ SW ループ2 SW = 1 0 1 (例題)商品コードを入力し、そのコードに対応する商品名を出力するプログラムを作成せよ。 ICO (KA+JO)/2 →TYU <処理条件> 1.商品コードを画面より入力し、ICOに保存する。 2.商品コードはテーブルCODEに、商品名はテーブルMEIにあらかじめ記憶されている。 3.テーブルは商品コードの昇順に並んでいる。 4.999が入力されたときに処理を終了する。 5.テーブルにない商品コードが入力された場合は画面に"エラー”と表示する。 ループ1 ICO = 999 YES ICO=CODE(TYU) NO 0 → SW MEI(TYU) YES ICO>CODE(TYU) NO 0 → KA 1 → SW TYU→JO TYU→KA MEI 11 → JO YES JO = KA+1 NO “エラー” エラー例 KAとJOが隣合うという意味。 候補が無くなるので、該当コードは存在しなかった。 ICO 030 の場合 > > < CODE < 1 → SW ↑ KA ↑ TYU ↑ JO 候補が 無くなった!! ICO おわり
二分探索 ループ1 ループ2 はじめ SW (例題)商品コードを入力し、そのコードに対応する商品名を出力するプログラムを作成せよ。 ループ2 SW = 1 ICO <処理条件> 1.商品コードを画面より入力し、ICOに保存する。 2.商品コードはテーブルCODEに、商品名はテーブルMEIにあらかじめ記憶されている。 3.テーブルは商品コードの昇順に並んでいる。 4.999が入力されたときに処理を終了する。 5.テーブルにない商品コードが入力された場合は画面に"エラー”と表示する。 ループ1 ICO = 999 YES ICO=CODE( ) NO 0 → SW YES ICO>CODE( ) MEI NO 1 → SW ICO YES の場合 CODE NO “エラー” 1 → SW ICO の場合 CODE ICO ↑ JO ↑ KA ↑ TYU おわり