DIVE INTO CODE

2019年06月21日
  • #アルゴリズム
  • #データ構造
  • #プログラミング初心者
  • #プログラミング学習

プログラミングでアルゴリズムの実装力を鍛えるためのおすすめの方法

Aws4 request&x amz signedheaders=host&x amz signature=0639adf331a38b5c8b759e51bdd1cc0d1083e041812b1e6835b7b9caacd2abc9

今回は「プログラミングでアルゴリズムの実装力を鍛えるためのおすすめの方法」というテーマで、「アルゴリズムとは何なのか?」「なぜ重要なのか?」といった内容からじっくりお話していきます。アルゴリズムについて学びたい方や、「アルゴリズム」や「データ構造」などといった用語に不安を感じている方も、ぜひご一読ください。

【こんな方におすすめ】
・「アルゴリズム」「プログラミング」「データ構造」といった用語についてかみ砕いて理解したい方
・プログラミング学習において「アルゴリズム」や「データ構造」に苦手意識を持っている方
・「アルゴリズム」のおすすめな学習方法を知りたい方

【目次】
1.アルゴリズムって何?
 ・アルゴリズムとは「問題を解決する手順」のこと
 ・ゲームとアルゴリズム
 ・コンピュータとアルゴリズム
2.アルゴリズムがなぜ重要なのか
3.アルゴリズムを考える上で大切な「データ構造」とは
4.おすすめのアルゴリズムの勉強方法
5.まとめ

■話し手
DIVE INTO CODE 代表 野呂 浩良
■聞き手
StartGate 永田 拓也

アルゴリズムって何?

アルゴリズムとは「問題を解決する手順」のこと

今回は「プログラミングでアルゴリズムの実装力を鍛えるためのおすすめの方法」についてお話していきましょう。そもそも、「アルゴリズムとは何なのか?」「なぜ重要なのか?」ということを最初にお伝えした上で、アルゴリズムを考える上で大切な「データ構造」というものについてご説明し、最後におすすめのアルゴリズムの勉強法についてご紹介していきます。

よろしくお願いします。

まず、アルゴリズムとは何なのか?
アルゴリズムをWikipediaで検索してみると「数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したもの」と書かれています。

「問題を解く手順」ですか・・・役に立ちそうなもの、という理解でいいんですか?

大丈夫です。実は、皆さんアルゴリズムというものを実体験してきているんですよ。例えば永田さん、初めて「おつかい」に行ったときのこと、覚えていますか?

スーパーに行って何かを買ってきて・・・という記憶はありますね・・・。

「おつかい」では「お金を持って」「外に出て」「お店に入って」「商品をとって」「レジに出して」「お金を出して」「おつりを受け取って」「戻ってくる」という手順をこなします。これこそがアルゴリズムなんです。

なるほど!急に身近に感じてきました。

ゲームとアルゴリズム

もう少しプログラミングのイメージに近い話をしていきましょう。
例えばトランプゲームの「神経衰弱」。神経衰弱って、順番が廻っていくほど、正解率が高くなっていきますよね。これは、一度めくった札が何なのかを覚えることで、次の順番では正解の札を取りにいけるようになるからです。これもアルゴリズムのひとつです。

なるほど。「札をめくり」「場所を把握して」「札を取りにいく」という・・・。

そうです。この場合は「神経衰弱で勝つ」という問題解決のアルゴリズムと言えます。

「目的がある」ことが重要、ということですか?

「負けること」が目的であったら、このアルゴリズムは成立しない訳です。麻雀やポーカーといったゲームも「勝つ」という目的があるアルゴリズムと言えますね。

コンピュータとアルゴリズム

「どういう手順でやれば勝てるか」つまり「問題を解決できるか」というロジックは、コンピュータでも使われています。例えば、コンピュータの中にエクセルファイルがひとつあります。このファイルに「氏名」「年齢」のデータが入っているとして、「年齢」の平均値を出したいとします。そういう場合は平均値を出す「AVERAGE関数」を使いますよね。

そうですね。

実はこの「AVERAGE関数」はエクセルの中でプログラミングされたものであり、「一旦すべてのデータを足して、データの総数で割る」という作業をしてくれます。こういうものを自分で作る作業を「プログラミング」と言うんです。

「=AVERAGE()」という式は、平均値を出すための手順、というイメージですか?

そうです。例えば「カレーを作る」というレシピ(手順)を用意しておけば、それを覚えた人はカレーを作れるようになります。それと同じように「平均値を出す」という関数のレシピを作り、それをエクセルに覚え込ませることで、エクセルが平均値を出してくれるようになるんです。こうすることで仮にユーザーが平均値の出し方を知らなくても、エクセルに「平均値を出せ」と命令することで、平均値を出せるようになります。

なるほど。レシピを覚えている料理人がいればカレーを作ってくれる、という話ですね?

そうです!この時、お客さんがカレーのレシピを知っている必要はないですよね?これと同じようにコンピュータに対して命令を与えるのが「プログラミング」であり、それをする仕事を「エンジニア」という訳です。

アルゴリズムがなぜ重要なのか

