PowerPoint プレゼンテーション

基本情報技術概論 (第10回)
アルゴリズム と データ構造
(ソフトウェアの基礎)
埼玉大学 理工学研究科
堀山 貴史
1
前回の復習:
データ構造

データ構造 … データをどのように記憶するか

基本的なデータ構造
 配列 (array)
A [1]
A [2]
A [3]
30
50
20
…
・ データを順番に並べる
・ 添え字でアクセスする

リスト (list)
30
50
20
・ となりの要素の位置を
ポインタとして持つ
2
前回の復習:

データ構造
その他のデータ構造
 スタック (stack)
30
50
20
・ L I FO
( Last-In First-Out )


待ち行列 (queue,キュー)
30
50
20
3
・ F I FO
( First-In First-Out )
木 (tree) 来週
3
前回の復習:
アルゴリズム
アルゴリズム
 問題を解決するための、有限ステップからなる手順
 自然言語や、流れ図(フローチャート)で示す

重要 ・ 問題を解く鍵になるアイデアを把握
・ アイデアを実現する手順を考える
1.
2.
3.
4.
5.
6.
生協に行く
棚のチョコレートを手に持つ
レジに行く
財布から代金を払う
お釣りがあれば、受け取る
チョコレートを食べる
開始
1→i
i >n
Yes
No
A(i) = K
Yes
No
i+1→i
探索成功
の処理
探索失敗
の処理
4
前回の復習:

流れ図 (フローチャート)
制御の流れを図で表したもの
基本的な記号
開始や終了
繰り返しの開始と終了
(ループ名、終了条件を
記述)
処理
参考: その他の記号
処理の流れ
条件に応じて、
次の処理を変える
(分岐条件を記述)
データの入出力
書類を印刷
ディスプレイに表示
5
情報処理技術者試験での 疑似言語
記述形式
○
説明
手続, 変数の名前, 型などの宣言
/* 文 */
・ 変数 ← 式
・ 手続 ( 引数, … )
注釈
変数に式を代入する
手続を呼び出す
処
条件式
処理1
処理2
選択処理
( if then else )
理
条件式
処理
前判定繰返し処理
( while ループ )
変数:初期値, 条件式, 増分
処理
繰返し処理
( for ループ )
6
アルゴリズム: ________________
線形探索 (linear search)

配列を先頭から順番に探索する

探索キーと同じキーが
配列の中に見つかれば
探索成功

A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
最後まで行っても
見つからなければ
探索失敗
探索キー
(探索データ)
70
7
アルゴリズム:

線形探索
(linear search)
配列を先頭から順番に探索する
開始
1→i
n: 配列の要素数
K: 探索キー
Yes
A(i) = K
No
i+1→i
Yes
i>n
No
探索失敗
の処理
100
K
70
i
A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
終了
探索成功
の処理
n
8
アルゴリズム:

番兵付き の 線形探索
ループの中の比較回数を減らす
開始
1→i
K → A(n+1)
Yes
A(i) = K
No
i+1→i
n: 配列の要素数
K: 探索キー
i>n
No
Yes
探索成功
の処理
100
K
90
i
A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
終了
探索失敗
の処理
n
9
アルゴリズムの性能評価

計算量 (時間計算量)
 大きさ n の入力に対して、
最悪の場合に必要な計算時間
例) 線形探索
A[1] の探索は簡単だから
アルゴリズムの
計算時間は一瞬?
最悪の場合、
n 個全部
調べてね
A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
10
アルゴリズムの性能評価

線形探索の
比較回数
最大 n
平均 n / 2
計算量 (時間計算量)
 大きさ n の入力に対して、
最悪の場合に必要な計算時間
 n に対する大まかな振舞いを見たいので
O (オーダ)表記をして、定数倍は無視する
例) 線形探索
・ 最悪の場合、n 個全部調べる
計算時間 … O(n)
成功
失敗
11
アルゴリズム: ________________
2分探索 (binary search)

