データ構造とアルゴリズム論 第6章 探索のアルゴ リズム 平成27年6月19日 森田 彦 理解度チェック1(問題1) 空欄①~③には以下のどの順で数字が並びます か?適切な並びを選択して下さい。 1.4 4.3 3 8 8 4 2. 4 5. 8 8 3 3 4 3. 3 4 8 理解度チェック1 解答 空欄①~③に入る適切な並びは? 1.4 3 8 4.3 8 4 2. 4 8 3 5. 8 3 4 3. 3 4 8 A 0 1 2 3 4 3 8 1 A[1]とA[2]を比較し、A[1]<A[2] なので交換する。 ① 4 ② 8 ③ 3 1 理解度チェック2(問題2) 空欄①~⑤には以下のどの順で数字が並びます か?適切な並びを選択して下さい。 1.12 2.12 3.12 4.12 10 10 10 10 7 7 9 9 5 9 5 7 9 5 7 9 理解度チェック2 解答 空欄①~⑤に入る適切な並びは? 1.12 10 7 5 9 3.12 10 9 5 7 2. 12 10 7 9 5 4. 12 10 9 7 9 A 0 1 2 10 12 7 3 5 4 9 12 12 10 7 5 9 i=0 10 i=1 12 10 7 5 9 i=2 12 10 79 5 79 理解度チェック3(問題3) 空欄①に入る最も適切な数値は次のいずれです か? 1.2 2. 3 3.4 4.5 5. 6 理解度チェック3 解答 空欄①に入る最も適切な数値は次のいずれです か? 1.2 2. 3 3.4 4.5 5. 6 iの初期値は、整列済み配列の末端の 要素番号。 今の場合、A[3]までが整列済み。 したがって、答は3。 探索とは? あるデータ群から、目的のデータと合致す るものを探し出す、という処理。→検索と も言う。 Webページの検索機能の強化→現在急速 に発展 本章では、最も基本的な探索アルゴリズム を学習。 本章(本日)の学習のねらい ① 基本的な探索アルゴリズムを学習し、そ の処理の流れを理解する。 → 線形探索、2分探索 ② 探索アルゴリズムの効率について考察 する。 ③ 探索アルゴリズムを実際のプログラムに 応用する。 6-1 線形探索 端から順番に探索する方法 例:カードの中から数字の3を探す。 5 1 3 3を発見! 流れ図で表すと・・・ → p.98参照 開始 <線形探索のアルゴリズム> A[1]~A[n]にデータ保管済み Noの入力 探したい数字を入力 データの終端のチェック i←1 毎回必要? i≦n No Yes A[i] =No Yes ’ありませんでした。’ No i ← i+1 i,’番目にありました。’ 次をめくる 終了 最大(2n+1)回の比較が必要 → 改良の余地は? → 番兵法へ(p.99) <番兵法のアルゴリズム> 開始 A[1]~A[n]にデータ保管 Noの入力 i←1 A[n+1] ← No データ終端を見分ける番兵の用意 データの終端のチェック A[i] =No No i ← i+1 Yes 最後の1回だけ! i≦n No Yes ’ありませんでした。’ i,’番目にありました。’ 終了 最大比較回数が減った! 【基礎課題6-1】(p.100) データ数がn個の時の、最大比較回数 (データが見つからなかった場合の比較 回数)は? 線形探索法では、(2n+1)回 番兵法では n+2 回? (n+1)+1 流れ図の確認→【基礎課題6-2】(ループ端記号の場合) 【基礎課題6-3】(A[0]~A[n-1]の場合) 線形探索の(練習)プログラム→【基礎課題6-4】(p.103) 6-2 2分探索 線形探索では、データ数に比例して(デー タ照合のための)比較回数が増大。 データ数が10倍→計算時間も10倍 → 大きなデータ数では、効率が悪い! もっと効率の良い方法は? 2分探索法 例:数字「30」の書かれたカードを探す。 ※最初に昇順にソートしておく。 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 1 3 7 12 13 14 20 22 30 41 ① ② 「30」と真ん中のA[5]を比較 ③ 「30」と真ん中のA[8]を比較 「30」とA[9]を比較 1 3 7 12 13 14 20 22 30 41 「30」がA[9]にあることを発見!→ 探索範囲がA[9]~A[10]に絞られる。 探索範囲がA[6]~A[10]に絞られる。 終了! データ数が2倍になっても比較回数は1回増えるだけ! → 【基礎課題6-5】で確認 流れ図の確認→p.107 プログラムは【基礎課題6-6】で作成 6-3 アルゴリズムの効率 2分探索法は線形探索法(番兵法)より効率 が良い。 p.110をよく読んで下さい。 【基礎課題6-5】をきちんとやっておくことが必要。 6-4 応用課題 線形探索の応用→【応用課題6-A】 2分探索の応用→【応用課題6-B】 【応用課題6-B】のプログラムを作成する 事ができれば、本章の理解度はOKです。 今後の予定 6/26 7/ 3 7/10 7/17 第7章 再帰処理 第8章 連結リスト 第9章 木構造 第10章 スタックとキュー 7/24 第2回テスト & 課題最終チェック 学習に当たって これまでの基礎課題を全て終了した学生 は【応用課題6-A】および【応用課題6-B】 のチェックを終了すれば演習を終えても 結構です。
© Copyright 2024 ExpyDoc