PowerPoint Presentation

Similar documents
PowerPoint プレゼンテーション

PowerPoint Presentation

グラフの探索 JAVA での実装

人工知能入門

alg2015-6r3.ppt

memo

人工知能論 第1回

離散数学

Microsoft PowerPoint - 06graph3.ppt [互換モード]

memo

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

情報処理Ⅰ

Microsoft PowerPoint - uninformed.ppt

ALG2012-A.ppt

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

untitled

AI 三目並べ

ALG ppt


第2回

K227 Java 2

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

LIFO(last in first out, ) 1 FIFO(first in first out, ) 2 2 PUSH POP : 1

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Microsoft PowerPoint - algo ppt [互換モード]

プログラミングA

基礎計算機演習 実習課題No6

8 if switch for while do while 2

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

Microsoft Word - NonGenTree.doc

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

デジタル表現論・第4回

Taro-2分探索木Ⅱ(公開版).jtd

Microsoft Word - CompA-Ex doc

Java講座

メソッドのまとめ

Taro-リストⅢ(公開版).jtd

Microsoft PowerPoint - 06.pptx

プログラミングA

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

Microsoft PowerPoint - kougi10.ppt

r3.dvi

Microsoft PowerPoint - 05.pptx

PowerPoint Template

PowerPoint Presentation

文字列操作と正規表現

PowerPoint Presentation

Microsoft Word - NonGenList.doc

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

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

JavaプログラミングⅠ

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

: : : TSTank 2

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

Java updated

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

haskell.gby

離散数学

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

PowerPoint プレゼンテーション

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

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

PowerPoint プレゼンテーション

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

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

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

TestDesign for Web

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

データ構造

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx


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

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

Android プログラム ガイド

プログラミング入門1

Android Layout SDK プログラミング マニュアル

JavaプログラミングⅠ

Microsoft PowerPoint - kougi11.ppt

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

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

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

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Prog2_10th

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

GUIプログラムⅣ

JAVA とテンプレート

メソッドのまとめ

プログラミング入門1

r02.dvi

ohp02.dvi

プログラミング入門1

Microsoft Word - 13

Microsoft PowerPoint - C_Programming(3).pptx

