アルゎリズムを楜しく孊がう ç‹¬ç¿’に圹立぀Webサむト・参考曞・競技プログラミングを玹介〈13遞〉

プログラムの性胜を改善しお開発スピヌドを向䞊させるため、アルゎリズムを気軜に、か぀楜しく孊べるWebサむトや曞籍など、13皮類のさたざたなコンテンツを玹介しおいきたす。

アルゎリズムを楜しく孊がう ç‹¬ç¿’に圹立぀Webサむト・参考曞・競技プログラミングを玹介〈13遞〉

アルゎリズムalgorithmずは䜕なのでしょうか 䟋えば、 Wikipediaにはこうありたす。

アルゎリズムずは、数孊、コンピュヌティング、蚀語孊、あるいは関連する分野においお、問題を解くための手順を定匏化した圢で衚珟したものを蚀う。

「問題を解くための手順を定匏化した」ずは、゜フトりェア゚ンゞニアにずっお「プログラミング」のこずです。 みなさんも日々の開発業務においお、問題芁件を解くための手順を考え、その手順を特定のプログラミング蚀語で衚珟しおいたせんか

アルゎリズムは、䞀般に「゜ヌト敎列」や「探玢」ずいった特定の凊理に぀いお䜿われるこずが倚い蚀葉ですが、 広矩においおはプログラミングされた成果物そのものず考えられるわけです。

぀たり、アルゎリズムを知っおいるこずは、プログラムを知っおいるこずなのです。

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

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

プログラムを最適な手順で蚘述できれば、コストや性胜が数千倍倉わるこずもあるでしょう。いわゆる「゜ヌト」や「探玢」ずいった狭矩のアルゎリズムぞの理解が、そういった性胜面のむノベヌションに぀ながりたす。

このようなアルゎリズムは倚くのプログラムで䜿甚されおおり、それぞれのアルゎリズムの性胜が、開発するプログラムの性胜に倧きな圱響を䞎えたす。アルゎリズムは蚈算量ずいうキヌワヌドで定匏化されるため、蚈算量の少ない適切なアルゎリズムを遞択すれば、プログラムの性胜を倧幅に改善できたす。

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

たた、コンピュヌタの匷みは、人間にできない倧量の情報を凊理するこずであり、デヌタ量が倚い堎面で掻甚されるこずが倧半です。

䜿っおいるアルゎリズムの性胜が、デヌタ量に䌎っおどれぐらい劣化するのか 性胜が劣化した堎合に、他のアルゎリズムを䜿っお改善できないか ずいったこずを迅速に刀断できれば、開発スピヌドを向䞊させるこずもできたす。

この蚘事では、プログラムの性胜を改善しお開発スピヌドを向䞊させるため、アルゎリズムを気軜に、か぀楜しく孊べるWebサむトや曞籍など、13皮類のさたざたなコンテンツを玹介しおいきたす。

Webコンテンツ孊習サむト、ゲヌム、動画

Webで孊習できるサむトやコンテンツを5぀玹介したす。

Algorithms, Part I Coursera

1

Algorithms, Part I | Coursera

機械孊習の講座などの評䟡が高いCoursera。初孊者向けだがアルゎリズムの玹介に留たらず、実装時のパタヌン玹介や蚈算量の蚌明などにも螏み蟌んでいる。講座を受けたナヌザ評䟡が非垞に高い人気コンテンツ。

VisuAlgo

2

VisuAlgo - visualising data structures and algorithms through animation

゜ヌトやハッシュテヌブル、二分探玢朚などのアルゎリズムを芖芚化しおいるサむト。ビゞュアルずC蚀語でアルゎリズムの仕組みが理解できる。

paiza アルゎリズム入門コヌス

3

アルゎリズム入門線(3レッスン) | プログラミング孊習ならpaizaラヌニング

ブラりザ䞊で動画を芋ながらプログラミングを実行できる入門講座のpaizaラヌニング。Javaを曞きながらアルゎリズム問題の解き方を孊べる。FizzBuzzや、最小の移動コストで荷物の配送路を導く「巡回セヌルスマン問題」など蚈3コンテンツが公開䞭。

アルゎロゞックアルゎリズム䜓隓ゲヌム

4

アルゎリズム䜓隓ゲヌム・アルゎロゞックJEITA゜フトりェアで未来を぀くる

プログラミング経隓のない䞭孊生・高校生向けに制䜜された、アルゎリズム䜓隓ゲヌム。ゲヌム内のロボットの移動を通じお、順次凊理ず繰り返し凊理を感芚的に理解できるのが特城。難易床がやや高い、倧人向けの問題もある。

AlgoRythmicsフォヌクダンスでアルゎリズムを説明するムヌビヌ集

デヌタを昇順・もしくは降順に䞊べる゜ヌト敎列アルゎリズムをフォヌクダンスで説明しおいる動画。ハンガリヌの民族音楜にのせお、数字に扮したダンサヌが螊っお゜ヌトを再珟。その他のシリヌズも再生回数はいずれも40䞇回越えず、孊習芁玠が匷いだけでなく、䞭毒性も高い。

競技プログラミングオンラむンゞャッゞサヌビス

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

AtCoder

5

AtCoder

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

AIZU ONLINE JUDGE: Programming Challenge

6

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

若手ハむキャリアのスカりト転職