プログラミング言語にはある程度基本的なアルゴリズムが用意されているのですが、複雑な動きをするプログラムを作りたいときには、自分で手順を考えてアルゴリズムを組んでいく必要があります。
例えば「1から100までの数字があるときに、その平均値を出すプログラムを作ろう」という問題があったら「まず数字を全部足して、次に数字がいくつあるのかを数えて、最後に足した数を数字の個数で割って・・・」といった具合に手順、すなわちアルゴリズムを組み立てます。

そうやって組み立てたアルゴリズムを具体的な形にするためにプログラミング言語で書き換える、ということですね。ということは、「プログラミングとはアルゴリズムを作ること」ということですか?

そうです。問題解決の手順を作ることがプログラマーのミッションであり、アルゴリズムはプログラミングの大事な根幹だといえます。

「アルゴリズムは嫌い!」なんて言っていたら、プログラミングはできない!ということですね。

アルゴリズムを考える上で大切な「データ構造」とは

続いて、アルゴリズムを考える上で大切な「データ構造」について。データ構造とは、プログラミング言語の中にある「変数」や「配列」などの、データの集合体を入れる箱のようなものです。現実にもいろいろなタイプの箱がありますよね。ものをひとつしか収納できない箱とか、さまざまな種類のものを収納できる箱とか、あるいは何かのもの専用の箱とか。それと同じで、プログラミングの世界でも、データをひとつだけ入れられる「変数」や、さまざまな種類のデータを入れられる「配列」などの箱があります。

ふんふん。

で、これらはそれぞれ使い方が異なります。
例えば「変数」の場合は、ひとつのデータをボンと入れるイメージで、一方「配列」はいくつかのデータが集合した塊として捉えられます。「配列」のデータには番号を振ることができ、データをひとつずつ取り出すこともできたりします。ですから「配列」の中からデータを取り出して画面に表示させたり、取り出したデータを「変数」に入れて操作したりできます。もし「配列」が使えないとすると、データをひとつひとつ「変数」に入れなければいけなくなります。

え?面倒くさい!

面倒くさいですよね。そうならないように、データの集合体である「配列」が用意されているんです。

なるほど。倉庫のようなイメージで捉えるといいですね。「A倉庫」「B倉庫」といろいろな倉庫があり、必要に応じてデータを倉庫から取り出してくる感じですか。

そうですね。まずはこのデータ構造のイメージをきちんと捉えて使いこなせることが必要になります。そのためには練習して慣れる必要があるのですが、ここからはおすすめのアルゴリズムの勉強方法についてご紹介していきましょう。

おすすめのアルゴリズムの勉強方法

おすすめのアルゴリズムの勉強方法は3つあります。1つ目は「インターネットで学ぶ」、2つ目が「書籍で学ぶ」、そして3つ目が「アプリで学ぶ」です。
まず1つ目のインターネットでの勉強としては「Paiza(パイザ)」というサービスがおすすめです。2つ目の書籍だと「標準アルゴリズム辞典」がいいですね。C言語に特化してはいますが、アルゴリズムに関する知識がほぼ網羅されており、他の言語にも応用が利くんです。

「アルゴリズム辞典」ということは、先人たちが作ってきたいろいろなアルゴリズムが載っているイメージですか?

そうです。ですから、自分が学んでいる言語に合わせて練習してみる、という使い方が良いでしょう。

なるほど。これは気になりますね。

3つ目が「アルゴリズム図鑑」というアプリ。これはプログラミングスクールの受講生にも愛用されているアプリです。というのも、これも先人たちが考え出してきたアルゴリズムが掲載されていて、更に解説もされています。試しながら理解ができる代物です。

アルゴリズムをひとつ知ってその良さを知ったら、もっと知りたくなりそうですね。おもしろそう!
今日のお話をまとめると、プログラミングをやっていく上では、アルゴリズムと付き合っていくことは避けて通れない、ということですね。

そうです。先人たちが考えてきたアルゴリズムをまずはなぞってみて、おもしろさを体感しながら理解していくことで、未知の問題に遭遇したときに知識を組み合わせて考えることができるようになります。

アルゴリズムという言葉にアレルギーをもつのではなくまずは触れてみて、おもしろさを見つけてみるのが大事ですね。

まとめ

・アルゴリズムとは「問題を解決する手順」のこと。アルゴリズムを組み立ててコンピュータに覚えさせる作業をプログラミングと言う。
・問題解決の手順を作ることがプログラマーのミッションであり、アルゴリズムはプログラミングの大事な根幹!
・「データ構造」とは、データの集合体を入れる箱のようなもの。
・おすすめのアルゴリズムの勉強方法は「インターネットで学ぶ」「書籍で学ぶ」「アプリで学ぶ」の3つ!

アルゴリズムやデータ構造などといったプログラミングの専門用語は、初心者にとってはハードルが高いもののように感じるでしょう。もちろん、簡単に理解できる用語ではないのは確かですが、これらはプログラミングを学習していく上では避けて通れないものですから、学習を通じて少しずつイメージを持てるようにすることが重要です。

アルゴリズムの学習には、インターネットや書籍あるいはアプリなどのツールで先人たちの知恵を拝借していくことが有効です。アルゴリズムのおもしろさや便利さを感じられるようになるまで、根気強く勉強を続ける心意気が一番の方法と言えるでしょう。

DIVE INTO CODEの公式HPこちら

DIVE INTO CODEの無料カウンセリング予約こちら

DIVE INTO CODEのことをもっと知ってみませんか?