エンジニアHubPowered by エン転職

若手Webエンジニアのための情報メディア

アルゴリズムを楽しく学ぼう! 独習に役立つWebサイト・参考書・競技プログラミングを紹介〈13選〉

プログラムの性能を改善して開発スピードを向上させるため、アルゴリズムを気軽に、かつ楽しく学べるWebサイトや書籍など、13種類のさまざまなコンテンツを紹介していきます。

アルゴリズム(algorithm)とは何なのでしょうか? 例えば、 Wikipediaにはこうあります。

アルゴリズムとは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。

「問題を解くための手順を定式化した」とは、ソフトウェアエンジニアにとって「プログラミング」のことです。 みなさんも日々の開発業務において、問題(要件)を解くための手順を考え、その手順を特定のプログラミング言語で表現していませんか?

アルゴリズムは、一般に「ソート(整列)」や「探索」といった特定の処理について使われることが多い言葉ですが、 広義においてはプログラミングされた成果物そのものと考えられるわけです。

つまり、アルゴリズムを知っていることは、プログラムを知っていることなのです。

プログラムの性能を改善し、開発スピードを向上させるために

プログラムを知っていると、どんなことが起きるのでしょうか?

プログラムを最適な手順で記述できれば、コストや性能が数千倍変わることもあるでしょう。いわゆる「ソート」や「探索」といった狭義のアルゴリズムへの理解が、そういった性能面のイノベーションにつながります。

このようなアルゴリズムは多くのプログラムで使用されており、それぞれのアルゴリズムの性能が、開発するプログラムの性能に大きな影響を与えます。アルゴリズムは計算量というキーワードで定式化されるため、計算量の少ない適切なアルゴリズムを選択すれば、プログラムの性能を大幅に改善できます。

プログラムの性能に詳しくなり、どれぐらいの負荷に耐えられるかといった疑問に答えられれば、追加開発の必要性を説いたり、適切なキャパシティプランニングが行えるようにもなります。

また、コンピュータの強みは、人間にできない大量の情報を処理することであり、データ量が多い場面で活用されることが大半です。

使っているアルゴリズムの性能が、データ量に伴ってどれぐらい劣化するのか? 性能が劣化した場合に、他のアルゴリズムを使って改善できないか? といったことを迅速に判断できれば、開発スピードを向上させることもできます。

この記事では、プログラムの性能を改善して開発スピードを向上させるため、アルゴリズムを気軽に、かつ楽しく学べるWebサイトや書籍など、13種類のさまざまなコンテンツを紹介していきます。

Webコンテンツ:学習サイト、ゲーム、動画

Webで学習できるサイトやコンテンツを5つ紹介します。

Algorithms, Part I (Coursera)

algorithms_coursera

Algorithms, Part I | Coursera

機械学習の講座などの評価が高いCoursera。初学者向けだがアルゴリズムの紹介に留まらず、実装時のパターン紹介や計算量の証明などにも踏み込んでいる。講座を受けたユーザ評価が非常に高い人気コンテンツ。

VisuAlgo

algorithms_visualgo

VisuAlgo - visualising data structures and algorithms through animation

ソートやハッシュテーブル、二分探索木などのアルゴリズムを視覚化しているサイト。ビジュアルとC言語でアルゴリズムの仕組みが理解できる。

paiza アルゴリズム入門コース

algorithms_paiza

アルゴリズム入門編(3レッスン) | プログラミング学習ならpaizaラーニング

ブラウザ上で動画を見ながらプログラミングを実行できる入門講座のpaizaラーニング。Javaを書きながらアルゴリズム問題の解き方を学べる。FizzBuzzや、最小の移動コストで荷物の配送路を導く「巡回セールスマン問題」など計3コンテンツが公開中。

アルゴロジック(アルゴリズム体験ゲーム)

algorithms_algo

アルゴリズム体験ゲーム・アルゴロジック|JEITAソフトウェアで未来をつくる

プログラミング経験のない中学生・高校生向けに制作された、アルゴリズム体験ゲーム。ゲーム内のロボットの移動を通じて、順次処理と繰り返し処理を感覚的に理解できるのが特徴。難易度がやや高い、大人向けの問題もある。

