paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

初心者でも分かる!アルゴリズムの初歩的な話と入門サイトや本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ラーニング」では、動画レッスンを見て、その場でレッスン内容をプログラミングすることで理解を深め、その後に練習問題を解いて応用力をきたえることができます。また、有料会員登録をしていただくと、分わからない点は担当の現役エンジニアに質問ができ、アドバイスをもらうこともできます。

アルゴリズム入門編」講座はFizzBuzzやフィボナッチ数といった有名なアルゴリズムを取り上げて解説しています。

20210730225326

VisuAlgo


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

SORTING


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

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

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

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

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

アルゴリズムイントロダクションはアルゴリズムに関する書籍の定番中の定番というか、とにかく基本的なアルゴリズムに関する詳細が網羅されています。

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

■まとめ

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

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

アルゴリズム入門編




paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。

自分のスキルを磨いていきたいと考えている方におすすめなのが「paizaラーニング」。オンラインでプログラミングしながらスキルアップできる入門学習コンテンツです。初心者でも楽しくプログラミングの基本を学ぶことができます。

paizaラーニング

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

paizaのスキルチェック

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのおすすめコンテンツ

CGC codemonster プログラミングゲーム「初恋プログラミング研究会 ~海に行こうよ~」 CGC codemonster プログラミングゲーム「コードモンスター大図鑑 プログラミングでゲットだぜ!」
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.