アルゴリズムとプログラミング (Algorithms and Programming)

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
Generic programming と STL
アルゴリズムとデータ構造 2012年6月27日
第12回 ソート(3): シェルソート、クイックソート
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
第11回 整列 ~ シェルソート,クイックソート ~
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
ファーストイヤー・セミナーⅡ 第8回 データの入力.
データ構造とアルゴリズム 第10回 mallocとfree
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
第4章 配 列 オブジェクト指向Javaプログラミング入門 近代科学社©2008 Toru Kato Masahiro Higuchi
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
第10回 ソート(1):単純なソートアルゴリズム
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとデータ構造 2011年6月13日
アルゴリズムとプログラミング (Algorithms and Programming)
データ構造とアルゴリズム 分割統治 ~ マージソート~.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
第20章 Flyweight ~同じものを共有して無駄をなくす~
アルゴリズム入門.
第11回 整列 ~ シェルソート,クイックソート ~
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年7月15日
アルゴリズムとプログラミング (Algorithms and Programming)
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
第7回 プログラミングⅡ 第7回
わんくま同盟茶藝部顧問 Microsoft MVP for VC episthmh
アルゴリズムとデータ構造1 2005年7月1日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 4 整列アルゴリズム.
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年7月2日
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2013年7月2日
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
アルゴリズムとデータ構造 2012年6月25日
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

アルゴリズムとプログラミング (Algorithms and Programming) 第8回:多次元配列、ソーティング 多次元配列 行列クラスのサンプルプログラム ソーティングアルゴリズム 選択ソート マージソート クイックソート 講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

2次元配列(3x3)の宣言(要素がdoubleの場合): 2次元配列 行列は2次元配列で表すことができる a[ ][ ] (添え字:0,1,2,3.....) 例)3x3行列 2次元配列(3x3)の宣言(要素がdoubleの場合): double a[ ][ ] = new double[3][3] ;

(各添え字をx,y,z座標と対応させて3次元静電ポテンシャルなどを表現) 多次元配列 3次元配列:  a[ ][ ][ ]  (各添え字をx,y,z座標と対応させて3次元静電ポテンシャルなどを表現) 4次元配列:  a[ ][ ][ ][ ]

2x2行列を表現するクラス定義の例) class Max2 { // 2x2配列クラス(配列要素はdouble) private double m[][]; // フィールドとして配列参照変数を宣言 //コンストラクタ (配列の実体を生成し、初期値を与える) Max2(double a00,double a01,double a10, double a11 ){ m = new double[2][2] ; //newで配列の実体を生成する m[0][0] = a00; m[0][1] = a01; m[1][0] = a10; m[1][1] = a11; } void add( Max2 max ) { // 引数の配列を自身に加算 m[0][0] += max.m[0][0]; m[0][1] += max.m[0][1]; m[1][0] += max.m[1][0]; m[1][1] += max.m[1][1]; void printMatrix() { System.out.print( "a00=" + m[0][0] ); System.out.println( " a01=" + m[0][1] ); System.out.print( "a10=" + m[1][0] ); System.out.println( " a11=" + m[1][1] );

a00=1.0 a01=2.0 a10=3.0 a11=4.0 SampleMax2.java 続き class SampleMax2 { public static void main(String[] args) { Max2 m1 = new Max2(1,0,3,0); Max2 m2 = new Max2(0,2,0,4); m1.add(m2); //add()の定義からm1=m1+m2と等価 m1.printMatrix(); // 行列要素の表示 } 実行結果 a00=1.0 a01=2.0 a10=3.0 a11=4.0

多次元配列の宣言(長さが不均一な場合) m[0] m[0][0] m[0][1] m[1] m[1][0] m[1][1] m[1][2] 数値計算では使わないが文字列を配列に格納する際に多用する double m[][] = new double[3][] ; m[0] = new double[2]; m[1] = new double[4]; m[2] = new double[3]; 空白のまま m[0] m[0][0] m[0][1] m[1] m[1][0] m[1][1] m[1][2] m[1][3] m[2] m[2][0] m[2][1] m[2][2]

多次元配列の初期化 n[0] 3 2 n[1] 1 8 9 -1 n[2] 6 4 int n[][] = { { 3, 2 }, 初期化要素を直接指定する場合 int n[][] = { { 3, 2 }, { 1, 8, 9, -1 }, { 0, 6, 4 } }; n[ ][0] n[ ][1] n[ ][2] n[ ][3] n[0] 3 2 n[1] 1 8 9 -1 n[2] 6 4

配列長を知る(.length) n.length 3になる.new int[3][]に対応 例) int n[][] = { { 3, 2 }, { 1, 8, 9, -1 }, { 0, 6, 4, 1, 7 } }; それぞれの次元の配列長は下記のようになる n.length   3になる.new int[3][]に対応 n[0].length 2になる. new int[2]に対応 n[1].length 4になる. new int[4]に対応 n[2].length 5になる. new int[5]に対応

ソーティングアルゴリズム 選択ソート マージソート クイックソート バブルソート ヒープソート

選択ソートの考え方 問題: 与えられた配列の要素を、大きい順に並べ替えなさい 方針(例): 配列の先頭から、一つ一つ順番に値を比べて、大きい値と出会ったら入れ替える 配列添え字i a[0] work 入れ替え用 一時記憶変数 a[1] 配列添え字j a[2] a[3] a[4]

選択ソートのアルゴリズム 1. i = 0からはじめる. 2. A[i+1]からA[N-1]までの要素A[j]と、A[i]の大きさを比較して、 3. もし、A[i]よりも大きい要素に出会ったら、 4. A[i]とA[j]を入れ替える. 5. i = i + 1とする. 6. i == N - 1ならば処理を終了する.そうでなければ,2へ戻る. 計算量 N×N = N2 のオーダーの計算量が必要となる.

SampleAPP0701.java class SampleAPP0701 { public static void main(String[] args) { int array[] = {20,100,-40,500,70};//与えられた配列 int work; //入れ替え用の一時メモリ for(int i = 0; i < array.length - 1; i++ ){ for(int j = ; j < ; j++ ){ if( array[i] < array[j] ) { //大きな数字と出会ったら work = array[ ]; //入れ替える array[ ] = array[ ]; array[ ] = work; } } //以下は結果の表示 for(int i=0; i < array.length; i++ ){ System.out.println( "array[" + i + "]= " + array[i] );

マージソートの考え方 ソーティングされた複数のデータをまとめて、 1つのソーティングしたデータにすることを マージ(merge,併合)と呼ぶ + = 2つのデータグループが既にソーティング されている場合、これらをまとめて順番に 並べる変えるのは、ばらばらなデータを並 べ直すのよりはるかに少ない手数で可能。

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である 比較の上、小さい方を持ってくる

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージの手順 + 小さい順(昇順)の場合なら、 常に一番小さい先頭データ同士のみを 比較すれば十分である

マージソートの考え方(例) 8つの要素を4つづつに分解 それぞれ

先の手順を、分解されたグループに繰り返し適用する マージソートの考え方(例) 先の手順を、分解されたグループに繰り返し適用する マージの 繰り返し

マージソートの計算量 要素数N log2N段 各段でN回のオーダー の比較と代入 の操作が必要 ∴N・log2Nのオーダー

まとめ 多次元配列 ソーティング(並べ替え)アルゴリズム 宣言と初期化 配列の長さ知る方法 行列クラスのサンプルプログラム 選択ソート マージソート クイックソート