paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

初心者でも分かる!アルゴリズムの初歩的な話と入門サイトや本5選

f:id:paiza:20170703192232j:plain
Photo by Mike Goren
秋山です。

皆さんは「アルゴリズム」という言葉を聞いて何を思い浮かべますか?

最近では機械学習人工知能(AI)、ビッグデータなどが話題になっているので、ディープラーニングニューラルネットワーククラスタリンググラフ理論などなど…難しい用語を思いつく方も多いかもしれませんが、初心者にとってはハードルが高いですよね。

アルゴリズムについて勉強したことがない人は、気になってはいるものの、各プログラミング言語の書き方やフレームワークの使い方などを学ぶことに手一杯でつい後回しになっている…という方も多いと思います。

今回は、アルゴリズムの初歩的な話と、アルゴリズムを学べるサイトと本をご紹介します。

■そもそもアルゴリズムってどういうこと?

そもそも「アルゴリズム」とは何なのかという話ですが、簡単に言うと、問題を解決するための方法や手順が総称して「アルゴリズム」と呼ばれています。

アルゴリズム」という言葉の語源は、アル・フワーリズミーというイスラム科学者が書いた書物のタイトルから取られているそうです。(フワーリズミー - Wikipedia

この書物自体は、四則演算や2次方程式、0の概念などインド数学に関する内容だそうですが、現在、実際に世の中で使われている「アルゴリズム」の内容は、さらに広範囲にわたりますよね。

それでは、プログラミングにおける単純なアルゴリズムについて考えてみましょう。例えば、"Hello" と入力されたら "Hello World" と出力させるアルゴリズムを考えてみましょう。(コードはJavaで書いています)

……これだけでは単純すぎますね。

では次に、あるアルファベットで構成された文字列があり、その中の文字を組み合わせて "Hello" が何個作れるか?を計算するアルゴリズムを考えてみましょう。

最も単純なのは、 H , e, l, o を数えて、最も少ない数(ただし l は2個使うので2で割る)を出力する…というアルゴリズムになるかと思います。コードにするとこんな感じですね。

どうでしょうか。アルゴリズム自体は単純ですが、コードにするとわかりづらいし無駄が多い感じがしますね。

しかもこの考え方だと、if文が羅列されている部分は、例えば作りたい文字列が Hello 以外に変更されたら、全てのif文を書き直さなければならないのでとても大変です。また、変更された文字列がアルファベット10文字だった場合はif文も10個になって、その上それぞれのif文の条件はアルファベット同士の重複がなければ10個の && となって………面倒すぎてもう無理ですね。

では、もっと簡単なコーディングで済むアルゴリズムを考えてみましょう。

例えば、アルファベットはasciiコード128種内に含まれていて、数値としては0から127が一文字ごとに割り当てられているという前提を使ってみましょう。

まず128の大きさの配列を宣言します。その中で、文字列から取り出した一文字のasciiコードに合わせた箇所に文字数を加算していきます。例えば一文字目が「H」であれば、asciiコードが72なので、配列の72番目に1という数字が入り、それ以降もHが出てくることがあれば2、3…と加算されていきます。その後、必要な文字とその個数を保存する配列を宣言して、その中で最も少ない数がいくつになるのかチェックします。

……文章で説明するとややこしそうですが、コードはどうでしょうか?文字列の中を探したり、if文を何度も何度も書いたりする必要がなくなりましたし、組み合わせて作りたい単語が"Hello"から変更になった時の修正も簡単ですね。

今回は意図的に配列のみを使ったアルゴリズムで考えてみましたが、ハッシュなどを使えばさらにコードをわかりやすくできるかと思います。

プログラミング初心者の中には「アルゴリズムって難しい、苦手」と感じている方もいるかもしれませんが、プログラミングにおいては「問題解決の手段として汎用的なコードを書く」ことが重要になります。自分でいろいろ書いてみたり、人の書いたコードを読んだりすることでも、アルゴリズムを考える勘所が掴めてくるかと思います。

アルゴリズムが学べる書籍とサイト

さらにアルゴリズムについて学びたい方のために、学習の参考になるサイトと書籍をご紹介しておきます。

paizaラーニング「アルゴリズム入門編」


オンラインでプログラミング学習ができる「paizaラーニング」では、現在アルゴリズム入門編」のレッスンを期間限定・連続無料公開しています。普段は有料のレッスンが無料で受講できるので、ぜひ一度チェックしてみてください。

paizaラーニング」では、動画レッスンを見て、その場でレッスン内容をプログラミングすることで理解を深め、その後に練習問題を解いて応用力をきたえることができます。また、わからない点は担当の現役エンジニアに質問ができ、アドバイスをもらうこともできます。

無料公開される講座と無料期間のスケジュールはこちら

VisuAlgo


アルゴリズムをビジュアルで見せてくれるサイトです。アルゴリズムは文章だけで概念を解説されてもなかなか分かりにくいことが多いですが、こちらはビジュアルで動作の様子を見ることができます。「文字で読んで何となく分かったような気になっていただけ」のアルゴリズムについても、ビジュアルの動きで直感的に理解することができます。

SORTING


ソートアルゴリズムに特化した、ビジュアルで見せてくれるサイトです。

SORTINGは、複数のアルゴリズムを同時に動かして見比べられるのがいいですね。「このソート方法とあのソート方法って、どっちがどんなやり方だっけ?どっちが早いんだっけ?」というときも一目瞭然です。

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

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

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

スマホアプリ「アルゴリズム図鑑」の書籍版です。内容はかなり初歩的になりますが、アルゴリズムが豊富なイラストで表現されているのでわかりやすく、プログラミング初心者の方、アルゴリズム入門以前、アルゴリズムって何ぞ…という方でもとっつきやすいアルゴリズム入門書だと思います。

アルゴリズムイントロダクション 第3版 総合版

アルゴリズムイントロダクション 第3版 総合版 (世界標準MIT教科書)

アルゴリズムイントロダクション 第3版 総合版 (世界標準MIT教科書)

  • 作者: T.コルメン,R.リベスト,C.シュタイン,C.ライザーソン,Thomas H. Cormen,Clifford Stein,Ronald L. Rivest,Charles E. Leiserson,浅野哲夫,岩野和生,梅尾博司,山下雅史,和田幸一
  • 出版社/メーカー: 近代科学社
  • 発売日: 2013/12/17
  • メディア: 大型本
  • この商品を含むブログ (7件) を見る
アルゴリズムイントロダクションアルゴリズムに関する書籍の定番中の定番というか、とにかく基本的なアルゴリズムに関する詳細が網羅されています。

これがあればアルゴリズムのことは大体OKと言えばOKなのですが、プログラミング初心者が最初の一冊として挑戦するには難易度が高いしぶ厚いので、既にある程度プログラミングができる人や「入門書は理解できたので、もっと詳しく書かれた書籍がほしい!」という人によい書籍かなと思います。

■まとめ

アルゴリズムの勉強は、一見ハードルが高そうに思えますが、プログラミング初心者の方でも、アルゴリズムを学び始めることは充分可能です。

アルゴリズムを知るとプログラミングについてより深く考えられるようになるかと思いますので、ご興味のある方はぜひ勉強してみてください。

なお、上にも書いた通り、現在「paizaラーニング」では、普段有料公開しているアルゴリズム入門編AWS入門編のレッスンを、期間限定で連続無料公開しています。

※スケジュールは変更になる場合があります。

無料公開期間:アルゴリズム入門編


動画レッスン名無料期間
アルゴリズム入門編17/4(火)~7/10(月)まで無料
アルゴリズム入門編27/11(火)~7/17(月)まで無料

無料公開期間:AWS入門編


動画レッスン名無料期間
AWS入門編17/18(火)~7/24(月)まで無料
AWS入門編27/25(火)~7/31(月)まで無料

■プログラミングが動画で学べるレッスン「paizaラーニング


paizaラーニング」は、プログラミング未経験者・初心者向け学習サービスです。

↓詳しくはこちら
paiza.jp

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
paiza.jp
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza


プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編