データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏 2007.12.13.

Slides:



Advertisements
Similar presentations
コンピュータプラクティ スⅠ 比較実験 水野嘉明. 本日の予定 計算量について 「比較実験」  パラメータを変化させての比較 ⇒ 実験1  二つのプログラムの比較 ⇒ 実験2  実験レポート R3として提出 2.
Advertisements

7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
離散システム特論 整列(sorting)アルゴリズム 2.
アルゴリズムイントロダクション第2章 主にソートに関して
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
第12回 ソート(3): シェルソート、クイックソート
2分探索.
プログラミング言語としてのR 情報知能学科 白井 英俊.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
第11回 整列 ~ シェルソート,クイックソート ~
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
4-3:高度なソートアルゴリズム① (分割統治法にもとづくソート)
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
アルゴリズムとデータ構造 第6回演習解答 2015/11/18実施 アルゴリズムとデータ構造 2015.
情報知能学科「アルゴリズムとデータ構造」
C言語 配列 2016年 吉田研究室.
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
データ構造とアルゴリズム論 第7章 探索のアルゴリズム
第11回 整列 ~ シェルソート,クイックソート ~
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
二分探索木によるサーチ.
第7回 条件による繰り返し.
データ構造とアルゴリズム論 第8章 再帰処理 平成15年12月2日 森田 彦.
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
ハッシュテーブル.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
Cプログラミング演習 中間まとめ2.
第10回関数 Ⅱ (ローカル変数とスコープ).
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
アルゴリズムとデータ構造1 2006年6月16日
アルゴリズムとデータ構造1 2005年7月15日
第7回 条件による繰り返し.
情報とコンピュータ 静岡大学工学部 安藤和敏
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング 4 整列アルゴリズム.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラミング 4 探索と計算量.
情報とコンピュータ 静岡大学工学部 安藤和敏
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミング 4 木構造とヒープ.
アルゴリズムとデータ構造1 2006年7月11日
計算機プログラミングI 第6回 2002年11月14日(木) アルゴリズムと計算量 第1回課題の説明 平方根を計算するアルゴリズム 計算量
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
5.サーチ 5-1.線形探索 5-2.2分探索 5-3.ハッシュ.
データ構造とアルゴリズム (第3回) 静岡大学工学部 安藤和敏
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
参考:大きい要素の処理.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏 2007.12.13

第4章データの探索 4.1 探索の定義と簡単な探索アルゴリズム 4.2 2分探索法 4.3 ハッシュ法

第4章データの探索 4.1 探索の定義と簡単な探索アルゴリズム 4.2 2分探索法 4.3 ハッシュ法

定義4.1 (探索) 探索とは,入力として n 個のデータ d0, d1, ... , dn-1 と値 x が与えられたときに,データ中から x = di となる di をみつける操作である. 探索する値がデータの中に存在しないときは, “データ中に存在しない”という出力を行う.

日常生活における探索の例 辞書 n 個のデータ d0, d1, ... , dn-1 :辞書に載っているすべての単語 探索する値 x :調べたい単語 インターネット・オークション n 個のデータ d0, d1, ... , dn-1 :オークションに出品されているすべての商品名 探索する値 x :欲しい物の商品名

簡単な探索アルゴリズム 以降では,与えられる n 個のデータ d0, d1, ... , dn-1 ,および,探索する値 x は,すべて正の整数であると仮定する.

アルゴリズム4.1 (線形探索) 入力:n個のデータを格納する配列Dと探索する値 x i = 0; while (i < n) { if (x == D[i]) { D[i] を出力してアルゴリズムを終了; } else { i = i + 1; } “xは存在しない”と出力;

アルゴリズム4.1の実行例 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] D 17 39 1 9 5 24 2 11 23 6 13 29 28 20 15 33 23

アルゴリズム4.1の時間計算量 最良時間計算量は O(1) 最悪時間計算量は O(n) 平均時間計算量は O(n) [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] D 17 39 1 9 5 24 2 11 23 6 13 29 28 20 15 33 最良時間計算量は O(1) 最悪時間計算量は O(n) 平均時間計算量は O(n)

第4章データの探索 4.1 探索の定義と簡単な探索アルゴリズム 4.2 2分探索法 4.3 ハッシュ法

2分探索法 入力データが昇順に(小さい順)に,配列D に格納 されていると仮定する: D[0] < D[1] < D[2] < ... < D[n-1].

