PowerPoint プレゼンテーション

基本情報技術概論 (第5回)
中間試験
12/2 (水) 5,6限
12/9 (水)
教室未定
アルゴリズム と データ構造
埼玉大学 理工学研究科
堀山 貴史
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
No
A(i) = K
Yes
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
アルゴリズムの性能評価

計算量 (時間計算量)
 大きさ n の入力に対して、
最悪の場合に必要な計算時間
例) 線形探索
A[1] の探索は簡単だから
アルゴリズムの
計算時間は一瞬?
最悪の場合、
n 個全部
調べてね
A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
9
アルゴリズムの性能評価

計算量 (時間計算量)
 大きさ n の入力に対して、
最悪の場合に必要な計算時間
 n に対する大まかな振舞いを見たいので
O (オーダ)表記をして、定数倍は無視する
例) 線形探索
・ 最悪の場合、n 個全部調べる
・ 1個調べるには、3つの処理
計算時間 = 3 n … O(n)
10
アルゴリズム: ________________
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

探索キーと配列中央のキーを比較
同じなら
… 探索成功
探索キー < 中央のキー … 前半分を探せばよい
探索キー > 中央のキー … 後半分を探せばよい
11
アルゴリズム:
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
12
アルゴリズム:

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

1回調べるごとに、探索範囲は半分になる
 最悪でも、log 2 n + 1 回調べれば良い

計算量は O( log n )
13
補足説明:
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倍
14
アルゴリズムの性能評価

(比較)
計算量 (時間計算量)
 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
15
アルゴリズム: ________________
バブルソート (隣接交換法)

隣り合うデータを見比べて、大小関係が逆なら交換
小 大
小
が
バ
ラ
大 バ
ラ
20
30
5
10
1
20
30
5
見比べて 1
交換
10
1
20
30
5
10
1
20
5
30
10
20
30
1
5
10
1 確定
20
バ
30
ラ
バ
5
ラ
10
20
1
30
5
10
1
5 確定
20
バ
ラ
30
バ
10
ラ
…
16
アルゴリズム:

n個
バブルソート
(隣接交換法)
計算量
1
20
30
5
10
確定
1
5
20
30
10
1
確定 5
10
20
30
1個目を確定させるのに 2個目
比較が n – 1 回
n–2回
確定
…
1
5
10
20
30
3個目
… n - 1 個目
n–3回 … 1回
全部で O( n2 )
17
練習:

ソート
配列 A[ i ] ( i = 1, 2, ..., n ) を、次のアルゴリズムにより
整列(ソート)する。行 2 ~ 3 の処理が初めて終了した時、
必ず実現されている配列の状態はどれか。 (H19年度 春)
1. i を 1 から n – 1 まで 1 ずつ増やしながら
行 2 ~ 3 を繰り返す
2. j を n から i + 1 まで 1 ずつ減らしながら
行 3 を繰り返す
3. A[ j ] < A[ j – 1 ] ならば、A[ j ] と A[ j – 1 ] を交換する
ア. A[ 1 ] が最小値になる
ウ. A[ n ] が最小値になる
イ. A[ 1 ] が最大値になる
エ. A[ n ] が最大値になる
18
アルゴリズム:

マージソート
ソートされた2つの列
→ 1つにマージ(併合)するのは簡単
(各列の先頭を見比べながら、小さい方を取っていく)
5 20 25 50

(併合ソート)
1 10 30 40
1回のマージの実行時間は、要素数に比例
19
アルゴリズム:
マージソート
(併合ソート)
5 25 50 20 30 40 10 1
5 25 50 20
5 25
5
25
5 25
30 40 10 1
50 20
50
20
20 50
30 40
30
40
30 40
分割
10 1
10
1
1 10
マージ
log n 段
1 段に O( n ) 時間 → 全部で O( n log n ) 時間
21
アルゴリズム:

番兵付き の 線形探索
ループの中の比較回数を減らす
開始
1→i
K → A(n+1)
Yes
A(i) = K
No
i+1→i
n: 配列の要素数
K: 探索キー
i>n
No
Yes
探索成功
の処理
100
K
70
i
A [1]
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
終了
探索失敗
の処理
n
22
アルゴリズム:

線形探索
(linear search)
配列を先頭から順番に探索する
開始
n: 配列の要素数
K: 探索キー
1→i
i>n
No
n
100
K
70
i
Yes
Yes
A(i) = K
No
i+1→i
探索成功
の処理
30
A [2]
50
A [3]
20
A [4]
70
A [5]
10
…
終了
探索失敗
の処理
A [1]
23
24
25
この教材のご利用について




この文面は、TOKYO
TECH OCW の利用
条件を参考にしました
この教材は、以下に示す利用条件の下で、著作権者にわざわざ許諾を
求めることなく、無償で自由にご利用いただけます。講義、自主学習は
もちろん、翻訳、改変、再配布等を含めて自由にご利用ください。
非商業利用に限定

この教材は、翻訳や改変等を加えたものも含めて、著作権者の許
諾を受けずに商業目的で利用することは、許可されていません。
著作権の帰属

この教材および教材中の図の著作権は、次ページ以降に示す著
作者に帰属します。この教材、または翻訳や改変等を加えたもの
を公開される場合には、「本教材 (or 本資料) は
http://www.al.ics. saitama-u.ac.jp/horiyama/OCW/ の教材です
(or 教材を改変したものです」 との旨の著作権表示を明確に実施
してください。なお、この教材に改変等を加えたものの著作権は、
次ページ以降に示す著作者および改変等を加えた方に帰属しま
す。
同一条件での頒布・再頒布

この教材、または翻訳や改変等を加えたものを頒布・再頒布する
場合には、頒布・再頒布の形態を問わず、このページの利用条件26
この教材のご利用について

配布場所

http://www.al.ics.saitama-u.ac.jp/horiyama/OCW/

この powerpoint ファイルの著作者

堀山 貴史 2007-2010 [email protected]

改変等を加えられた場合は、お名前等を追加してください
図の著作者

p. 7, 9, 11, 13, 18
 クリップアート : Microsoft Office Online / クリップアート

その他
 堀山 貴史

27