馬鹿みたいに計算しよう/中高数学駆け込み寺 素数判定の巻

今回から算数・数学とプログラミング学習の案内をします. 今回のミニ講座のテーマ, つまり素数判定のようなほぼ算数に近い内容もありますが, 少なくとも入門レベルでは中高数学でいう場合の数にあたる内容が多数を占めます.

競プロを深く遊び倒すときに大事なキーワード

まずプログラミング・情報科学の文脈で対応する単語を紹介します. それはデータ構造とアルゴリズムです.

あなたはこの講座を受講し, しかもここまで読み進めてきた勇士です. そんなあなたには, 何を忘れたとしてもこの言葉だけは絶対に覚えておいてほしいです. そのくらい重要な言葉です.

情報科学の古典的な話題でありながら, 現代でも色褪せないどころか最前線バリバリのテーマです. アルゴリズムを単純に「問題を解く手順」だとみなすなら, ありとあらゆる活動がアルゴリズムを考えているとさえ言えます. もちろん情報科学の文脈ではもっと限定的な意味を持たせていますが, そのくらい基本的で重要なテーマなのです.

アルゴリズムの世界

いわゆるAIやビッグデータ解析でも, どうやって効率的に計算するかが重要で, それはまさにアルゴリズムの問題なのです. 物理でも偏微分方程式の数値計算では, 精度の高い近似アルゴリズムの開発・実装が基本的な課題です.

もっと身近な例もあります. もしあなたの身近に公共交通機関があり, そこでICカードによる決済を使ったことがあるなら, そこにもアルゴリズムが潜んでいます. 例えば次のような論文があります.

もちろん素数判定・素因数分解を基礎にした, 暗号の理論もゴリゴリの実用的なアルゴリズムの問題です.

実用性からの競プロ案内

実用性の観点からもう一つ紹介します. あとで詳しく紹介する競技プログラミングに関わります. 暴力的に単純化すると, 与えられた問題を解くプログラムを提出する競技です. この中で問われるのがまさにアルゴリズム構築力です.

そして競技プログラミングで優秀な成績をおさめていると, それが仕事をする上でアピールポイントになる事実があります. 例えば次のAtCoder Jobsで実際の求人を見てみてください.

ベンチャー系の企業もあれば, 名だたる大企業や関連会社があります. 競プロで鍛えたアルゴリズム構築力を強く評価する企業もたくさんあるのです.

アルゴリズムの世界に挑む

単純に馬鹿みたいに大量に計算できて楽しい! 話から, 身近に多彩な応用があり実用性に満ちた話もあり, 学術的な深く広い話もあります. その分いろいろなアプローチがあり, いろいろな楽しみ方が考えられます.

ここでは算数・数学・プログラミングに関して高いレベルは仮定していないため, あくまで入門レベルの内容・アプローチを紹介します. もちろん私が提案するのは一つの道に過ぎません. もっとあなたにとってよいアプローチもあるかもしれません. ぜひ何が自分の気に入るか, 楽しみながら探してみてください.

勉強するときの注意: アルゴリズム学習とアプリ・ゲーム開発の違い

さて, データ構造とアルゴリズムの話をすぐにしたいところですが, 一つ注意があります. それはデータ構造とアルゴリズム系の勉強と, 世間でよく言われるアプリ開発やゲーム開発の勉強は食い合わせがよくありません. 今回はまずこの点に関して注意します.

アプリ開発・ゲーム開発で重要なのは, 既存の資産をどれだけうまく使うかです.

それらがやりやすいプログラミング言語を選び, ライブラリを調べ, それらを使いこなすのが重要です. プログラミング言語についても, 採用した各言語についてできる限り深い知見を持つべきです. ここで大事なのはいわば初学者が想像するふつうの勉強と言ってもいいでしょう.

まずはあなたが興味のある領域に適したプログラミング言語に関して, 最近出版された本で基本を一通り勉強するのをお勧めします.

そして一通り勉強したら, あとは作りたいモノを作りはじめてしまってください. 足りていない知識や技術がたくさんあるのに気付くはずです. これをいちいち基礎から勉強しようと思わないのがポイントです. 使えるようにすることを第一目標に, 必要なモノを必要な範囲で勉強して, いろいろなモノをどんどん作ってみてください.

ここではアプリ開発には深入りしないので, このくらいで簡単に終わらせます.

次回予告: 競プロへの取り組み方

次回からはデータ構造やアルゴリズム, 特に競技プログラミングに関して, 具体的な本やサービスなどを紹介します. ぜひ楽しみにしていてください.

ミニ講座のコンテンツ案内

改めてミニ講座三回分のコンテンツをまとめます. 必要に応じて何度でも復習してください.

本家メルマガ案内

最後に私の本家メルマガを案内しておきます.

数学・物理・プログラミング, そしてそれらを学ぶ上で大事な英語を中心とした語学の情報を発信しています. もしあなたが私の活動や私からの情報に興味があるなら, ぜひ登録しておいてください. 新しいコンテンツを作ったときにもこのメルマガで案内します.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.