けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

パズルとアルゴリズムのコラボ本を書きました!

1. はじめに

お久しぶりです!
けんちょん本のけんちょんです。

最近はアルゴリズムがとても盛り上がっていますね。今回新たなアルゴリズム本を上梓させていただくことになりました!

発売予定日は 2022/4/20 です。一部大型書店では、もうすでに並んでいるはずです。今回の記事では、この本を通してお届けしたいメッセージや、想定読者、内容などについて簡単に紹介させていただきます。

amazon ページへのリンク

f:id:drken1215:20220413211445p:plain

 

2. 本書の内容と対象読者

2-1. 本書の内容

百聞は一見に如かずということで、まずは目次構成をお見せします!

第 1 章:アルゴリズム入門

  • 第 1 話:「テンパズル」 〜 力まかせ探索
  • 第 2 話:「小町算」 〜 再帰関数
  • 第 3 話:「虫食算」 〜 枝刈り

第 II 章:グラフアルゴリズム

第 III 章:発展的なアルゴリズム

  • 第 7 節:「15 パズル」 〜 反復深化 A*
  • 第 8 節:「4 × 4 オセロ」 〜 α-β 探索
  • 第 9 節:「編集距離」 〜 動的計画法
  • 第 10 節:「ドミノタイリング」 〜 マッチング法

f:id:drken1215:20220413124240p:plain

端的に言うと、


  • 誰もが馴染みのある代表的なパズルを楽しみながら、
  • パズルのソルバー作りをとおして、
  • アルゴリズムの考え方にも一通り習熟していく

ことを目指した書籍です。とにかく眺めているだけで楽しくなるような内容を目指しました!!

 

ページサンプル 1 (迷路の紹介)

f:id:drken1215:20220413212313p:plain

ページサンプル 2 (覆面算を作る!)

f:id:drken1215:20220413212323p:plain

ページサンプル 3 (数独を作る!)

f:id:drken1215:20220413212332p:plain

ページサンプル 4 (迷路ソルバーを油分け算に応用!)

f:id:drken1215:20220413212548p:plain

ページサンプル 5 (ドミノタイリング)

f:id:drken1215:20220413212824p:plain

2-2. 対象読者

本書は、「パズルが好きな方」と「アルゴリズムを学びたい方」のどちらも楽しめるものを目指しました。

  • 純粋にパズルが好きな方
  • パズルのソルバー作りに関心のある方
  • 大学のレポートで数独などのプログラムを作る必要のある方
  • アルゴリズムを一通り楽しく学びたい方
  • アルゴリズムがどんなものか雰囲気で感じたい方

などなど、さまざまな方に楽しんでいただけると思います!

予備知識として、C++ の文法に一通り習熟していることを仮定しています。しかしながらプログラミングの経験のない方も楽しめるように、ページを眺めているだけでもパズルを解くアルゴリズムの考え方が掴めるように、大量の図を用いて解説しました。

 

3. アルゴリズムと他分野のコラボ

最近アルゴリズムがとても流行っています。今後もさらに何冊ものアルゴリズム本が出版されると思います!

今後さらにアルゴリズムが広まるために大事なことは、アルゴリズムがさまざまな分野とコラボすることだと考えています。米田優峻さんによる「数学 x アルゴ」本はとても画期的でしたね。

amazon ページへのリンク

本書は、パズルとアルゴリズムのコラボを目指します。これまでも、パズル的なアルゴリズムの本はいくつか出ています。しかしながら、数独・虫食算・迷路といった、ザ・パズルとも言うべきパズルを題材にしたアルゴリズムの本は (僕の知る限り) 出ていませんでした。

そこで今回は、ザ・パズルを題材として、アルゴリズム設計技能をひととおり磨ける書籍を目指しました!

f:id:drken1215:20220413223744p:plain

 

4. 「パズル × アルゴリズム」に込めた想い

「パズル」と「アルゴリズム」を結びつけることは、一見ごく自然なようで、実はとても難しいことでした。なぜならパズルの世界では、「パズルは決まった解き方ではなく、問題ごとに工夫を凝らして解くのが楽しい」という考え方が強くあります。

一方アルゴリズムは、「その問題に対するどんな入力データに対しても、同じやり方で答えを導く」ものです。パズルをコンピュータで解くというのは、一歩間違えれば、パズルの魅力を損いかねない考え方を含むものにも思えます。

たとえば数独ソルバーを作るとき、人間が数独を解くための手筋をトレースしたソルバーは広く受け入れられますが、バックトラッキングで解くソルバーに対しては推奨されない場面をよく目にします。

f:id:drken1215:20220413222002p:plain

しかし本書の執筆を通して、実際にパズルのソルバーを作っていくうちに、パズルのことをよく知らなければよいソルバーは作れないことにしばしば気付きました。

パズルのソルバーを作ることは、単にパズルの問題を解く作業をコンピュータに任せるというだけではなく、パズルに対する理解を深める営みでもあるのです!

それだけではありません。パズルを解くアルゴリズムを考えるということは、もうそれ自体が一つのパズルなのです。そんな新たなパズルの楽しさが存分に伝われば幸いです。

 

5. おわりに

最後になりますが、本書を執筆するにあたっては、たくさんの方のお世話になりました。改めて感謝の気持ちでいっぱいです。

アルゴリズムにはものすごいポテンシャルがあると信じています。今から 600 年も前に印刷技術が発明されたことで、識字率が大きく向上したことで世界が大きく変わったように、アルゴリズムを楽しむ方が増えることで世界が大きく変わる。そんな未来に思いを馳せています。個人的な話で恐縮ですが、アルゴ式もそんな未来を思い描きながら創っています。

本書を通して、パズルが好きな方が「アルゴリズムを考えるというパズル」に関心を抱いたり、アルゴリズムが好きな方がパズルの世界を楽しんだりするキッカケを作れたならば、とても嬉しいです!!