明解Javaによるアルゴリズムとデータ構造

Similar documents
新・明解Javaで学ぶアルゴリズムとデータ構造

明解Javaによるアルゴリズムとデータ構造

新・明解Javaで学ぶアルゴリズムとデータ構造

P01_改.eps

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

Microsoft Word - NonGenList.doc

P1

Microsoft Word - NonGenTree.doc


8 if switch for while do while 2

Javaによるアルゴリズムとデータ構造

01-CG-BARMX-.\...pm

第1回_建築のデザインを考える_その1

0275難病情報センターのご案内_表面#4-03

情報処理Ⅰ

K227 Java 2

00Int01.qx

‡Æ‡¤‡©‡¢34_

2

Microsoft Word - keisankigairon.ch doc

解きながら学ぶJava入門編

ALG2012-A.ppt

明解Java入門編

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

デジタル表現論・第4回

untitled

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i

r1.dvi

2

Prog1_15th

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

プログラミングA

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

スライド 1

10/8 Finder,, 1 1. Finder MAC OS X 2. ( ) MAC OS X Java ( ) 3. MAC OS X Java ( ) / 10

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

(search: ) [1] ( ) 2 (linear search) (sequential search) 1

問題 01 水道料金を節約しよう 問題のポイント問題文で述べられた仕様を理解し その通りに動作するプログラムを記述できるかを問う問題です 変数 入出力 四則演算に加え 条件分岐や繰り返し処理についての知識が必要です 問題の解き方いくつかのアルゴリズムが考えられますが w が 100 以下と小さい値な

デジタル表現論・第6回

新・明解Java入門

文字列操作と正規表現

プログラミング入門1

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Contents

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

プログラミング入門1

ALG ppt

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

: : : TSTank 2

I java A

JavaプログラミングⅠ

untitled

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

r02.dvi

