ISBN 9784798153612

もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問

もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問
著者
増井 敏克
出版社
翔泳社
刊行
2018-02

概要

数学パズルを解きながらアルゴリズム的思考を実装レベルで定着させる

想定読者

Ruby または JavaScript の基本文法を習得済みで、アルゴリズムの初歩的な知識はあるが実装力を底上げしたいプログラマ。前作『プログラマ脳を鍛える数学パズル』を終えた読者にも最適。

こんな人には向いていない

  • アルゴリズムの知識がまったくない入門者には、本書の出発点となる前提知識(基本的な探索・再帰の概念)が欠けており吸収が難しい
  • Ruby・JavaScript 以外の言語を軸に学習している読者には、解答コードをそのまま活用しにくい面がある
  • アルゴリズムの理論的背景(計算複雑性・数学的証明)を体系的に学びたい読者には、パズル形式の実装例中心であるため物足りない

読了後にできるようになること

  • メモ化再帰を使って計算コストを下げる手法を、具体的なパズル題材で実装できる
  • 一筆書き問題やグラフ探索に代表される古典的アルゴリズムを、自分でコードに落とし込む経験を積める
  • 組み合わせ最適化(TSP 系の問題など)に対する思考の枠組みを70問の演習を通じて習得できる
  • 数学的な工夫(進数変換・数列の性質など)を活用して処理を高速化するアプローチを理解できる
  • Ruby と JavaScript 両方の解答を比較することで言語を超えたアルゴリズム表現の共通点と差異を把握できる

本書のキー概念(章解説)

  • 序章 パズル問題を解くコツ — 70問を解く前に読むことで問題の向き合い方の指針が得られる。飛ばさず読むとその後の詰まりが減る
  • 第 1 章 第1章 入門編 素直に実装して感覚をつかもう(Q01〜Q16) — 多数決・山手線スタンプラリーなど直感的な問題を素直な実装で解く。コードを手で動かしながら進めると感覚が定着しやすい
  • 第 2 章 第2章 初級編 メモ化などを使って処理時間を意識しよう(Q17〜Q38) — メモ化再帰が本書の重要テーマとして本格的に登場する章。Q20(酔っ払いの帰り道)を解き終えたタイミングで計算量の削減効果を実感できる
  • 第 3 章 第3章 中級編 数学的な工夫を考えて処理を高速化しよう(Q39〜Q60) — ブルートフォースから数学的アプローチへの切り替えが求められる。詰まったら解答コードを先に見て逆算するのも有効
  • 第 4 章 第4章 上級編 複雑な処理を正確に実装しよう(Q61〜Q70) — Q63(永遠に続くビリヤード)やQ65(n-Queenで反転)など実装難度が高い問題が集中。前3章で身につけたパターンを組み合わせる場面が多い

ハイライト

  • 一筆書きや組み合わせなどの定番問題から、『サンタクロースが効率よく家を回るには?』『カップルを隣同士に並ばせない席順は?』といったものまで、楽しみながら思考が広がる問題を70問用意しました。(パズルの題材が抽象的な練習問題ではなく日常場面から発想されており、学習意欲を持続させる設計意図が端的に示されている)
  • 効率よく処理するプログラムを作成するには、アルゴリズムを工夫することが求められています。本書は、さまざまな数学パズルを解くことにより、『よいアルゴリズム』を身につけることを目的としています。(本書が単なるパズル本ではなく実装品質の向上を目指した設計であることを示す箇所)

外部からの言及

  • メモ化再帰の解説が充実しているとして、メモ化の学習記事の中で参照書として言及されている。TECH PLAY 誌連載のパズル問題(本書著者執筆)を解く記事でも、本書のメモ化解説が詳しいと明記されている。(qiita)
  • 本書の問題を実際に JavaScript で実装し学習する読者が確認できる。メモ化を使った席順パズルの実装として、本書が学習の起点として活用されている事例がある。(qiita)

編集メモ

Qiita 引用 2 件 / 累計 likes 2。前作『プログラマ脳を鍛える数学パズル』と比較して言及数が少なく、外部シグナルは限定的。ただし Qiita 上でメモ化実装の参考書として実際に参照されており、類書の少ないパズル形式アルゴリズム入門として補完的な位置づけにある

読む前に押さえておきたいこと

  • Ruby または JavaScript でループ・関数・再帰の基本的なコードを書ける程度の習熟
  • 再帰やスタックといったアルゴリズムの初歩的な概念(前作または同等書を読了済みであることが望ましい)
  • コードを実行して動作確認できる開発環境(ブラウザの開発者ツールや Ruby 実行環境)が手元にあること

学習のコツ

  • 序章は必ず読む。問題を解く前の考え方の指針が示されており、これを飛ばすと第1章から詰まりやすくなる
  • 第2章のメモ化問題群は、まず再帰のみで実装してから次にメモ化を適用し実行時間を比較するという2ステップで取り組むと効果が体感しやすい
  • Ruby と JavaScript の解答が両方掲載されているため、普段使わない言語の解答も読み比べることで言語非依存のアルゴリズム発想を鍛えられる
  • 詰まった問題は解答コードを見てから逆算的に読み解く方法でも学習効果がある。全問自力解答にこだわらず、解法パターンの把握を優先する
出版社による内容紹介

全国のプログラマを悩ませたパズル集、待望の新作! 問題を解きながら、楽しくアルゴリズムを身につけよう 【本書の特徴】 ・パズル問題をソースコードで解く ・楽しみながらプログラミングが上達 ・4人のキャラクターによるやさしい解説 ・アルゴリズムを深く理解できる ※初歩的なアルゴリズムの知識があることを前提としています 【本書で使用する言語】 Ruby/JavaScript ※すべての問題で、上記2つの言語の解答を掲載しています ※どの言語でも活用できるような解説の仕方をしていますが、上記のどちらかを習得していると、より理解しやすくなります 【内容紹介】 コンピュータを取り巻く環境は日々、大きく変化しています。 そんな時代の変化の中でも、変わらずに 重要とされているのが「アルゴリズム」です。 効率よく処理するプログラムを作成するには、 アルゴリズムを工夫することが求められています。 本書は、さまざまな数学パズルを解くことにより、 「よいアルゴリズム」を身につけることを目的としています。 一筆書きや組み合わせなどの定番問題から、 「サンタクロースが効率よく家を回るには?」 「カップルを隣同士に並ばせない席順は?」といったものまで、 楽しみながら思考が広がる問題を70問用意しました。 【目次(抜粋)】 ★序章 パズル問題を解くコツ ★第1章 入門編 素直に実装して感覚をつかもう Q01:一発で決まる多数決 Q02:山手線でスタンプラリー など ★第2章 初級編 メモ化などを使って処理時間を意識しよう Q20:酔っ払いの帰り道 Q37:ダイヤルロックを解除せよ! など ★第3章 中級編 数学的な工夫を考えて処理を高速化しよう Q40:沈みゆく島で出会う船 Q43:隣り合えないカップル など ★第4章 上級編 複雑な処理を正確に実装しよう Q63:永遠に続くビリヤード Q65:n-Queenで反転 など

この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。

質問に答えるだけで、
あなたに合う専門書が見つかる

IT・デザイン・士業・医療・経理・教育・研究 ほか、あらゆる分野の専門書と 「読む順序」(学習ロードマップ)を収録。何を選べばいいか分からなくても、 いくつかの質問に答えるだけでたどり着けます。