データ構造とアルゴリズム論 第2章 配列(構造)を使った処理

15
デデデデデデデデデデデデデ デデデデデデデデデデデデデ デ デデ デデデ デデデ () デ デデ デデデ デデデ () デデデ デデデ デデ 17 デ 10 デ 18 デ デデ デ

Upload: rance

Post on 09-Jan-2016

47 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

データ構造とアルゴリズム論データ構造とアルゴリズム論

第2章 配列(構第2章 配列(構造)を使った処理造)を使った処理

平成 17 年 10 月 18日

森田 彦

配列(構造)とは?(復習) 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-2   Java 言語による配列の宣言

p.14 ~ 15 を熟読して下さい。 ここは前期テキスト「 4-12  配列」

( p.92 ~ 94 )で学習した内容です。

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 】へ

テストのアナウンス 11/15 に第1回目のテストを実施します。 要領は前期と同じペーパーテスト形式

です。 試験欠席の場合は、単位を取得できま

せん。→十分注意してください。 詳細は、追ってアナウンスします。 成績=2回のテストの平均点+応用課

題数