プログラミングを勉強する上で、アルゴリズムの勉強は避けては通れません。
しかし、アルゴリズムとは何なのか、また、どのように勉強すればよいのか、わからない人も多いことでしょう。
この記事では、アルゴリズムの概要や、勉強に最適なWebサイト・書籍を紹介します。また、アルゴリズムを学習する意味や、わかりやすいアルゴリズムの例も紹介。
これを参考にして、今日からアルゴリズムの勉強を始めましょう。
※記事内の価格は執筆時の内容です。最新の情報は公式サイト等でご確認ください
この記事は現役エンジニアによって監修済みです。
この記事の目次
そもそもアルゴリズムとは?
アルゴリズムは、プログラミングにおける考え方の1つです。
まずは、アルゴリズムの意味について解説します。
アルゴリズムは「問題解決の手順ややり方」
アルゴリズムは、簡単に言うと「問題解決の手順ややり方」。
ある問題が存在し、それを解決するための具体的な手順・やり方を示したものがアルゴリズムです。
どんな人でもアルゴリズムの通りに行動すれば同じ結果が得られ、また、問題が解決できれば良いので、アルゴリズムは複数考えられることがポイント。
手順・やり方が異なっていたとしても、問題を解決するものであれば全てアルゴリズムと呼べます。
アルゴリズムは昔から存在した
アルゴリズムという言葉は最近になって認知されてきましたが、概念自体は昔から存在していました。
将棋を例に挙げると、王将をとるためにどのような手をさせばよいかを考えることが該当します。
ほかにも、魔方陣や数独もどのように数字を配置すればルールを満たせるかを考えることも同様です。
このように、ある問題を解決するために手段を考えるという意味で、アルゴリズムは古くから存在していたのです。
アルゴリズムの語源は?
アルゴリズムという言葉の語源は、「演算方法」という意味の英単語「algorithm」です。
「algorithm」は、9世紀の科学者フワーリズミーが著した『アルゴリトミ』に由来しています。
『アルゴリトミ』は、四則演算・代数方程式などの数学に関する理論が記されており、彼自身も科学者として数学・天文学などの研究で大きな功績を残しています。
アルゴリズムの学習におすすめのWebサイト・サービス
ここでは、アルゴリズムの勉強におすすめのWebサイト・サービスを3つ紹介します。
VisuAlgo
出典元:VisuAlgo
1つ目のサイトは、VisuAlgoです。
アルゴリズムを可視化してデータの動きを観察できます。
プログラムにするとアルゴリズムの動作を捉えづらいですが、可視化してみると分かりやすいです。
また、プログラムの命令とデータの動きを対応付けて追跡できるので、さらに分かりやすく理解できます。
アルゴリズムの動きを分かりやすく理解したい人は、まずVisuAlgoで確認するのがおすすめです。
VisuAlgo – アニメーションを介してデータ構造とアルゴリズムを可視化する (Japanese)
paizaラーニング
出典元:paizaラーニング
2つ目のサイトは、paizaラーニングです。
プログラミング初心者に向けて、動画解説をメインにした学習サービスを提供しています。
paizaラーニングには、アルゴリズムが学べる「アルゴリズム入門編」というコースが用意されています。
一部の動画を無料で閲覧できますが、月額600円の有料会員に登録すればすべての動画を閲覧可能。
また、動画視聴ページにはソースコードが記述できるエディタもあるので、動画を見ながらプログラミングも実践できます。
アルゴリズム入門編のレッスン一覧 | プログラミング学習サービス【paizaラーニング】
この記事もオススメ
Coursera
出典元:Coursera
3つ目のサイトは、Courseraです。
アメリカのスタンフォード大学の教授が立ち上げたオンライン学習サービスで、大学の講義を動画を通して受けられるのが特徴。
動画の他にも、小テストなども行っており、力試しができます。
英語のサイトですが、アルゴリズムの講義含めていくつかの講義動画には、日本語の字幕が付いているので、日本人でも利用できます。
アルゴリズムの思考力を鍛えられるプログラミング問題が解けるWebサイト・サービス
アルゴリズムは、知識としてインプットするだけでなく、実際にプログラミングで応用することでスキルが身につきます。
ここでは、アルゴリズムに関わるプログラミング問題を解けるWebサイト・サービスを3つ紹介します。
AtCoder
出典元:AtCoder
1つ目は、AtCoderです。
プログラミングコンテストを定期的に開催しているサイトで、プログラミング問題が解けます。
持っているスキルに応じてランク認定されるので、スキルの把握やランクアップを目指すためのモチベーションとして利用できます。
AtCoderで出される問題は、ただ動作すれば良いプログラムを書けばいいわけではありません。
少ない処理回数で問題を解決できるプログラムを書かなければならないため、アルゴリズムをしっかり考える良い機会になります。
AtCoder:競技プログラミングコンテストを開催する国内最大のサイト
この記事もオススメ
AIZU ONLINE JUDGE
2つ目は、AIZU ONLINE JUDGE(AOJ)です。
会津大学が開設したプログラミング問題を解けるサイトで、プログラムをオンラインで採点してくれます。
採点では、コンパイル可否・実行可否だけでなく、メモリ消費を節約しているかも評価されます。
そのため、ただ動作するプログラムを書けばよいわけでなく、メモリ消費を抑えられるアルゴリズムを考えなければなりません。
AIZU ONLINE JUDGE: Programming Challenge
Topcoder
出典元:Topcoder
3つ目は、Topcoderです。
AtCoderと同じく、定期的にプログラミングコンテストを開催しているサイトです。
Topcoderもスキルに応じて色によるランク付けがされます。最高ランクであるレッドコーダーはたどり着いた人はごく少数です。
Topcoder Challenge Listings | Topcoder Community | Topcoder
アルゴリズムの学習におすすめの本
ここでは、アルゴリズムの学習におすすめの本を6つ紹介します。
アルゴリズム図鑑 絵で見てわかる26のアルゴリズム
数あるアルゴリズムの中から26個のアルゴリズムをイラスト付きで解説しています。
イラストと簡潔な文章で解説しているので、すっと頭に入りやすいです。アルゴリズムのイメージができるようになりたいなら、ぜひ読んでみてください。
アルゴリズムを、はじめよう
アルゴリズムの基本ともいえる、探索アルゴリズム・整列アルゴリズムの中から最も利用されるものだけを重点的に解説しています。
これが理解できれば、多くのプログラミング問題で応用できます。基本的なアルゴリズムから理解していきたい人におすすめです。
なっとく!アルゴリズム
イラストを用いてアルゴリズムをわかりやすく解説している本です。
解説しているアルゴリズムは、どれも基本的なもので今後プログラミングをするうえで頻繁に応用できます。
世界でもっとも強力な9のアルゴリズム
検索エンジンのインデクシングやセキュリティなど、実例を取り上げなから応用されている9つのアルゴリズムについて解説しています。
実例を交えることでアルゴリズムの仕組みだけでなく、有用性があるということも理解できます。
アルゴリズムイントロダクション
アルゴリズムやデータ構造について、仕組み・計算量などを科学的根拠に基づいて解説した本著。
また、どのようにアルゴリズムを考えていくかについても解説しており、章末の問題を解くことでスキルとして身につけられます。
元はMITの教育用テキストのため、アルゴリズムのイメージがある程度できた後にガッツリ学びたい人におすすめです。
プログラミングコンテストチャレンジブック
実際にプログラミングコンテストに挑んだ著者が書いたプログラミングコンテストの入門本です。
初心者に易しい問題から、プログラマーを悩ませる問題まで、数々の問題を取り上げていますので、飽きることなく読み進められます。
プログラミングコンテストに参加して実践しながらアルゴリズムを理解したい人は、ぜひ購入しておきたい書籍です。
プログラミングのためにアルゴリズムを学ぶ意味は?
ここでは、プログラミングの勉強においてアルゴリズムを学ぶ意味について解説します。
効率のよいプログラムの構築に役立つ
アルゴリズムを学べば、効率的なプログラムを構築できます。プログラムを構築する際は、実行速度とメモリ消費のことを考えなければなりません。
実行速度が遅かったり、メモリを大量消費したりするプログラムは、正しく動作できても実用するには難があります。
そのため、正しく動作してかつ高速でメモリを節約するようなプログラムが求められるのです。アルゴリズムは、そのようなプログラムを構築する上で役立ちます。
論理的思考が身に付く
アルゴリズムを学べば、論理的思考を身につけられます。論理的思考とは、物事を矛盾・飛躍がないように筋道立てて考えること。
プログラミングにおいては、プログラムを構築する際にいかに効率的に問題解決を行なうかを考える上で、論理的思考力が求められます。
アルゴリズムの学習は、そのような論理的思考力を身に付けることにつながるのです。
アルゴリズムの学習に最適なタイミングはプログラミング中級者程度
アルゴリズムを学ぶ意味を理解した人は、どのようなタイミングで勉強をすればよいか気になると思います。
アルゴリズムを勉強するのは、プログラミングがある程度できるスキルを身に付けたタイミングがよいでしょう。
なぜなら、プログラミングを勉強して間もない頃は、プログラムに慣れるために時間がかかるので負担が大きくなります。
また、アルゴリズム自体も初心者にはとっつきにくい内容が多いからです。
そのため、プログラミングにある程度慣れた中級者程度で勉強するのがベストなタイミングと言えます。
わかりやすいアルゴリズムの例
料理を例にアルゴリズムを考える
野菜の切り方の1つである半月切りを例に、アルゴリズムについて説明します。
半月切りは主に2パターンが存在します。
- 輪切りをしてから1枚ずつ半分に切るパターン。
- 最初に半分に切ってから輪切りしていくパターン。
どちらのパターンに従っても最終的には半月切りになります。
しかし、両者の間には切る回数に差が出ます。
試しに、トマトを半月切りで10枚に切ってみた場合の切る回数を考えてみましょう。
その結果、1つ目のパターンの場合は合計9回、2つ目のパターンは合計5回で達成できることが分かります。
このように、切り方のパターンを考えれば、切る回数を節約できます。
Googleの検索アルゴリズム
Googleの検索エンジンも5つのアルゴリズムに従って動作しています。
1つ目は、検索意図の把握。
Googleでは、ユーザーが探そうとしている情報を把握するために、検索キーワードの分析を行います。
その過程で、類義語は適宜置き換えられたり、急上昇ワードが入力されたときは鮮度の高い情報を優先的に引っ張り出したりします。
2つ目は、検索意図に関連するウェブページの探索。
ユーザーの検索意図を満たすために、検索キーワードが多く含まれているウェブページを探します。
また、検索キーワードがいくつも出現するウェブページを探すだけでなく、画像・動画なども分析して総合的に評価します。
3つ目は、ウェブページの品質評価。
関連するウェブページが複数見つかった場合、検索キーワードの出現回数・コンテンツの鮮度などを評価します。
また、コンテンツの信頼性・権威性についても評価することで、スパムサイトが検索上位に入ることがないようにしています。
4つ目は、ユーザビリティの評価。
ブラウザ・デバイスごとに表示を最適化してくれるか、回線速度が遅いユーザーでもスムーズに読み込んでくれるかなど、ユーザーにとっての使いやすさが担保されているかを評価します。
5つ目は、ユーザー関連情報の考慮。
Googleは、ユーザーから提供される位置情報・検索履歴を分析して、そのユーザーに最適な検索結果を返すようにしています。
例えば、千葉に住んでいる人が「ラーメン おすすめ」と検索した場合は、千葉に店を構えるラーメン屋の情報が優先的に表示されるという具合です。
以上のアルゴリズムによって、Googleの検索エンジンはただ検索するのではなく、ユーザーに最適な検索結果を返すように動作しています。
アルゴリズムたいそうはどこが「アルゴリズム」?
NHKの番組『ピタゴラスイッチ』のコーナーの1つであるアルゴリズムたいそう。
アルゴリズムがテーマとなっているが、どのへんがアルゴリズムなのか気になる人もいると思います。
実際の歌詞と動作からひも解いていきましょう。
「手を横に、あら危ない、頭を下げればぶつかりません」の節では、一方が手を横に振り、もう一方がしゃがむという動作をしています。
単体で見れば意味のない動作をしているように見えます。
しかし、全体で見ると迫りくる手をしゃがむことで回避しているように見えるのです。
ある一人の動作が他の人に影響を与えている様が、アルゴリズムの考えに通じていることから、アルゴリズムたいそうと呼ばれています。
プログラミングにおけるアルゴリズムの例
プログラミングにおけるアルゴリズムでは、探索アルゴリズムや整列アルゴリズムが挙げられます。
探索アルゴリズムは、取得したいデータをリストの中から探索するためのアルゴリズムで、線形探索・二分探索などが考案されています。
整列アルゴリズムは、ランダムに並べられたデータを昇順・降順に並べ替えるためのアルゴリズムで、選択ソート・バブルソートなどが代表的です。
各アルゴリズムには、計算量という指標を用いて、アルゴリズムの効率の良さを表します。
プログラミングで使われるアルゴリズムには、これだけではありません。この他にも多くの種類があるので、時間をかけて理解することが大切です。
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。