アルゴリズムとデータ構造 補足資料10-2 「nクイーン」

Slides:



Advertisements
Similar presentations
N クイーン問題 N×N のチェス盤の上に、将棋の飛車と角 行の動きを同時にできる駒(クイーン) をお互いに動きを妨げないように N 個置 け。
Advertisements

SQL による数独の解法 青山学院大学理工学部 矢吹太朗・佐久田博司. 数独とは何か ナンプレとも呼ばれ る制約充足問題 各行・列・ブロック に 1 から 9 の数字を一 つずつ当てはめる 新聞等に載っている ものはとても簡単 人間には難しいもの → もある.
1 線形代数学. 2 履修にあたって 電子情報システム学科 必修 2005 年度1セメスタ開講 担当 草苅良至 (電子情報システム学科) 教官室: G I 511 内線: 2095 質問等は上記のいずれかに行なうこと。 注意計算用のノートを準備すること。
木探索によるCSPの解法 (Tree search algorithms for solving CSPs) 認知システム論 制約充足( 2 ) 制約をみたす組合せを探すエージェント バックトラック法 フォワードチェック 動的変数順序.
3次元nクイーン問題の 解に関する研究 論理工学研究室 伊藤精一
連続系アルゴリズム演習 第2回 OpenMPによる課題.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
工学部 知能情報工学科 准教授 高 尚策 (コウ ショウサク)
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
プログラミング基礎I(再) 山元進.
アルゴリズムと データ構造 第9回 再帰的アルゴリズム.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
2004年度JAVAゼミコンテスト作品 「Othello」
アルゴリズムとデータ構造 補足資料13-4 「2分探索木の追加・削除(ダイジェスト)」
アルゴリズムとデータ構造 2012年7月23日
時空間データからのオブジェクトベース知識発見
遺伝アルゴリズムによる NQueen解法 ~遺伝補修飾を用いた解探索の性能評価~
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
IT入門B2 ー 連立一次方程式 ー.
アルゴリズムとデータ構造 補足資料7-3 「単純選択ソートselsort.c」
数独パズルの難易度判定 ~解法ロジックを用いた数値化の提案~
ACM/ICPC World Finals への道
アルゴリズムとデータ構造 補足資料4-2 「線形探索」
アルゴリズムとデータ構造 2011年7月14日
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
システム開発実験No.7        解 説       “論理式の簡略化方法”.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
回帰モデル・クラス分類モデルを 評価・比較するための モデルの検証 Model validation
モデリングシミュレーション入門(井庭崇)
東京大学大学院情報理工学系研究科 Y.Sawa
MPIとOpenMPを用いた Nクイーン問題の並列化
問題解決技能トレーニング (SOCCSS法を援用) 1 問題の明確化(状況の把握(S;Situation)) 目標の明確化
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
アルゴリズムとデータ構造 補足資料10-1 「騎士巡回」
三浦元喜 北陸先端科学技術大学院大学 知識科学研究科 2007/9/7
アルゴリズムとデータ構造 補足資料14-2 「ダイレクトチェイニング法」
アルゴリズムとデータ構造 補足資料4-1 「メモリと配列」
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
アルゴリズムとデータ構造 補足資料6-2 「サンプルプログラムcat2.c」
実践プログラミング入門2 配列を使ってゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
数独の解生成と 解に対する番号付け 理学部 情報科学科 渡辺研究室 戸神星也.
計算の理論 I 正則表現とFAとの等価性 月曜3校時 大月 美佳 平成15年6月16日 佐賀大学知能情報システム学科.
第2回課題 配布した通り.氏名・学生番号を忘れないこと.
モンテカルロ法を用いた 立体四目並べの対戦プログラム
3次元Nクイーン問題の 解の存在の検証 07-1-037-0106 前波 大貴 情報論理工学研究室 宜しくお願いします。
知識科学研究科 知識システム構築論講座 林研究室 佛明 智
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造1 2006年7月11日
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
線形判別分析 Linear Discriminant Analysis LDA
Problem L: シャノワール 問題作成: 高橋 解法作成: 安達・高橋・前原 解説: 安達.
計算の理論 I ー正則表現とFAの等価性ー 月曜3校時 大月 美佳.
情報処理Ⅱ 2005年1月25日(火) レポート課題2の解説.
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
アルゴリズムとデータ構造 補足資料9-1 「ハノイの塔」
Othello G班         山崎 木下 山本 上手      .
Microsoft Excel 2010 を利用した 2項分布の確率計算
原口和也 高橋隆一 丸岡章 石巻専修大学 理工学部 情報電子工学科
アルゴリズムとデータ構造 補足資料7-1 「メモリでの『構造体の配列』」
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
アルゴリズムとデータ構造 補足資料5-3 「サンプルプログラムstrcat.c」
参考:大きい要素の処理.
大阪市立大学 孝森 洋介 with 大川,諏訪,高本
プログラミング 平成28年10月25日 森田 彦.
混合ガウスモデル Gaussian Mixture Model GMM
1 ひとりにしてくれ数 東北大学 大学院情報科学研究科 ◎鈴木 顕 内澤 啓 国立情報学研究所 情報学プリンシプル研究系 宇野 毅明.
ペンシルパズルの大道芸ステージショーへの応用
ペンシルパズル「一本線」のヒント数の扱いに関する解析
Presentation transcript:

アルゴリズムとデータ構造 補足資料10-2 「nクイーン」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志

バックトラックアルゴリズム とりあえずやってみる ダメなら戻って別の道を探る 試行錯誤(trial and error) あのとき別の道を選んでいたら、、、 試行錯誤(trial and error) 結局全部のケースをやってみる(完全解)

nクイーン(n-queens) チェスの「クイーン」

nクイーン(n-queens) チェスの「クイーン」、n x nの盤面上で、 n個のクイーンが お互いに取らない (効き筋にならない)                    お互いに取らない                    (効き筋にならない)                    ように配置

nクイーン(n-queens) この問題を解くためのデータ構造

nクイーン(n-queens) この問題を解くためのデータ構造 column 列 col = 0 col = 1 col = 2 row 行 row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 すでに効き筋 →FALSE queenを置ける →TRUE column 列 row 行 TRUE FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 すでに効き筋 →FALSE queenを置ける →TRUE これを2次元配列で 書いてもよいが、ここでは 次の3つの配列で表現 column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 TRUE FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 配列1: q_row[row] その行にqueenが いるときにFALSE いないときにTRUE column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 TRUE FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 配列2: q_se[col-row+N-1] 南東斜め筋は column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 TRUE FALSE col-row=-1 row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 配列3: q_sw[col+row] 南西斜め筋は col+rowが一定! column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 TRUE FALSE col+row=-3 row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) この問題を解くためのデータ構造 配列: q_pos[col]=row この配列だけ、 前の3つと値が 異なることに注意 column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row に、とりあえず 置いてみる。 column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row に、とりあえず 置いてみる。 効き筋を埋める column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

A B C nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row に、とりあえず 置いてみる。 次の候補は A, B, C column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE A B C row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row とりあえずA q_pos[1]=2 に置いてみる column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row とりあえずA 効き筋チェック column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

A nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row とりあえずA 次の候補はA column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE A row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row とりあえずA q_pos[2]=4 に置いてみる column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 配列: q_pos[col]=row とりあえずA 効き筋チェック column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) バックトラックによる解法 この場合には うまくいっていますが、 次の候補がなければ キャンセルして 前に戻る (バックトラック) column 列 col = 0 col = 1 col = 2 col = 3 col = 4 row 行 FALSE row = 0 row = 1 row = 2 row = 3 row = 4

nクイーン(n-queens) チェスの「クイーン」、n x nの盤面上で、 n個のクイーンがお互いに取らない   (効き筋にならない)ように配置 考え方: とりあえず、置いてみる。 行き詰ったら、前に戻って(バックトラック)、別の選択肢でやってみる。