AlgoRythmics(フォークダンスでアルゴリズムを説明するムービー集)

データを昇順・もしくは降順に並べるソート(整列)アルゴリズムをフォークダンスで説明している動画。ハンガリーの民族音楽にのせて、数字に扮したダンサーが踊ってソートを再現。その他のシリーズも再生回数はいずれも40万回越えと、学習要素が強いだけでなく、中毒性も高い。

競技プログラミング(オンラインジャッジサービス)

与えられた問題を解決するためのプログラムを組み、その正解数や速さを競う競技プログラミングを2つ紹介します。

AtCoder

algorithms_atcoder

AtCoder

AtCoderではアルゴリズムを用いる問題を出題し、プログラミングコンテストを開催している。コンテスト終了後に解説スライドや復習動画が公開されるため、初心者にも優しい。

AIZU ONLINE JUDGE: Programming Challenge

algorithms_aoj

AIZU ONLINE JUDGE: Programming Challenge

会津大学が運営しているオンラインジャッジングサイト。過去のプログラミングコンテストで出題された問題のほか、アルゴリズムを初めて学ぶ人向けの基礎問題コースもある。

アルゴリズムが学習できる書籍

独学の基本でもある日本語の参考書籍を6冊紹介します。

アルゴリズム図鑑 絵で見てわかる26のアルゴリズム

著:石田保輝、宮崎修一 刊:翔泳社

基本となる26のアルゴリズムをすべてイラストで図解。具体例を示しつつ、考え方を簡潔に記しているので読み進めやすい。書籍のもととなったアプリ「アルゴリズム図鑑」では、アニメーションで解説されている。

なっとく!アルゴリズム

著:アディティア・Y・バーガバ 監訳:株式会社クイープ 刊:翔泳社

イラストを多く使い、各アルゴリズムを噛み砕いて説明している。下記リポジトリでさまざまなプログラミング言語によるサンプルコードも公開されており、本の内容を手を動かして理解することができる。

おうちで学べるアルゴリズムのきほん

著:鈴木浩一 刊:翔泳社

自宅のPCで試しながらネットワークやデータベースを知る「おうちで学べる」シリーズのアルゴリズム版。「アルゴリズムがどう使われているか」にフォーカスし、暗号化や機械学習でどんなアルゴリズムが使われているかにも触れている。

Scratchで学ぶ プログラミングとアルゴリズムの基本

著:中植正剛、太田和志、鴨谷真知子 刊:日経BP

子供向けと言われているプログラミング言語「Scratch」を使ってサーチやソートを学ぶ「アルゴリズムのキホンを学ぼう」の章がある。

アルゴリズムの基本

著:トーマス・H・コルメン 訳:長尾高弘 刊:日経BP

入門書を読み終わった中級者以上向き。MITの教科書として書かれた『アルゴリズムイントロダクション』のエッセンスを凝縮している。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 | マイナビブックス

著:渡部有隆 協力:Ozy、秋葉拓哉 刊:マイナビ

先述したAIZU ONLINE JUDGE の初心者向け講座の内容を書籍化。アルゴリズムとデータ構造を分かりやすく解説するほか、同サイトで実際の問題を解きながらアルゴリズムが学習できる。

おわりに

みなさんもアルゴリズムの理解を深め、適切な使い方によって高性能なプログラムを迅速に開発すれば、社会のイノベーションがもっと早く、たくさん起きると期待しています。これをきっかけに、アルゴリズムの勉強を始める人が一人でも増えることを願ってやみません。

記事監修

樽石将人(たるいし・まさと)Retty CTO(最高技術責任者)
レッドハットおよびヴィーエー・リナックス・システムズ・ジャパンにて、OS、コンパイラー、サーバーの開発を経験後、グーグル日本法人に入社。日米のオフィスを行き来し、システム基盤、Googleマップのナビ機能、モバイル検索の開発・運用に従事。東日本大震災時には、安否情報を共有するGoogleパーソンファインダーなどを開発。その後、楽天にて次世代プラットフォーム開発を担当し、2014年6月よりRettyにCTOとして参画。海外への事業展開に向け、技術チームをリードする。

関連記事

編集:薄井千春(ZINE)