データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
DESCRIPTION
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理. 平成 17 年 10 月 18 日 森田 彦. 配列(構造)とは?(復習). A[1] , A[2] ,・・・,のように、カッコ内の数字(添え字)で変数の値を指定できるデータ構造 例 1,5,3,9,7 を配列変数に保存. 大きさが「 5 」の配列変数 A を 1 個 用意。. A. [1]. [2]. [3]. [4]. [5]. ※ 一般の変数の場合. 5 個 の変数を用意する。. 1. 5. 3. 9. 7. A1. A2. A3. A4. A5. - PowerPoint PPT PresentationTRANSCRIPT
配列(構造)とは?(復習) A[1] , A[2] ,・・・,のように、カッコ内の数字(添え
字)で変数の値を指定できるデータ構造 例 1,5,3,9,7 を配列変数に保存
1 5 3 9 7
1 5 3 9 7 大きさが「5」の配列変数 A を 1個用意。
A[1] [2] [3] [4] [5]
※ 一般の変数の場合
5個の変数を用意する。A1 A2 A3 A4 A5
本章(本日)の学習のねらい
① 配列を使った(典型的な)処理を学習する。
② 処理内容(アルゴリズム)に応じて配列を利用できるようになる。
注意:配列を理解できなければ、次回以降の講義内容を理解できません。
2-1 配列の利点 例 5 個の数値を順に表示させる。
開始
終了
A1 を表示
A2 を表示
A3 を表示
A4 を表示
A5 を表示
開始
終了
i← 1
A[i] を表示
i 5≦Yes
No
< 5 個の変数>
<1個の配列変数>
繰り返し処理の場合 → 配列を利用すると便利!
i≦100
i←i+1
配列(利用)の利点
拡張が容易。上の例の場合、データ数が 100 になっても「 5→100 」に変えるだけで良い。
処理内容をコンパクトに記述できるので、見通しが良くなる。→アルゴリズムの構造がはっきりとする。
2-3 配列の応用-最大・最小
4 つの正の整数が変数 A1 ~ A4 に入っている。この中の最大値を求める。
1 5 3 8
例: 1,5,3,8 の場合
A1 A2 A3 A4 MAX
1. A1 と MAX の比較
01 01
2. A2 と MAX の比較1 5 55
3. A3 と MAX の比較
33
4. A4 と MAX の比較
8 88
終了! MAX に最大値が入っている。
勝ち抜き戦方式
流れ図で表すと・・・
開始
終了
MAX←0
MAX の表示
A1 > MAX
Yes
No
MAX←A1
A2 > MAX
Yes
No
MAX←A2
A3 > MAX
Yes
No
MAX←A3
A4 > MAX
Yes
No
MAX←A4
【基礎課題 2-1 】
配列 A[i](i=1~ 4)を用いて表すと・・・
ループ i:1,1,4
ループ
MAX←0
YesMAX←A[i]
MAX の表示
開始
終了
No
拡張が容易:整数の数が増えてもループの終値を変更するだけで良い。記述がコンパクトに:繰り返し処理をループ内に一つだけ記述するだけで済む。
理解度チェック→【基礎課題 2-2 】、【基礎課題 2-3 】、【基礎課題 2-4 】
プリントp.17
プログラムの作成
2-4 配列要素の挿入・削除 例:配列A[1]~A[N]にデータ a1~ aNが入っている。→配列要素のm番目にデータXを挿入する。
a1 a2 ・・・
am am+1 ・・・
aN
X
A[1] A[2] A[m] A[m+1] A[N]
・・・am+1am aN・・・a2a1
A[1] A[2] A[m] A[m+1] A[N+1]A[m+2]
・・・am+1am aNX・・・a2a1
A[1] A[2] A[m] A[m+1] A[N+1]A[m+2]
挿入完了!
am 以降を右にずらす
流れ図で表すと・・・
ループ i:N,-1,m
ループ
A[i+1] ←A[i]
開始
終了
mの入力
A[m] ←X
A[N]→A[N+1]
A[N-1]→A[N]・・・
A[m]→A[m+1]
A[m]→A[m+1] から始めると、どうなるか?
【基礎課題 2-5 】( p.24 )
X・・・am+1am aN
・・・a2a1
A[1] A[2] A[m] A[m+1] A[N+1]A[m+2]
・・・am+1 aNam・・・a2a1
A[1] A[2] A[m] A[m+1] A[N]
右にずらす。
【基礎課題 2-5 】 具体例で考えると・・・
A[1]
1 5 3 9 7A[2] A[3] A[4] A[5]
A[1]
1 5 3 9 7A[2] A[3] A[4] A[5]
2A[6]
A[4] に2を挿入する。
A[1]
1 5 3 9 7A[2] A[3] A[4] A[5] A[6]
スタート
A[1]
1 5 3 9 9A[2] A[3] A[4] A[5] A[6]
A[4]→A[5]
A[1]
1 5 3 9 9A[2] A[3] A[4] A[5]
9A[6]
A[5]→A[6]
A[1]
1 5 3 2 9A[2] A[3] A[4] A[5]
9A[6]
A[4] に2を代入
2-5 添え字の参照 例:配列 Data[1]~Data[N]にデータ(整数)が入っている。この中で、偶数および奇数の個数を数える。
ループ i:1,1,N
ループ
Y ←Data[i] % 2
Gusu←0
Kisu←0
Y=0
Gusu←Gusu+1 Kisu←Kisu+1
開始
終了
Yes
No
Kosu[1] :偶数の個数Kosu[2] :奇数の個数
を導入すると・・・
ループ i:1,1,N
ループ
Y ←Data[i] % 2
Kosu[i]←0
Kosu[ ]←Kosu[ ]+1
開始
終了
初期化ループ i:1,1,2
初期化ループ
Kosu[Y+1]←Kosu[Y+1]+1
Kosu[ ]内には、何が入る?Y=0 : Kosu[1]←Kosu[1]+1Y=1 : Kosu[2]←Kosu[2]+1
となることに注目すると・・・
選択構造が不要になった!
データ構造の変更→アルゴリズムの変更!
p.28 ~ p.29 を熟読して【基礎課題 2-7 】へ