ohp02.dvi

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(Java) サンプル問題 知識科目 第 1 問 (

Java講座

oop1


新版明解C言語 実践編

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

C言語によるアルゴリズムとデータ構造

問題1 以下に示すプログラムは、次の処理をするプログラムである

人工知能入門

Prog1_3rd

P03.ppt


ALG2012-C.ppt

untitled

新・明解Java入門

目 次 オブジェクト指向 1 3 オブジェクト指向 2 9 二分探索 14 二次元配列 16 ソート 18 ArrayList 25 解答 27 2

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Java演習(4) -- 変数と型 --

Thread

2 3

Taro-最大値探索法の開発(公開版

Prog1_11th

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

Prog1_6th

JavaプログラミングⅠ

untitled

Java updated

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

取扱説明書 [d-02H]

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

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

r3.dvi

新・明解C言語で学ぶアルゴリズムとデータ構造

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

JAVA とテンプレート

JavaプログラミングⅠ

226

Transcription:

74 searching 3 key Fig.3-1

75 2を探索 53を探索 3-1 5 2 1 4 3 7 4 を探索 Fig.3-1

76 3 linear searchsequential search 2 Fig.3-2 0 ❶ ❷ ❸ 配列の要素を先頭から順に走査していく 探索すべき値と等しい要素を発見 Fig.3-2 6 4 3 2

3-2Fig.3-3 77 5 Fig.3-3 0 ❶ ❷ ❸ ❹ ❺ ❻ 配列の要素を先頭から順に走査していく 配列の末端を通り越してしまった n n / 2 ㆒ n + 1 ㆓ n List 3-1

78List 3-1 // Chap03/SeqSearch.java import java.util.scanner; class SeqSearch { 3 //--- ankey ---// static int seqsearch(int[] a, int n, int key) { int i = 0; while (true) { if (i == n) return -1; if (a[i] == key) return i; i++; // -1 // public static void main(string[] args) { Scanner stdin = new Scanner(System.in); System.out.print(""); int num = stdin.nextint(); int[] x = new int[num]; // num for (int i = 0; i < num; i++) { System.out.print("x[" + i + "]"); x[i] = stdin.nextint(); 7 Ÿ x[0]22 Ÿ x[1]8 Ÿ x[2]55 Ÿ x[3]32 Ÿ x[4]120 Ÿ x[5]55 Ÿ x[6]70 Ÿ 120 Ÿ x[4] System.out.print(""); int ky = stdin.nextint(); // int idx = seqsearch(x, num, ky); // xky if (idx == -1) System.out.println(""); else System.out.println("x[" + idx + "]"); seqsearch a n key key key -1-1 i 0 while

3-2 79 while i == n a[i] == key while true List 3-2 for List 3-2 //--- ankey ---// static int seqsearch(int[] a, int n, int key) { for (int i = 0; i < n; i++) if (a[i] == key) return i; // return -1; // -1 Chap03/SeqSearchFor.java main List 3-1 main List 3-1 while break return for true while (true) { // for ( ; ; ) { // do { // while (true); while for do

80 3 ちり Fig.3-2 Fig.3-3 Fig.3-4 本来のデータ 番兵 ❸ 2 探索する値と等しい要素を発見 ❼ 5 探索する値と等しい要素を発見 ただし見つけたのは番兵 Fig.3-4 4 4 4 a[0] a[6] a[7] sentinel 2 a[7] 2 5 a[7] 5 4 4 4 a[7] List 3-1 List 3-3 1 7 8 seqsearchsen

3-2 key a[n] 81 List 3-3 // Chap03/SeqSearchSen.java import java.util.scanner; class SeqSearchSen { //--- ankey---// static int seqsearchsen(int[] a, int n, int key) { int i = 0; a[n] = key; while (true) { if (a[i] == key) break; i++; return i == n? -1 : i; // // public static void main(string[] args) { Scanner stdin = new Scanner(System.in); System.out.print(""); int num = stdin.nextint(); int[] x = new int[num + 1]; for (int i = 0; i < num; i++) { System.out.print("x[" + i + "]"); x[i] = stdin.nextint(); 7 Ÿ x[0]22 Ÿ x[1]8 Ÿ x[2]55 Ÿ x[3]32 Ÿ x[4]120 Ÿ x[5]55 Ÿ x[6]70 Ÿ 120 Ÿ x[4] // num + 1 System.out.print(""); int ky = stdin.nextint(); int idx = seqsearchsen(x, num, ky); // // xky if (idx == -1) System.out.println(""); else System.out.println("x[" + idx + "]"); List 3-1 while if if (i == n) // ㆒ if (a[i] == key) // ㆓ if 4 4 4 4 4 4 while 4 4 i n -1

82 3 binary search 39 a[5] 31 0 1 2 3 4 ❺ 6 7 8 9 10 39 a[6] a[10] a[8] 68 0 1 2 3 4 5 6 7 ❽ 9 10 a[6] a[7] 39 58 39 6 7 (6 + 7) / 2 6 0 1 2 3 4 5 ❻ 7 8 9 10 39 n a key pl pr pc pl 0pr n - 1pc (n - 1) / 2 Fig.3-5

3-3Fig.3-5 83 着目要素 ( 中央要素 ) pl pc pr ここには存在しない 探索範囲 pl 0 1 2 3 4 ❺ 6 7 8 9 10 0 1 2 3 4 5 6 7 ❽ 9 10 0 1 2 3 4 5 ❻ 7 8 9 10 pl pl pr pr pr 探索すべき値と等しい要素を発見 a[pc] key a[pc] < key a[pl] a[pc] key a[pc + 1] a[pr] pl pc + 1 a[pc] > key a[pc] a[pr] key a[pl] a[pc - 1] pr pc - 1 a[pc] key 6 Fig.3-6

84 pl 0 1 2 3 4 ❺ 6 7 8 9 10 pr 3 pl pr 0 1 ❷ 3 4 5 6 7 8 9 10 pl pr 0 1 2 3 4 5 6 7 8 9 10 pr pl pr 0 ❶ 2 3 4 5 6 7 8 9 10 pl 0 1 2 3 4 5 6 7 8 9 10 探索範囲がなくなった Fig.3-6 a[0] a[10] a[5] 31 key 6 a[5] a[0] a[4] a[2] 15 key 6 a[2] a[0] a[1] a[0] 5 key 6 pl pc + 1 1 pl pr 1 a[1] 7 key 6 pr pc - 1 0 pl pr List 3-4 n (n + 1) n - 1

3-385 List 3-4 // Chap03/BinSearch.java import java.util.scanner; class BinSearch { //--- ankey ---// static int binsearch(int[] a, int n, int key) { int pl = 0; // int pr = n - 1; // do { int pc = (pl + pr) / 2; // if (a[pc] == key) return pc; // else if (a[pc] < key) pl = pc + 1; // else pr = pc - 1; // while (pl <= pr); 7 Ÿ return -1; // x[0]15 Ÿ x[1]27 Ÿ public static void main(string[] args) { x[2]39 Ÿ Scanner stdin = new Scanner(System.in); x[3]77 Ÿ x[4]92 Ÿ System.out.print(""); x[5]108 Ÿ int num = stdin.nextint(); x[6]121 Ÿ int[] x = new int[num]; // num 39 Ÿ x[2] System.out.println(""); System.out.print("x[0]"); x[0] = stdin.nextint(); // for (int i = 1; i < num; i++) { do { System.out.print("x[" + i + "]"); x[i] = stdin.nextint(); while (x[i] < x[i - 1]); // System.out.print(""); int ky = stdin.nextint(); // int idx = binsearch(x, num, ky); // xky if (idx == -1) System.out.println(""); else System.out.println("x[" + idx + "]"); xx ceilingx 3.5 4

86 3 complexity time complexity space complexity //--- ---// static int seqsearch(int[] a, int n, int key) { int i = 0; while (i < n) { if (a[i] == key) return i; i++; return -1; // // Table 3-1 i 0

3-387 Table 3-1 List 3-3 seqsearchsen while for '*' 0 1 2 3 4 5 6 ---+------------------------------ * 0 * 1 * 2 a[2]

88 Table 3-2 3 int pl = 0; // //--- ---// static int binsearch(int[] a, int n, int key) { int pr = n - 1; // do { int pc = (pl + pr) / 2; // if (a[pc] == key) return pc; else if (a[pc] < key) pl = pc + 1; else pr = pc - 1; while (pl <= pr); // // // return -1; // Table 3-2 Fig.3-7

3-3 89 小 大 Fig.3-7 n a key idx static int searchidx(int[] a, int n, int key, int[] idx) "<-" "->" "+" 0 1 2 3 4 5 6 ---+------------------------------ <- + -> 3 1 2 3 5 6 8 9 <- + -> 1 1 2 3 5 6 8 9 a[1] 7 5 static int binsearchx(int[] a, int n, int key) 0 1 2 3 4 ❺ 6 7 8 9 10 1 3 5 7 7 7 7 8 8 9 9 0 1 2 ❸ 4 ❺ 6 7 8 9 10 1 3 5 7 7 7 7 8 8 9 9 配列の先頭を越えない範囲で 同じ値の要素が続く限り前方に走査