(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C

新・明解Java入門

Prog1_3rd

JEB Plugin 開発チュートリアル 第4回

main

Transcription:

幅優先探索アルゴリズム 復習 Javaでの実装 深さ優先探索 復習 Javaでの実装 1

探索アルゴリズムの一覧 問題を解決するための探索 幅優先探索 深さ優先探索 深さ制限探索 均一コスト探索 反復深化法 欲張り探索 山登り法 最良優先探索 2

Breadth-first search ( 幅優先探索 ) 探索アルゴリズムはノードやリンクからなる階層的なツリー構造で構成された状態空間を探索するアルゴリズムです 幅優先探索アルゴリズムは根ノード (Root node) から隣接している全てのノードを順番に探索していき これを繰り返すことでゴールノードをみつけます ゴールノードが見つかるか すべてのノードが探索されたら探索は終了です つまり ある階層をすべて調べ それが終わるとひとつ深い階層をすべて調べることを繰り返します 横型探索ともいいますアルゴリズムの流れ : 1. キューを作成し スタートノードを加える. 2. ループ : - もしキューが空なら探索失敗として探索を終了する - 先頭のノードを開きキューから取り除く - もし開いたノードがゴールなら それを解決策として探索を終了する. - 開いたノードの子ノードをキューの後ろに追加する 3

例 : 1-> 2->3->4->5->6 -> 4

子ノードを最後に追加する FIFO 型 (First In First Out) のデータ構造キューが実装に用いられる 5

6

擬似コード ( 幅優先探索 ) ArrayList queue = new ArrayLsit() ; 1 queue.add(initialnode) ; 2 while (queue.size()> 0) { 3 SearchNode testnode = (SearchNode)queue.firstElement() ; queue.remove(0) ; 3.1 if (testnode.state.equals(goalstate)) return testnode ;// ゴールを発見 3.2 if (!testnode.expanded) { testnode.expand(queue,searchnode.last); return null ;

public void breadthfirst() { ArrayList<Node> open = new ArrayList<Node>(); open.add(start); ArrayList<Node> closed = new ArrayList<Node>(); boolean success = false; int step = 0; g.setcolor(color.red); while (true) { System.out.println("STEP:" + (step++)); System.out.println("OPEN:" + open.tostring()); System.out.println("closed:" + closed.tostring()); if (open.size() == 0) { success = false; break; else { Node node = open.get(0); open.remove(0); if (node == goal) { success = true; break; else { ArrayList<Node> children = node.getchildren(); closed.add(node); for (int i = 0; i < children.size(); i++) { Node m = children.get(i); if (!open.contains(m) &&!closed.contains(m)) { num++; m.setpointer(node); if (m == goal) { open.add(0, m); node.gethm().get(m).draw(g, num); sleep(); break; else { open.add(m); node.gethm().get(m).draw(g, num); sleep(); if (success) { String result = printsolution(goal, ""); showdaialog(result); reset.setvisible(true); else { String result = " 探索失敗 "; showdaialog(result); reset.setvisible(true); 8

講義内の課題 なぜ 2 つの ArrayList(open, closed) を使用するのか説明しなさい : Figure 1 Figure 1 において, open に保存されているノードを書きなさい [ ] Closed に保存されているノードを書きなさい [ ] 9

Depth-first search( 深さ優先探索 ) 深さ優先探索アルゴリズムはルートノード木の最初のノード (Root node) から ゴールノードが見つかるか葉 ( 子の無いノード Leaf node) に行き着くまで深く掘り下げて探索を行います もしゴールノードが見つからなかったら引き返し 次のまだ通っていないノードから葉ノードに到達するまで探します つまり 深く進んでいき 行き止まったら引き返して また深く進みながらゴール目指します 縦型探索ともいう アルゴリズムの流れ : 1. キューを作成し スタートノードを加える. 2. ループ : - もしキューが空なら探索失敗として探索を終了する - 先頭のノードを開きキューから取り除く - もし開いたノードがゴールなら それを解決策として探索を終了する. - 開いたノードの子ノードをキューの先頭に追加する 10

例 : 11

子ノードを先頭に追加する LIFO 型 (Last In First Out) のデータ構造キューが実装に用いられる 12

13

擬似コード ( 深さ優先探索 ) ArrayList queue = new ArrayLsit() ; 1 queue.add(initialnode) ; 2 while (queue.size()> 0) { 3 SearchNode testnode = (SearchNode)queue.firstElement() ; queue.remove(0) ; 3.1 if (testnode.state.equals(goalstate)) return testnode ;// ゴールを発見 3.2 if (!testnode.expanded) { testnode.expand(queue,searchnode.front); return null ;

public void breadthfirst() { ArrayList<Node> open = new ArrayList<Node>(); open.add(start); ArrayList<Node> closed = new ArrayList<Node>(); boolean success = false; int step = 0; g.setcolor(color.red); while (true) { System.out.println("STEP:" + (step++)); System.out.println("OPEN:" + open.tostring()); System.out.println("closed:" + closed.tostring()); if (open.size() == 0) { success = false; break; else { Node node = open.get(0); open.remove(0); if (node == goal) { success = true; break; else { ArrayList<Node> children = node.getchildren(); closed.add(node); for (int i = 0; i < children.size(); i++) { Node m = children.get(i); if (!open.contains(m) &&!closed.contains(m)) { num++; m.setpointer(node); if (m == goal) { open.add(0, m); node.gethm().get(m).draw(g, num); sleep(); break; else { open.add(m); node.gethm().get(m).draw(g, num); sleep(); if (success) { String result = printsolution(goal, ""); showdaialog(result); reset.setvisible(true); else { String result = " 探索失敗 "; showdaialog(result); reset.setvisible(true); 赤文字が子ノードを調べて ArrayListに追加している部分 15 どう変更すべきか?

講義内の課題 1. breathfirst() メソッドを理解する 2. SearchingApplet.java を実行する 3. breathfirst() メソッドと depthfirst() で異なる点を書く 4. 参考サイト http://el-tramo.be/jsearchdemo/ 16

宿題 プログラムのコメントを参考にして Applet 上に表示する都市の数を増やす breathfirst() メソッドを理解し depthfirst() メソッドを実装する depthfirst() メソッドのコードと説明を A4 の紙に印刷して再来週提出 ( 提出日 :10 月 24 日 ). 17