180 likes | 278 Views
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理. 平成 26 年 4 月 25 日 森田 彦. 基礎課題提出状況( 4/18 現在). 全課題を提出している人 : 71.4%. 応用課題提出状況( 4/18 現在). 全課題提出 : 71.4%. 配列(構造)とは?(復習). A[1] , A[2] ,・・・,のように、カッコ内の数字(添え字)で変数の値を指定できるデータ構造 例 1,5,3,9,7 を配列変数に保存. 大きさが「 5 」の配列変数 A を 1 個 用意。. A. [1]. [2]. [3]. [4]. [5].
E N D
データ構造とアルゴリズム論第2章 配列(構造)を使った処理データ構造とアルゴリズム論第2章 配列(構造)を使った処理 平成26年4月25日 森田 彦
基礎課題提出状況(4/18現在) 全課題を提出している人:71.4%
応用課題提出状況(4/18現在) 全課題提出:71.4%
配列(構造)とは?(復習) • 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
本章(本日)の学習のねらい • 配列を使った(典型的な)処理を学習する。 • 処理内容(アルゴリズム)に応じて配列を利用できるようになる。 注意:配列を理解できなければ、次回以降の講義内容を理解できません。
今週の課題提出率が重要 今週の課題提出率が成績に大きく影響!
2-1 配列の利点 • 例5個の数値を順に表示させる。 <5個の変数> <1個の配列変数> 開始 開始 A1を表示 i←1 A2を表示 No i≦5 i≦100 A3を表示 Yes A[i]を表示 A4を表示 終了 i←i+1 A5を表示 繰り返し処理の場合 → 配列を利用すると便利! 終了
配列(利用)の利点 • 拡張が容易。上の例の場合、データ数が100になっても「5→100」に変えるだけで良い。 • 処理内容をコンパクトに記述できるので、見通しが良くなる。→アルゴリズムの構造がはっきりとする。
2-2Java言語による配列の宣言 • p.14~15を熟読して下さい。 • ここは「プログラミング」テキスト「4-12 配列」(p.97~100、2012年度版:p.95~98)で学習した内容です。 配列の添え字が0から始まる事に注意! int[] A=newint[10]; と配列Aを宣言した場合・・・ A[0], A[1], A[2], ・・・, A[9]が確保される。
2-3 配列の応用-最大・最小 • 4つの正の整数が変数A1~A4に入っている。この中の最大値を求める。 例:1,5,3,8の場合 2.A2とMAXの比較 3.A3とMAXの比較 終了!MAXに最大値が入っている。 1.A1とMAXの比較 4.A4とMAXの比較 1 1 1 5 5 5 3 3 3 8 8 8 8 0 1 0 5 A1 A2 A3 A4 MAX 勝ち抜き戦方式
流れ図で表すと・・・ 開始 No A3>MAX MAX←0 Yes No A1>MAX MAX←A3 Yes MAX←A1 No A4>MAX Yes No A2>MAX MAX←A4 Yes MAX←A2 MAX の表示 終了
ループ i:1,1,4 ループ プログラムの作成 プリントp.17 【基礎課題2-1】 開始 MAX←0 配列A[i](i=1~4)を用いて表すと・・・ • 拡張が容易:整数の数が増えてもループの終値を変更するだけで良い。 • 記述がコンパクトに:繰り返し処理をループ内に一つだけ記述するだけで済む。 No A[i]>MAX Yes MAX←A[i] 理解度チェック→【基礎課題2-2 】、【基礎課題2-3 】、【基礎課題2-4】 MAX の表示 終了
a1 a2 ・・・ X am am+1 ・・・ aN A[1] A[2] A[m] A[m+1] A[m+2] A[N+1] 2-4 配列要素の挿入・削除 • 例:配列A[1]~A[N]にデータa1~aNが入っている。→配列要素のm番目にデータXを挿入する。 a1 a2 ・・・ am am+1 ・・・ aN A[1] A[2] A[m] A[m+1] A[N] A[1] A[2] A[m] A[m+1] A[N] A[N+1] X am以降を右にずらす am aN-1 aN 挿入完了! 一つ追加
ループ i:N,-1,m ループ 流れ図で表すと・・・ a1 a2 ・・・ am am+1 ・・・ aN A[1] A[2] A[m] A[m+1] A[N] 開始 X mの入力 a1 a2 ・・・ am am+1 am ・・・ ・・・ aN-1 aN aN A[1] A[2] A[m] A[m+1] A[N+1] A[N] A[N]→A[N+1] 右にずらす。 A[N-1]→A[N] A[i+1] ←A[i] ・・・ A[m]→A[m+1] A[m]→A[m+1]から始めると、どうなるか? A[m] ←X 終了 【基礎課題2-5】(p.25)
1 5 3 2 9 7 A[1] A[2] A[3] A[4] A[5] A[6] 1 1 1 1 1 5 5 5 5 5 3 3 3 3 3 2 9 9 9 9 9 9 9 7 7 A[1] A[1] A[1] A[1] A[1] A[2] A[2] A[2] A[2] A[2] A[3] A[3] A[3] A[3] A[3] A[4] A[4] A[4] A[4] A[4] A[5] A[5] A[5] A[5] A[5] 9 9 A[6] A[6] A[6] A[6] 【基礎課題2-5】具体例で考えると・・・ A[4]に2を挿入する 場合を考える。 スタート A[4]→A[5] A[5]→A[6] A[4]に2を代入 A[m+1]以降の全ての配列要素にA[m]の値が入ってしまう
ループ i:1,1,N ループ 2-5 添え字の参照 開始 Gusu←0 • 例:配列Data[1]~Data[N]にデータ(整数)が入っている。この中で、偶数および奇数の個数を数える。 Kisu←0 Kosu[0]:偶数の個数Kosu[1]:奇数の個数 を導入すると・・・ Gusu Kisu Y ←Data[i] % 2 No Y=0 Yes Gusu←Gusu+1 Kisu←Kisu+1 終了
ループ 初期化ループ i:0,1,1 i:1,1,N ループ 初期化ループ Kosu[ ]内には、何が入る? 開始 Y=0: Kosu[0]←Kosu[0]+1 Y=1: Kosu[1]←Kosu[1]+1 となることに注目すると・・・ Kosu[i]←0 選択構造が不要になった! Y ←Data[i] % 2 Kosu[Y]←Kosu[Y]+1 Kosu[ ]←Kosu[ ]+1 データ構造の変更→アルゴリズムの変更! p.29~p.30を熟読して【基礎課題2-7】へ 終了
演習にとりかかってください。 • 少なくとも、基礎課題のチェックは終えること。 • 演習の時間内に基礎課題を終了できなかった場合は、必ず次回までに課題を終えておいて下さい。基礎課題を翌週に持ち越すと、本科目の修学が困難になります。 • 応用課題まで含めて全ての課題のチェックを終えた人は退出して結構です。