Enviar pesquisa
Carregar
アルゴリズム+データ構造勉強会(14)
•
0 gostou
•
3,299 visualizações
N
noldor
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 12
Baixar agora
Baixar para ler offline
Recomendados
アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)
noldor
STC OC20210605 0と1の世界
STC OC20210605 0と1の世界
Yoshihiko Yamamoto
実践QBVH
実践QBVH
Shuichi Hayashi
アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)
noldor
アルゴリズム+データ構造勉強会(9)
アルゴリズム+データ構造勉強会(9)
noldor
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
noldor
アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)
noldor
アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)
noldor
Recomendados
アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)
noldor
STC OC20210605 0と1の世界
STC OC20210605 0と1の世界
Yoshihiko Yamamoto
実践QBVH
実践QBVH
Shuichi Hayashi
アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)
noldor
アルゴリズム+データ構造勉強会(9)
アルゴリズム+データ構造勉強会(9)
noldor
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
noldor
アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)
noldor
アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)
noldor
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
noldor
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
noldor
とりあえずはじめるChatOps
とりあえずはじめるChatOps
正貴 小川
Study 20131009
Study 20131009
fujii_t
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)
noldor
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)
noldor
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)
noldor
アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)
noldor
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
Masahiro Nagano
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
Sakura IoT Platform
Sakura IoT Platform
Osamu Ogasahara
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
Hidekazu Nakamura
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
ichiko_revjune
Mais conteúdo relacionado
Destaque
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
noldor
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
noldor
とりあえずはじめるChatOps
とりあえずはじめるChatOps
正貴 小川
Study 20131009
Study 20131009
fujii_t
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)
noldor
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)
noldor
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)
noldor
アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)
noldor
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Masahiro Nagano
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
Masahiro Nagano
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Masahiro Nagano
Sakura IoT Platform
Sakura IoT Platform
Osamu Ogasahara
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
Hidekazu Nakamura
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
ichiko_revjune
Destaque
(20)
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
とりあえずはじめるChatOps
とりあえずはじめるChatOps
Study 20131009
Study 20131009
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
AWSをテラフォーミングする会(Terraformハンズオン)
AWSをテラフォーミングする会(Terraformハンズオン)
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Sakura IoT Platform
Sakura IoT Platform
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
アルゴリズム+データ構造勉強会(14)
1.
アルゴリズム+データ構造 勉強会(14) 2013-05-26 アロハ)竹腰 彰成
2.
第14回 8クイーン問題
3.
8クイーン問題とは • チェス盤に8つのクイーンを置く • クイーンがそれぞれ取られないように並べられ れば成功 •
クイーンは縦横ななめの8方向にどこまでも進めら れる(飛車と角行を合わせた動き) • 何通りかの解があることがわかっている • 全部で92通り。鏡像・回転を除くと12通り • これをコンピュータですべての解を導く 図はWikipediaより
4.
力まかせ探索
5.
力まかせ探索とは • 別名「しらみつぶし探索」 • 8つのクイーンを配置した全部のパターンをチェックすれば解ける • 64! 64−8
! = 64! 56! = 64 ∗ 63 ∗ 62 ∗ 61 ∗ 60 ∗ 59 ∗ 58 ∗ 57 = 178,462,987,637,760通り • コンピュータがきわめて高速なら使えることもあるが、あまり実用的 ではない • 1秒間に1,000,000,000通りを確認できるなら178,462秒=約2日で解ける • それでも、まずはこれでやってみる(高速化は次回行う)
6.
8クイーンの基本フロー(1) 1. 初期化 2. for
(各配置パターン全部回るような条件) { 1. パターンを配置する(); 2. If (クイーンが取り合いできないことを確認()) { 1. パターンを表示する 3. } 3. } • まず、どうやって条件を判定するか
7.
チェス盤の表現方法 • チェス盤を2重配列で表現することにする for ($y
= 0; $y < 8; $y++) { for ($x = 0; $x < 8; $x++) { $chessboard[$y][$x] = 0; } } • クイーンがあれば1、なければ0とする
8.
クイーン同士が取り合えないことを確認(1) • 横にチェックしたとき、同じ筋に2つクイーンがあるとアウト。0個または1 つならセーフ function check_yoko($chessboard) { for
($y = 0; $y < 8; $y++) { $count = 0; for ($i = 0; $i < 8; $i++) { $count += $chessboard[$y][$i]; } if ($count >= 2) { return false; } } return true; }
9.
クイーン同士が取り合えないことを確認(2) • 同じように縦筋、ななめ筋もチェックする関数を作り、まとめて呼び出 せば完成 function check_chessboard($chessboard) { return
check_tate($chessboard) && check_yoko($chessboard) && check_naname($chessboard); } ※ななめ筋のチェックはすこし面倒
10.
8クイーンの基本フロー(2) 1. 初期化 2. for
(各配置パターン全部回るような条件) { 1. パターンを配置する(); 2. If (check_chessboard()) { 1. パターンを表示する 3. } 3. } • 次に、どうやってパターンを配置するか
11.
力技で配置 • 全パターンを配置するのはちょっと大変。「横方向に2つ置けない」ので、 $chessboard[$y][$x]のうち$yを固定してしまう。 for ($x0;
$x0 < 8; $x0++) { $chessboard[0][$x0] = 1; for ($x1; $x1 < 8; $x1++) { $chessboard[1][$x1] = 1; for ($x2; $x2 < 8; $x2++) { (省略) for ($x7; $x7 < 8; $x7++) { $chessboard[7][$x7] = 1; if (check_chessboard($chessboard[7][$x7])) { print_chessboard(); } $chessboard[7][$x7] = 0; // ループ内で同じ横筋に2個置かないように取り除く } (省略)
12.
実習 • ここまでの内容を踏まえて、力まかせ探索で8クイーン問題を解いて ください • 全部表示するには数日かかるので、1つでも表示されたら動くだろうという程 度のテストでOKです •
次回はこれを高速化します。そのため、実装を完成させてください。 • 来週はお休みし、再来週に次回を行います。 • どうしても解けない場合でも「クイーンを互いに取り合えないことの確認」関 数は作ってください。
Baixar agora