【入門】アルゴリズムとは?|これでプログラミングが楽しくなる!
B!
プログラミング言語は身に付けたはずなのに、
いざ自分でオリジナルのプログラムを作ろうとすると手が止まってしまう。
そんな経験がある方も多いのではないでしょうか。
もしかすると、まだアルゴリズムが見えてないのかもしれません。
「アルゴリズム」と聞くと、数式の難しそうなもの・・・といった印象をもってしまい、なにも答えられない方も多いのではないでしょうか。
この記事では、アルゴリズムとは何かについて解説するとともに、アルゴリズムの種類や具体例、オススメ本などもご紹介しますね。
-Contents-
アルゴリズムとは?
アルゴリズムを一言でいえば、「問題を解く手順」になります。
たとえば、インスタントラーメンのレシピ(手順)を見て作れば、皆が同じラーメンが作れますよね。
つまり、アルゴリズムとは、その手順に沿って行えば誰でも同じ答えが得られることをいいます。
私たちは生活のなかでも自然とアルゴリズムを利用しているのです。
これらのように、誰がやっても同じ結果になる手順をアルゴリズムといいます。
プログラムは、コンピュータを使って問題を解決するための手順です。
そのため、アルゴリズム(問題を解く手順)は、プログラミングの設計図であり、自力でプログラムを組立てることができません。
アルゴリズム(プログラミング)は問題によって違う
ある問題を解決するアルゴリズムは複数ある場合がほとんどです。
そのなかから目的に応じて、より効率よく処理できるアルゴリズムを選ぶ必要があります。
たとえば、「家にいる時に、プロ野球の試合がみたい」という問題を抱えていたとします。
問題を解決する方法を考えてみましょう。
- “野球場”に見に行く手順
- テレビ中継“で見る手順
の2パターンが思いつきますよね。
”野球場”に行く手順は、電車に乗って野球場まで行くのでコストと時間がかかります。
それにくらべ、”テレビ中継”で見る手順は、テレビのリモコンを押すだけなので、すぐに見ることができます。
このことから、早く試合を見るアルゴリズムは、”テレビ中継”で見る手順というのはいうまでもありません。
しかし、”野球場”に見に行くことで、臨場感あふれた試合を楽しめるメリットがあります。
“野球場”と“テレビ中継”のどちらが最適なのかは、解決したい問題によって違うのです。
プログラミングを学ぶ上でアルゴリズムが必要な理由
アルゴリズムは、プログラミングを上達させるためには欠かせない要素です。
では、なぜプログラミングを学ぶ上で、アルゴリズムが必要になるのでしょうか。
コンピュータは、プログラムに書かれた手順通りに実行して、問題を解きます。
しかし、問題(課題)を解ければ、どんなプログラムでもいい訳ではありません。
問題(課題)を解けても、実行速度が遅かったり、メモリを大量消費したりするプログラムは、実用性がなく使えません。
よりスムーズに問題を解決するために、簡潔で、高速なプログラムが求められています。
どういう手順でユーザーのリクエストに対応できるプログラムを作るかを考える必要があるのです。
つまり、コンピュータの設計図がアルゴリズムであり、プログラミングを上達させるためには欠かせない要素になります。
アルゴリズムを考える
それでは、コンピュータの設計図となるアルゴリズムは、どのように考えていくのでしょうか?
コンピュータみたいな頭脳を持った人が作っているのはないか・・・というイメージを持っているかもしれませんが、そんなことはありません。
アルゴリズムは「問題を解く手順」なので、日常生活の中で問題を解決するときと同じことをすればいいだけです。
問題を整理してアルゴリズム考える
まずは、分かる部分を整理していくことが大切です。
これから行う流れは、
[①問題→②現状→アルゴリズム→③結果]になります。
1.問題
2.現状(インプット)
3.結果(アウトプット)
の3つは整理できる部分になります。
1.問題
「何が問題なのか」を明確することが重要です。
何がしたいのかを明確にしないままプログラミングをし始めても、いつになっても問題は解決しませんよね。
2.現状
「現状がどうなっているか」を把握する必要があります。
どのような状態か分からないと、なにをどのように解決したら良いのか分かりません。
どんな前提条件があるのか、も確認してください。
3.結果
「どんな結果が欲しいのか」を明確にします。
ユーザーが求めている結果に合わせてプログラミングしなければ、使えないプログラムになるだけです。
まずは、分かっている部分から整理してください。
ライブラリは【先人の知恵】
難しいときは、ライブラリを活用しましょう。
全てのアルゴリズムを一人で考えるのは、難しいことです。
すでに先輩たちが、同じ問題に出会い様々なプログラムを作って、解決していることも多くあります。
いわゆる先人の知恵と言うべき、アルゴリズムです。
その中で、汎用性の高いアルゴリズムをまとめたものが、ライブラリと呼ばれています。
囲碁や将棋で定番の問題を解決する方法を「定石」といったりしますが、プログラミングでも同じことです。
ライブラリを使わないで、プログラミングすることは殆どありえません。
ある処理を行う時に、すべてのアルゴリズムを自分で0から書かずにライブラリを再利用してください。
いろいろなアルゴリズム
いろいろな種類で、物凄い数のアルゴリズムが存在します。
もちろん、ライブラリだけで、全ユーザーの問題を解決することはできません。
しかし、事前にどのようなアルゴリズムがあるのか知らなければ、プログラミングに実装することができません。
それでは、どんなアルゴリズムがあるのか、よく使われている6つのアルゴリズムを簡単に説明しますね。
ソート(整列)アルゴリズム
「たくさんのデータを順番に並べたい!」という問題を解く手順です。
アルゴリズムの中で最も基本的なものが「ソート(整理、並べ替え)」です。
そのため、古くから、さまざまなアルゴリズムが考案されて使われてきました。
あらゆるデータベースを、
- データを小さい順(昇順)あるいは大きい順(降順)に並べ替えて整列させる
- 日付順やサイズ順で並べ直す
- 一定の規則に従って整列させる
などの問題を解くときに必要なアルゴリズムになります。
サーチ(探索)アルゴリズム
「複数のデータの中から、目的・条件に一致したデータを見つけたい!」という問題を解く手順です。
これもたくさんのデータを扱うときに、必要になるアルゴリズムです。
もっとも基本的なアルゴリズムの1つです。
何かをインターネットで検索するとき、GoogleやYahoo!などの検索サイトを使用する方が多いと思います。
このように、膨大なデータの海から特定の情報を探索し、問題(探索)を解くアルゴリズムになります。
ダイクストラ(経路探索)アルゴリズム
「出発地点から到達地点へ、どの道が最短路なのか知りたい」という問題を解く手順です。
最短経路を問題を解くアルゴリズムです。
このアルゴリズムは、「カーナビ」や「マップアプリ」、「乗換案内」で利用されています。
このように、一瞬で割り出してくれるサービスにお世話になっている方も多いと思います。
そのため、
- 目的地への最短ルートを所要時間が短い順
- 乗換回数が少ない順
- 料金が安い順
など、動作の種類に重みを付けて、問題を解くアルゴリズムになります。
暗号化アルゴリズムとは
「データを他人に閲覧されたり、改ざんされるのを防ぐ」という問題を解く手順です。
暗号アルゴリズムとは、
「他人に読まれたり変更されたりできない」形式に変換する手順・ルールのことです。
現在、個人情報や企業情報のセキュリティをはじめ、多く利用されている重要なアルゴリズムになります。
そのため、暗号を強化するアルゴリズムになります。
データ圧縮アルゴリズム
「大きなデータは通信や保存が大変なので、一時的に小さくしておきたい」という問題を解く手順です。
データの情報量を保ったまま、データ量を圧縮することを指します。
画像を圧縮させるJPEG圧縮や、ファイルサイズを小さくするためのZIP圧縮などがあります。
データを圧縮することでより情報量を小さくしますが、 そのまま圧縮したデータは使えないため元のデータを解凍できるアルゴリズムになります。
レイトレーシングアルゴリズム
「写真のようにリアルな3次元のグラフィックスを描きたい」という問題を解く手順です。
光が物体に当たってどのように反射したり、通過したり、屈曲したりするか? などを考えて描画を行っているため、リアルで美しい画像を作れることができます。
そのため、レイトレーシング法の特徴として、
- 実装がきわめて単純である
- 様々な幾何形状を扱うことができる
- 完全鏡面反射や屈折を扱うことができる
といった特徴があるアルゴリズムになります。
フローチャート
プログラミングをするときは、フローチャートでアルゴリズムを整理することをおすすめします。
フローチャート(フロー図)とは、プログラムのプロセスを表す図のことでアルゴリズムを記述したツールのことです。
図にすることでアルゴリズムの全体像を直感的に理解できるだけでなく、プログラムの設計や説明、処理手順を洗い出すことができます。
アルゴリズムは数式や文章で記述されているものも多くありますが、書いた通りに実行して問題が解決できるものはアルゴリズムと言えます。
アルゴリズムは、自分が分かりやすい方法で記述したらいいのです。
いきなりプログラミングをはじめるよりも、まずはフローチャートで整理することで、効率よくプログラミングすることができます。
アルゴリズムの重要性と勉強法
アルゴリズムが重要なのでしょうか。
それは、ライブラリの中からどのようなアルゴリズムの選ぶかで変わるためです。
プログラミングでは、大量のデータを取り扱う場面が多く発生します。
アルゴリズムの原理を理解した上で、
自分でプログラミングし、どのような処理がされているかを確認することが大切になってきます。
アルゴリズムの基本を学ぶための本を2冊紹介しますね。
プログラミングを学ぶ前に読むアルゴリズムえほん
絵や図を見て、感覚的に理解できるため入門編として、最適です。
全4巻あり1巻で、アルゴリズムの本質を体感できます。
2巻以降で、並べ替えやフローチャートを体験しながら進めることができます。
物語仕立てなので読みやすく、感覚的に理解できるため、子どもに伝えるには最適な書籍です。
アルゴリズム図鑑 絵で見てわかる26のアルゴリズム
最初にアルゴリズムを学ぶには最適な一歩の本です。
ソートや検索など代表的なアルゴリズムが図解されています。
そのため、手順によりデータがどう変化していくのかがよく分かるようになっています。
はじめてアルゴリズムを学習する人にはぴったりの書籍です。
まとめ(プログラミング学習が世界観を変える)
アルゴリズムを学ぶことで、世界観が大きく変わります。
どのようなプログラミング言語を使うとしても、アルゴリズムは大切な知識です。
アルゴリズムのことを知る前だと、
ある「問題」を与えれば「解(結果」を出す」ことだけが求められていると思っている方が多くいます。
ただ、アルゴリズムを知ったことで「問題の解を構成する手順を解く」ということの重要性に気付き、視野が大きく拡げることができます。
また、問題を解決するには、効率のよさや汎用性の高さが求められます。
しかし、その中で、いかに最適な処理能力のアルゴリズムを選べるかで、作るプログラムの質に大きな違いが出ます。
この機会に、ぜひアルゴリズムの知識を身につけてみましょう。
アルゴリズムと聞くと、最初はとっつき難いかもしれませんが、まずはプログラミング学習のベースとして習得してください。
この記事を最後まで読んでくれて有難うございました。