キーがソートされた配列に対し、高速に探索できる
A[ ]
1 2
1 2
3 4 5 6 7 8 9 10 11 12 13 14 15
5 10 35 50 70 100 110 150 190 191 200 300 400
探索キー
70

探索キーと配列中央のキーを比較
同じなら
… 探索成功
探索キー < 中央のキー … 前半分を探せばよい
探索キー > 中央のキー … 後半分を探せばよい
12
アルゴリズム:
2分探索
開始
1→L
n→H
M-1→H
(binary search)
n: 配列の要素数 n
15
K: 探索キー
L + H → M (小数点以下
2
切り捨て)
K
L
M
>
H
No
A [1]
A [2]
A [3]
A [4]
A [5]
A [6]
A [7]
A(M) = K =
<
探索成功
M+1→L
の処理
終了
1
2
5
10
35
50
70
…
L>H
Yes
探索失敗
の処理
70
13
アルゴリズム:

2分探索
計算量
A[ ]
1 2
1 2
2分探索の
比較回数
(binary search)
最大 log 2 n + 1
平均 log 2 n
3 4 5 6 7 8 9 10 11 12 13 14 15
5 10 35 50 70 100 110 150 190 191 200 300 400
探索キー
70

1回調べるごとに、探索範囲は半分になる
 最悪でも、log 2 n + 1 回調べれば良い

計算量は O( log n )
14
補足説明:
1
2
4
8
16
32
64
…
…
n回
2n
2倍
2倍
2倍
2倍
2倍
2倍
2倍
2倍
log 2 n
0
1
2
3
4
5
6
回
回
回
回
回
回
回
1
2
4
8
16
32
64
…
回
回
回
回
回
回
回
と
…
0
1
2
3
4
5
6
n
2
log 2 n 回
n
2倍
2倍
2倍
2倍
2倍
2倍
2倍
2倍
15
アルゴリズムの性能評価

(比較)
計算量 (時間計算量)
Q: 図の線を
どう分類する?
50
40
30
20
10
0
10
20
30
40
n
50
16
アルゴリズムの性能評価

(比較)
計算量 (時間計算量)
 O (オーダ)表記をする
O(1) < O( log n ) < O( n ) < O( n log n ) < O( n2 ) < …
50
例)
線形探索 O( n )
2分探索 O( log n )
40 n2
n2/2
n
30
20
n/2
10
log n
0
10
20
30
40
n
50
17
18
19
この教材のご利用について




この文面は、TOKYO
TECH OCW の利用
条件を参考にしました
この教材は、以下に示す利用条件の下で、著作権者にわざわざ許諾を
求めることなく、無償で自由にご利用いただけます。講義、自主学習は
もちろん、翻訳、改変、再配布等を含めて自由にご利用ください。
非商業利用に限定

この教材は、翻訳や改変等を加えたものも含めて、著作権者の許
諾を受けずに商業目的で利用することは、許可されていません。
著作権の帰属

この教材および教材中の図の著作権は、次ページ以降に示す著
作者に帰属します。この教材、または翻訳や改変等を加えたもの
を公開される場合には、「本教材 (or 本資料) は
http://www.al.ics. saitama-u.ac.jp/horiyama/OCW/ の教材です
(or 教材を改変したものです」 との旨の著作権表示を明確に実施
してください。なお、この教材に改変等を加えたものの著作権は、
次ページ以降に示す著作者および改変等を加えた方に帰属しま
す。
同一条件での頒布・再頒布

この教材、または翻訳や改変等を加えたものを頒布・再頒布する
場合には、頒布・再頒布の形態を問わず、このページの利用条件20
この教材のご利用について

配布場所

http://www.al.ics.saitama-u.ac.jp/horiyama/OCW/

この powerpoint ファイルの著作者

堀山 貴史 2007-2009 [email protected]

改変等を加えられた場合は、お名前等を追加してください
図の著作者

p. 7, 10, 12, 14
 クリップアート : Microsoft Office Online / クリップアート

その他
 堀山 貴史

21