2. 幅優先探索のアルゴリズムの考え方ふつう考えるように順次経路をたどっていくということから 発想を転換する それにはまず 区間経路を列挙することから始める AB, AC, BC, CB, BD, DE, CE, EC, DE, ED, DF, EG そして経路探索とは このような区間を記したカード

Similar documents
HITACHI 液晶プロジェクター CP-AX3505J/CP-AW3005J 取扱説明書 -詳細版- 【技術情報編】

取扱説明書 -詳細版- 液晶プロジェクター CP-AW3019WNJ

HITACHI 液晶プロジェクター CP-EX301NJ/CP-EW301NJ 取扱説明書 -詳細版- 【技術情報編】 日本語

グラフの探索 JAVA での実装

学習の手順

alg2015-6r3.ppt

‚å™J‚å−w“LŁñfi~P01†`08

PSCHG000.PS

05‚å™J“LŁñfi~P01-06_12/27

a (a + ), a + a > (a + ), a + 4 a < a 4 a,,, y y = + a y = + a, y = a y = ( + a) ( x) + ( a) x, x y,y a y y y ( + a : a ) ( a : a > ) y = (a + ) y = a

PSCHG000.PS

日立液晶プロジェクター CP-AW2519NJ 取扱説明書- 詳細版-

データ構造

新たな基礎年金制度の構築に向けて

A(6, 13) B(1, 1) 65 y C 2 A(2, 1) B( 3, 2) C 66 x + 2y 1 = 0 2 A(1, 1) B(3, 0) P 67 3 A(3, 3) B(1, 2) C(4, 0) (1) ABC G (2) 3 A B C P 6

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

48 * *2

PowerPoint Presentation


memo

1/68 A. 電気所 ( 発電所, 変電所, 配電塔 ) における変圧器の空き容量一覧 平成 31 年 3 月 6 日現在 < 留意事項 > (1) 空容量は目安であり 系統接続の前には 接続検討のお申込みによる詳細検討が必要となります その結果 空容量が変更となる場合があります (2) 特に記載

補足情報

取扱説明書<詳細版>

2002.N.x.h.L g9/20

離散数学

R R 16 ( 3 )

2001 Mg-Zn-Y LPSO(Long Period Stacking Order) Mg,,,. LPSO ( ), Mg, Zn,Y. Mg Zn, Y fcc( ) L1 2. LPSO Mg,., Mg L1 2, Zn,Y,, Y.,, Zn, Y Mg. Zn,Y., 926, 1

JAPLA研究会資料 2018/6/16

12~

007 0 ue ue b 6666 D

04年度LS民法Ⅰ教材改訂版.PDF

MS-1J/MS-1WJ(形名:MS-1/MS-1W)取扱説明書 - 詳細- 技術情報編

欧州特許庁米国特許商標庁との共通特許分類 CPC (Cooperative Patent Classification) 日本パテントデータサービス ( 株 ) 国際部 2019 年 1 月 17 日 CPC 版のプレ リリースが公開されました 原文及び詳細はCPCホームページの C

欧州特許庁米国特許商標庁との共通特許分類 CPC (Cooperative Patent Classification) 日本パテントデータサービス ( 株 ) 国際部 2019 年 7 月 31 日 CPC 版が発効します 原文及び詳細はCPCホームページのCPC Revision

Microsoft PowerPoint - kougi10.ppt

人工知能入門

memo

CP-X4021NJ,WX4021NJ_.indd

IMO 1 n, 21n n (x + 2x 1) + (x 2x 1) = A, x, (a) A = 2, (b) A = 1, (c) A = 2?, 3 a, b, c cos x a cos 2 x + b cos x + c = 0 cos 2x a

( )

Taro10-名張1審無罪判決.PDF

linearal1.dvi

あさひ indd

Microsoft PowerPoint - 05.pptx

1 (1) vs. (2) (2) (a)(c) (a) (b) (c) 31 2 (a) (b) (c) LENCHAR

2 (1) a = ( 2, 2), b = (1, 2), c = (4, 4) c = l a + k b l, k (2) a = (3, 5) (1) (4, 4) = l( 2, 2) + k(1, 2), (4, 4) = ( 2l + k, 2l 2k) 2l + k = 4, 2l


O E ( ) A a A A(a) O ( ) (1) O O () 467

熊本県数学問題正解

1990 IMO 1990/1/15 1:00-4:00 1 N N N 1, N 1 N 2, N 2 N 3 N 3 2 x x + 52 = 3 x x , A, B, C 3,, A B, C 2,,,, 7, A, B, C

空き容量一覧表(154kV以上)

2/8 一次二次当該 42 AX 変圧器 なし 43 AY 変圧器 なし 44 BA 変圧器 なし 45 BB 変圧器 なし 46 BC 変圧器 なし

JAPLA研究会資料 2007/4/28

Microsoft Word - Sample_CQS-Report_English_backslant.doc

取扱説明書 [F-07A]

memo


6.1号4c-03

FMV活用ガイド

26号経営技術レポート「相連報の実務」.PDF

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

Microsoft PowerPoint - DA2_2018.pptx

1. 2 P 2 (x, y) 2 x y (0, 0) R 2 = {(x, y) x, y R} x, y R P = (x, y) O = (0, 0) OP ( ) OP x x, y y ( ) x v = y ( ) x 2 1 v = P = (x, y) y ( x y ) 2 (x

JAPLA研究会資料 2010/9/ Excel_


さくらの個別指導 ( さくら教育研究所 ) A 2 P Q 3 R S T R S T P Q ( ) ( ) m n m n m n n n

Microsoft PowerPoint - DA2_2019.pptx

 

, ,279 w

untitled

丛觙形ㆮ隢穓ㆮ亄ç�›å‹ƒç·ı

8

HyRAL®FPGA設計仕様書

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

RP12月号.indd

取扱説明書<詳細版>

~~濱田のジイサンとの出会い~~


1 1 3 ABCD ABD AC BD E E BD 1 : 2 (1) AB = AD =, AB AD = (2) AE = AB + (3) A F AD AE 2 = AF = AB + AD AF AE = t AC = t AE AC FC = t = (4) ABD ABCD 1 1

A B 5 C mm, 89 mm 7/89 = 3.4. π 3 6 π 6 6 = 6 π > 6, π > 3 : π > 3

Microsoft PowerPoint - 09re.ppt [互換モード]

Taro10-岩手県警察航空隊の運営及

untitled

合併後の交付税について

2016年度 九州大・理系数学

di-problem.dvi

Microsoft Word docx

離散数学


図形と証明 1 対頂角 a = b ( 証明 ) a+ c= 180 なので a = c b+ c= 180 なので b = c 1 2 1,2 から a = b a と b のように 交わる直線の向かい合う角を対頂角といいます 等しいことは 当然のように見えますが 証明とは

JAPLA研究会資料 2011/1/29

Taro13-①表紙関係.jtd

問 題

PSCHG000.PS

(, Goo Ishikawa, Go-o Ishikawa) ( ) 1

untitled

(1) (2) (3) (4) (1) (a) (b) (c) (d) kg 9.8 N 5.0 kg 19.6 m/s kg m/s 8.0kg (2) 1 r=1.0m ABC QA =1

‚å™J‚å−w“LŁñ›Ä

70 : 20 : A B (20 ) (30 ) 50 1

埼玉県学力 学習状況調査 ( 中学校 ) 復習シート第 3 学年数学 組 番 号 名 前 ( 数と式 を問う問題 ) 1 次の計算をしなさい レベル 6~8 1 (27x-36y+18) (-9) 答え 2 15x 2 y 5xy 2 3 答え 2 次の各問いに答えなさい レベル 9 10 (1)

Transcription:

JAPLA 研究会資料 2013/12/7 幅優先探索 - 考え方と J のプログラムゴールへのルート探索を例として 西川 利男 はじめに 箱入り娘 という古くからのパズルがある 大きさの異なる大小の小片をスライドして決められた解のパターンにもって行くパズルである 以前 JAPLA の夏の合宿で紹介した [1] そのときは J のプログラムとしては小片を移動させるグラフィックスだけであった 久しぶりにこれを見直して 今度は解を探索するプログラムを作ろうと試みた 実はこの課題は Perl の正規表現のパターン マッチング処理の例として Perl の本 [2] にあり Perl のプログラムコードが載せられている このような探索 Search はコンピュータ アルゴリズムの基本であり 2 つの方法がある 深さ優先の探索 (Depth First Search= 縦型探索 幅優先の探索 (Breadth First Search= 横型探索 Perl のプログラムは幅優先の方式であり これを参考に J でプログラミングしようとした ところが これに仲々てこずっている 今回はそのための腕慣らしとして 決められた経路のゴールへのルート探索を例として J での幅優先探索アルゴリズムの考え方とそのプログラムについて述べる 1. 経路のゴール探索課題例次のような連結した経路をとりあげる [3] ここで 起点 A から終点 G に至る経路をすべて求めること なお 正式にはこのような図形をグラフ (graph といい A,B などを頂点 (vertex または節点 (node 区間 AB, BC などは辺 (edge または弧 (arc と呼ぶようだが ここでは分かり易い用語を使った [1] 西川利男 J の正規表現プログラミング III 箱入り娘パズル JAPLA 研究会資料 ( 蓼科夏の合宿 2005/8/6 [2] 増井俊之 Perl 書法 アスキー出版 (1993, p.112-117 [3] 広井誠 パズルでプログラミング - 第 2 回幅優先探索と 15 パズル ( 前編 M. Hiroi's Home Page, http//www.geocities.jp/m_hiroi/ - 1 -

2. 幅優先探索のアルゴリズムの考え方ふつう考えるように順次経路をたどっていくということから 発想を転換する それにはまず 区間経路を列挙することから始める AB, AC, BC, CB, BD, DE, CE, EC, DE, ED, DF, EG そして経路探索とは このような区間を記したカードがあったとして これらを次々と取り出して 連続するように並べる というように考える これから 下図のような経路探索の木を作る ゴールへの経路である つまり解は ACEG ABCEG ABDEG ACBDEG の 4 通りである この経路探索の木をたどっていき 最後が G で終わるものが このように 経路探索のアルゴリズムとは上の木構造について 階層レベルを定めて そのレベルでは幅優先 = 横方向に調べて ゴールを見つける そして階層レベルを 1 つずつ増やして行きつつ 次々と進めて行く これから分かるように 幅優先探索では 解は最短の経路から順次求められる - 2 -

3.J のプログラム 3.1 準備 J のプリミティブに名前をつけて読みやすくする head = {. behead = }. tail = { curtail = } 区分経路データベース DC1 = 'AB';'AC';'BC';'CB';'BG' DA1 = 'AB';'AC';'BC';'CB';'BD';'DE';'CE';'EC';'DE';'ED';'DF';'EG' 3.2 make 探索の木の根を元に 葉を生成するプログラム make = 3 0"(1 0 if. 0 = # > y. do. '' return. NB. revised 2013/11/12 Key =. tail > y. Lk =. Key -.~ (> Key e. L0 DB#DB LL =. Lk -. y. LLL =. (Key = > head L0 LL # LL LR =. ~. (< curtail > y.,l0 (LLL tdouble =. */ L0 ~ L0 LR NB. test whether duplicate? LR =. (> tdouble # LR NB. remove the duplicated items プログラムは左引数を区分の経路データベースとして 右引数にはそこにいたる経路を指定する 経路の最後をキーとして 経路データベースからキーを含むその他の項目を取り出し それ以前の経路の後ろに追加したものを返す このとき 以前に現れたものを排除することがポイントである さもないと堂々巡りして先に進めない! 次のように実行される DA1 make <'A' AB AC DA1 make <'AB' ABC ABD DA1 make <'AC' ACB ACE DA1 make 'AB';'AC' ABC ABD ACB ACE DA1 make DA1 make <'A' ABC ABD ACB ACE - 3 -

3.3 breadth 階層レベルを指定して 探索の途中経過を出力するプログラム breadth = 3 0 Level =. y. D =. <'A' j =. 0 while. j < Level do ẇr 'Level ', " j D =., DB make D wr D wr testd =. # L0 D wr tt =. (j + 2 = L0 testd wr (, > tt # D j =. j + 1 '*** ***' 実行すると 次のようになされる DA1 breadth 5 Level 0 AB AC +-+-+ 2 2 +-+-+ +-+-+ 1 1 +-+-+ AB AC Level 1 ---+---+ ABC ABD ACB ACE ---+---+ +-+-+-+-+ 3 3 3 3 +-+-+-+-+ +-+-+-+-+ 1 1 1 1 +-+-+-+-+ ---+---+ ABC ABD ACB ACE ---+---+ Level 2 +----++----+----+----++----+----+ ABCE ABDE ABDF ACBD ACED ACEG +----++----+----+----++----+----+ +-+-+-+-+-+-+-+-+ 4 0 4 4 4 0 4 4 +-+-+-+-+-+-+-+-+ - 4 -

+-+-+-+-+-+-+-+-+ 1 0 1 1 1 0 1 1 +-+-+-+-+-+-+-+-+ +----+----+----+----+----+----+ ABCE ABDE ABDF ACBD ACED ACEG +----+----+----+----+----+----+ Level 3 +-----+-----+++-----+-----+---++-----+-----+++-----++---++ ABCED ABCEG ABDEC ABDEG ABD ACBDE ACBDF ACEDF ACE +-----+-----+++-----+-----+---++-----+-----+++-----++---++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5 5 0 0 5 5 3 0 5 5 0 0 5 0 3 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-----+-----+-----+-----+-----+-----+-----+ ABCED ABCEG ABDEC ABDEG ACBDE ACBDF ACEDF +-----+-----+-----+-----+-----+-----+-----+ Level 4 +------++----++++++++----++----+----+++------++----++++++----++++----+----+++ ABCEDF ABCE ABDE ABDE ABDF ACBDEG ACBD ACED ACED ACEG +------++----++++++++----++----+----+++------++----++++++----++++----+----+++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6 0 4 0 0 0 0 0 0 0 4 0 4 4 0 0 6 0 4 0 0 0 0 0 4 0 0 0 4 4 0 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +------+------+ ABCEDF ACBDEG +------+------+ *** *** 4. ゴール探索のプログラム search と実行例 search = 3 0 Level =. y. D =. <'A' j =. 0 while. j < Level do. NB. wr 'Level ', " j D =., DB make"(1 0 D testd =. # L0 D tt =. (j + 2 = L0 testd NB. wr (#D, (#> tt if. (#D ~ (#> tt do. '*** end ***' return. D =. (, > tt # D NB. NB. wr D wr 'G' e. L0 D wr > (> 'G' e. L0 D # D j =. j + 1 '*** end ***' - 5 -

DA1 search 5 ACEG ABCEG ABDEG ACBDEG *** end *** - 6 -

5.2 分木グリッドのゴール探索昨年 日本科学未来館の情報部門で 巨大な数 と題するコーナーがあった 縦横 グリッド状に並べた 2 分木のゴール探索の場合の数が 次数が大きくなるにしたがって巨大な数になるというものである 今回の J の幅優先探索のプログラムを使ってこの問題に適用してみた ここで必要になったのは 区間連結のデータベースを自動的に生成することで 次のプログラム condata でおこなう condata = 3 0 C0 =., 2 <\ "(1 y. C1 =., 2 <\ "(1 y. C0, C1 (], (. L0 C0, C1 また 先の search を多少修正したプログラム route で検索を行う 左引数に区間データベース 右引数には起点と終点を指定して実行する まず 3 x 3 の場合である A - B - C D - E - F G - H - I RD3 = 3 3$'ABCDEFGI' WAY3 = condata RD3 WAY3 ----------------+ AB BC DE EF GH HI AD DG BE EH CF FI BA CB ED FE HG IH DA GD EB HE FC IF ----------------+ WAY3 route 'AI' No.1 ABCFI No.2 ABEFI No.3 ABEHI No.4 ADEFI No.5 ADEHI No.6 ADGHI No. 7 ABCFEHI No. 8 ABEDGHI No. 9 ADEBCFI No.10 ADGHEFI No.11 ABCFEDGHI No.12 ADGHEBCFI *** 12 routes found *** 3 x 3 の場合には 12 の経路が得られた - 7 -

次に 4 x 4 の場合をやってみよう A - B - C - D E - F - G - H I - J - K - L M - N - O - P RD4 = 4 4$'ABCDEFGHIJKLMNOP' WAY4 = condata RD4 WAY4 route 'AP' No. 1 ABCDHLP No. 2 ABCGHLP No. 3 ABCGKLP No. 4 ABCGKOP No. 5 ABFGHLP No. 6 ABFGKLP No. 7 ABFGKOP No. 8 ABFJKLP No. 9 ABFJKOP No.10 ABFJNOP No.11 AEFGHLP No.12 AEFGKLP No.13 AEFGKOP No.14 AEFJKLP No.15 AEFJKOP No.16 AEFJNOP No.17 AEIJKLP No.18 AEIJKOP No.19 AEIJNOP No.20 AEIMNOP ( 途中省略 No.180 AEIMNJFGCDHLKOP No.181 AEIMNJFBCDHLKOP No.182 AEIMNJFBCDHGKLP No.183 AEIMNJFBCDHGKOP No.184 AEIMNJFBCGHLKOP *** 184 routes found *** さらに 5 x 5 ではかなり時間がかかった末 次のようになる WAY5 route 'AY' *** 8512 routes found *** このように 場合の数は巨大な数になる - 8 -

NB. Breadth-first Search by Toshio Nisikawa 2013/12/3 wr = 1!2&2 rd = 1!1 NB. Data =============================== NB. A - B - D - F NB. NB. + - C - E - G head = {. behead = }. tail = { curtail = } index_of = i. ~ NB. Interval Data Base DA = 'AB';'AC';'BC';'BD';'CE';'DE';'DF';'EG' DC = 'AB';'AC';'BC';'BG' NB. New Version / OK! - 2013/11/9 -------------------------------- DC1 = 'AB';'AC';'BC';'CB';'BG' DA1 = 'AB';'AC';'BC';'CB';'BD';'DE';'CE';'EC';'DE';'ED';'DF';'EG' NB. e.g. DC1 make <'AB' => NB. NB. ABC ABG NB. NB. DC1 make <'AC' => NB. +---+ NB. ACB NB. +---+ make = 3 0"(1 0 if. 0 = # > y. do. '' return. NB. revised 2013/11/12 Key =. tail > y. Lk =. Key -.~ (> Key e. L0 DB#DB LL =. Lk -. y. LLL =. (Key = > head L0 LL # LL LR =. ~. (< curtail > y.,l0 (LLL tdouble =. */ L0 ~ L0 LR NB. test of double LR =. (> tdouble # LR breadth = 3 0 Level =. y. D =. <'A' j =. 0 while. j < Level do. - 9 -

wr 'Level ', " j D =., DB make D wr D wr testd =. # L0 D wr tt =. (j + 2 = L0 testd wr (, > tt # D j =. j + 1 '*** ***' search = 3 0 'Start Goal' =. y. D =. Start Level =. 10 j =. 0 while. j < Level do. NB. wr 'Level ', " j D =., DB make"(1 0 D testd =. # L0 D tt =. (j + 2 = L0 testd NB. wr (#D, (#> tt if. (#D ~ (#> tt do. '*** end ***' return. D =. (, > tt # D NB. wr D Hit =. (> Goal e. L0 D # D if. 0 < #Hit do. wr > Hit j =. j + 1 '*** end ***' NB. rename for comparing Prolog calc. 2013/11/30 ============================ WAY = 'ab';'bc';'ae';'ef';'fe';'bf';'fb';'fg';'gf';'cg';'gc';'eh';'hi';'ih';'fi';'i f';'ij';'gj' NB. Hiro's Home Page ============================================ WAYH = 'ab';'bc';'cb';'af';'ae';'eh';'he';'hi';'ih';'ij';'ji';'jk';'ef';'fe';'fi';'i f';'fg';'gf';'fb';'bf';'fj';'jf';'gj';'jg';'gc';'cg';'cd' NB. (way data route ('Start, Goal' route = 3 0 Level =. 50 'Start Goal' =. y. D =. Start HN =. 1 j =. 0 while. j < Level do. NB. wr 'Level ', " j D =., DB make D testd =. # L0 D - 10 -

tt =. (j + 2 = L0 testd NB. wr (#D, (#> tt if. (#D ~ (#> tt do. goto_fin. D =. (, > tt # D if. 0 = #D do. goto_fin. Hit =. (> Goal = L0 (tail @, L0 D # D if. 0 < #Hit do. HNO =. HN + i. # Hit HNN =.,. HNO NN =. ((# Hit,3$'No.' NNN =. NN,. " HNN NB. wr > Hit HH =. ' ',"(0 1 > Hit NB. wr '-------' wr NNN,. HH HN =. HN + # Hit j =. j + 1 label_fin. '*** ', (" { HNO, ' routes found ***' RD3 = 3 3$'ABCDEFGHI' NB., 2 <\ "(1 RD3 NB. ----+ NB. AB BC DE EF GH HI NB. ----+ NB. <"(1,. > (L0 2 <\ RD3 NB. ----+ NB. AD DG BE EH CF FI NB. ----+ NB. connect vertex to interval data ============================= condata = 3 0 C0 =., 2 <\ "(1 y. C1 =., 2 <\ "(1 y. C0, C1 (], (. L0 C0, C1 WAY3 = condata RD3 RD4 = 4 4$'ABCDEFGHIJKLMNOP' WAY4 = condata RD4 RD5 = 5 5$'ABCDEFGHIJKLMNOPQRSTUVWXY' WAY5 = condata RD5-11 -