2分探索法(1) 探索する値 x と配列の中央にあるデータと比較する. xと比較する D [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 探索する値 x と配列の中央にあるデータと比較する.

2分探索法(2) 中央のデータと x が等しい場合,そのデータを出力して 探索を終了する. D[7] == x の場合 D [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 中央のデータと x が等しい場合,そのデータを出力して 探索を終了する.

2分探索法(2) 中央のデータが x より小さい場合,x は中央のデータより左側にはないので,探索範囲をD[8]~D[15]に限定できる. D[7] < x の場合 D [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 中央のデータが x より小さい場合,x は中央のデータより左側にはないので,探索範囲をD[8]~D[15]に限定できる.

2分探索法(3) 中央のデータが x より大きい場合,x は中央のデータより右側にはないので,探索範囲をD[0]~D[6]に限定できる. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 中央のデータが x より大きい場合,x は中央のデータより右側にはないので,探索範囲をD[0]~D[6]に限定できる.

2分探索法の実行例(x=23) D[7] < 23 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

2分探索法の実行例(x=23) 23 < D[11] D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

2分探索法の実行例(x=23) D[9] < 23 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

2分探索法の実行例(x=23) D[9] == 23 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

2分探索法の実現(アルゴリズム4.2) 入力: n個の昇順データを格納する配列 D と探索する値 x left = 0; right = n -1; mid = (left + right)/2; while (left < right) { if (D[mid] == x) { D[mid]を出力しアルゴリズムを終了; } else if (D[mid] < x) { left = mid + 1; } else { right = mid -1; } mid = (left + right) /2; } if (D[mid] == x) { D[mid] を出力; } else { “x は存在しない”と出力; }

アルゴリズム1.3の動き 1回目 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 2回目 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 3回目 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39 4回目 D 1 2 5 6 9 11 13 15 17 20 23 24 28 29 33 39

2分探索法の時間計算量 調べる配列の大きさは, whileの繰り返しごとに,半分以下になる.したがって,k 回目のwhileの繰り返しを実行したときに,配列の大きさは 以下になる.

2分探索法の時間計算量(続き) したがって,アルゴリズムが終了するまでのwhile文の繰返し回数 k は を満たす. 上式を書き換えると,      であるから, を得る. したがって,最悪時間計算量は O(log n) である.

第4章データの探索 4.1 探索の定義と簡単な探索アルゴリズム 4.2 2分探索法 4.3 ハッシュ法

ハッシュ法のアイデア データを格納するおおまかな場所を,そのデータがもつ情報から決定する. 部屋番号----> 部屋番号の左端の数字 403だから4階だな データを格納するおおまかな場所を,そのデータがもつ情報から決定する. 部屋番号----> 部屋番号の左端の数字

ハッシュ関数 データ x から,そのデータを格納する大まかな場所を決定する関数をハッシュ関数呼んで,hash(x) と表す. 例) x ----> hash(x) = (x の左端の数字)

データを格納するための配列 H データを格納する場所として,配列Hを準備する. ハッシュ法で用いる配列のサイズは格納するデータのサイズ n の 1.5~2倍とするのが一般的である. ここでは,Hのサイズは,1.5nとしておく.

ハッシュ法によるデータの格納の例 データの集合 {17, 39, 1, 9, 5,24, 2, 11, 23, 6, 13, 29, 28, 20, 15, 33} を考える.(n=16) データを格納するための配列 H のサイズは 16×1.5 =24 hash(x) = (x を 24で割った余り)= x%24 H [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]

アルゴリズム4.3 (ハッシュ法によるデータの格納) 入力:サイズ m のH,および,n個のデータを格納する配列D for (i=0; i<n; i = i+1) { k = hash(D[i]); while (H[k]にデータが格納されている) { k = (k+1)を m で割った余り;   } H[k] = D[i]; }

アルゴリズム4.4 (ハッシュ法による探索) 入力:アルゴリズム4.3によりデータの格納された配列Hと探索する値 x k = hash(x); while (H[k]にデータが格納されている) { if (H[k] == x) { H[k]を出力してアルゴリズムを終了; } k=((k+1)をmで割ったあまり; “xは存在しない”と出力;

宿題 第4章の演習問題の全て.(提出しなくてもよい.巻末の解答例を見て自己採点せよ.)

お知らせ http://coconut.sys.eng.shizuoka.ac.jp/algo/07/ 2007年12月20日(木)のこの時間帯に中間試験を行う. 詳細はWebページ http://coconut.sys.eng.shizuoka.ac.jp/algo/07/ に掲載予定です.