プログラミングのアルゴリズム

プログラミングに重要なアルゴリズムとは?わかりやすく特徴を紹介

プログラミングを学んでいると、アルゴリズムという言葉を聞いたことがある人も多いのではないでしょうか。アルゴリズムと聞くと、よくわからないし、難しそうだなと思うかもしれません。

アルゴリズムは、プログラムを学ぶうえで重要な考え方です。

この記事では、プログラミングを学ぶうえで重要なアルゴリズムについて、具体例を挙げながら紹介します。

アルゴリズムとは?

アルゴリズムは、多くの場合問題を解決するための手順や方法を意味する言葉として使われる用語です。

たとえば、算数のひっ算をイメージしてみてください。みんなが同じ手順で同じ計算をすると、結果は同じになりますよね。このように、みんなにとって同じように使える手順などのやりかたのことを、アルゴリズムと呼んでいます。

携帯電話の使い方のアルゴリズムや料理の作り方のアルゴリズムなど、世のなかにはアルゴリズムがたくさん存在しています。

プログラミングの世界にも、データの並べ替えのやり方や探し方など、多くのアルゴリズムがあります。どんなに難しい処理でも、アルゴリズムがわかってしまえば、プログラムであらわすことができるようになります。

しかし、アルゴリズムがわからなければ、プログラムを書くことはできません。アルゴリズムは、プログラムに関わらず、物事を進めてい浮くうえで重要な考え方といえるでしょう。

アルゴリズムが重要視される理由

多くの場合、プログラムは誰かの「何かを実現したい」や、「こうしたほうがよくなる」という欲求や問題がキッカケとなって作られます。

しかし、問題が解決できるのであれば、どのようなプログラムでもよいという訳ではありません。プログラムを作成するときには、より効率よく動作するように、動きの流れを考える必要があります。

また、プログラムを動かすために準備が必要だったり、結果を確認するために専用のアプリの導入が必要になったりするような手間が発生すると利用されなくなってしまうかもしれません。

アルゴリズムは、プログラムが誰かに使ってもらうときのことを考えて、簡単に使えるような手順を考えたり、効率的に結果を求められるような動作の仕組みを考えたりすることです。ただ動くだけではない、使ってもらえるプログラムを作るためには、アルゴリズムを理解してプログラミングをする必要があるのです。

よく使われるアルゴリズムの具体例

続いては、プログラミングのなかで、よく使われるアルゴリズムを具体的に見てみましょう。

ソートアルゴリズム

参考書のなかで、最初に紹介されるケースの多いアルゴリズムがソートアルゴリズムです。
プログラミングのなかでは、大量のデータを扱うケースが出てきます。そんなとき、データを扱いやすいように並べ替えをおこないます。

ソートアルゴリズムのうち代表的なものが、「バブルソート」「クイックソート」です。

バブルソート

バブルソートは、データの端から隣接する要素と比較し、入れ替えを繰り返すことでソートする方法です。

次の例では、(3, 5, 2, 1, 4) を昇順に並び替えます。

  • 1巡目の処理
No 手順 操作 結果
1 3 と 5 を比較 そのまま 3, 5, 2, 1, 4
2 5 と 2 を比較 5 と 2 を交換 3, 2, 5, 1, 4
3 5 と 1 を比較 5 と 1 を交換 3, 2, 1, 5, 4
4 5 と 4 を比較 5 と 4 を交換 3, 2, 1, 4, 5

1巡目を終えると、一番大きな数字(この場合は5)を最も右に移動することができました。2巡目では、最も右の数字以外を比較します。

  • 2巡目の処理
    No 手順 操作 結果
    1 3 と 2 を比較 3 と 2 を交換 2, 3, 1, 4, 5
    2 3 と 1 を比較 3 と 1 を交換 2, 1, 3, 4, 5
    3 3 と 1 を比較 そのまま 2, 1, 3, 4, 5

2巡目は、2番目に大きなデータを、右から2番目に移動することができます。3巡目以降も同じように移動していきます。

  • 3巡目の処理
    No 手順 操作 結果
    1 2 と 1 を比較 2 と 1 を交換 1, 2, 3, 4, 5
    2 2 と 3 を比較 そのまま 1, 2, 3, 4, 5
  • 5巡目の処理
    No 手順 操作 結果
    1 1 と 2 を比較 1 と 2 を交換 1, 2, 3, 4, 5

以上のように、5個のデータを並び替える場合は、並べ替えを5巡おこなうことで、完全に並べ替えることができます。

並べ替えられたデータの動きを見ていると、泡が浮き上がるようにデータが整理されていくのがわかると思います。
バブルソートは、このようなデータの動きが特徴となっています。

クイックソート

クイックソートは、処理の速度を高速におこなうことを目標としたソート方式です。データの基準値を決めて、データを基準値以上と基準値未満のデータに分割する処理を繰り返していきます。多くの場合、基準値はデータの中央値が選択されます。

バブルソートの例と同様、(3, 5, 2, 1, 4) を昇順に並び替える流れを見てみましょう。

No 手順 操作 結果
1巡目 中央値(3)を基準に選定 3より大きいグループと3未満のグループに分割 (2, 1) (3) (5, 4)
2巡目 3未満のグループの中央値を2(1.5)に選定 3未満のグループを2より大きいグループと2未満のグループに分割 (1) (2) (3) (5,4)
3巡目 3より大きいグループの中央値を5(4.5)に選定 3より大きいグループを5より大きいグループと2未満のグループに分割 (1) (2) (3) (4) (5)

このように、クイックソートでは、バブルソートより少ない処理でデータを並べ替えることができます。

探索アルゴリズム

プログラミングのなかでは、探索アルゴリズムも多く利用されます。探索アルゴリズムとは、たくさんのデータのなかから、的のデータを探し出すためのアルゴリズムです。

探索アルゴリズムの代表的なものには、「線形探索」「二分探索」が挙げられます。

線形探索

線形探索は、データを探し出すときに最も単純な手法です。データを端から1件ずつ確認し、目的のデータを探し出す方法です。

たとえば、(8, 7, 1, 4, 2, 9, 6) の中から、2を探し出す場合の手順を見てみましょう。

  1. 2 と 8 を比較し、違うため次へ進む
  2. 2 と 7 を比較し、違うため次へ進む
  3. 2 と 1 を比較し、違うため次へ進む
  4. 2 と 4 を比較し、違うため次へ進む
  5. 2 と 2 を比較し、一致したため探索終了

このように、データが見つかるまで1件ずつデータを探す処理のことをあらわしています。

二分探索

二分探索は、整列されたデータのなかから、中央値より大きいか小さいかを基準に、データを半分ずつ絞り込んでいく方法です。事前にデータが整列されている必要があるため、ソートを使ってデータを並べ替える必要が出てきます。

線形検索と同様に、(8, 7, 1, 4, 2, 9, 6) のなかから、2を探し出す場合の手順を見てみましょう。

  1. 最初に、ソートを使ってデータを並び替える (結果: (1, 2, 4, 6, 7, 8, 9))
  2. データの中央(6)と比較し、探している2は小さいため、データを半分に絞る (残っているデータ(1, 2, 4))
  3. データの中央値(2) と探したい2 が一致したため探索終了

二分探索は、データを半分ずつ絞り込んでいくため、線形検索と比べ、処理が早くなる傾向があります。しかし、事前にソートアルゴリズムを使って並べ替える必要があるため、他の探索プログラムを使ったほうが早い場合もあります。

暗号化アルゴリズム

続いての代表的なアルゴリズムは、暗号化アルゴリズムです。暗号化アルゴリズムは、その名前のとおり、データを暗号化して通信相手とのやり取りをおこなったり、保管したりするためのアルゴリズムです。

代表的な暗号化アルゴリズムは、大きく「公開鍵暗号方式」「共通鍵暗号方式」の2つが存在しています。

公開鍵暗号方式

データの暗号化方法は、元のデータに対し一定の方法でデータの加工をおこなう方法です。

暗号化の手順は、コンピューターの種類などによらず、インターネット上に公開された同じ手順を使って暗号化します。
その際に、公開鍵暗号方式では、秘密鍵と呼ばれる暗号化をおこなう人しか持っていない鍵を利用しておこなっています。

続いて、暗号化されたデータを受け取った場合には、元のデータに戻すため復号をおこないます。
復号も、暗号化と同様に、公開された手順を利用しておこないます。復号は、公開鍵と呼ばれる、秘密鍵とペアになっている別の鍵を持つ必要があります。

暗号化や復号で異なる鍵を用いることで、安全に配慮した暗号化方式であるといえるでしょう。

共通鍵暗号方式

公開鍵暗号方式は、暗号化に使う鍵と復号に使う鍵が別でしたが、共通鍵暗号方式は、同じ鍵を使ってデータの暗号化復号をおこないます。
そのため、公開鍵暗号方式よりも処理が速いという特徴があります。

ただし、共通鍵が第三者に盗まれるなど、セキュリティの問題が発覚した場合には、速やかに鍵を新しいものに差し替える必要が出てきます。

よいアルゴリズムとは?

プログラムはアルゴリズム次第でよくも悪くもなります。では、一体どのようなアルゴリズムがよいのでしょうか?

続いては、プログラムにとってよいプログラムの特徴を紹介します。

処理時間が短い

プログラムにとって、同じ処理をおこなうのであれば、工夫によって処理時間を短く抑えられるほうがよいアルゴリズムです。

たとえば、みなさんが通勤や通学で使う、電車の自動改札のシステムを想像してみてください。降車した駅の自動改札では、乗車駅からの運賃を瞬時に計算して、料金の支払いを済ませることができます。多くの場合、改札機を通り過ぎる間に支払いが終わっているのではないでしょうか。

しかし、料金の計算に1分かかるとしたらどうでしょうか。自動改札機の前で多くの人が行列を作ってしまうことでしょう。

プログラムにとって、処理時間が短いことは、重要なポイントです。

リソースの使用量が少ない

よいアルゴリズムの特徴2つ目は、リソースの使用量が少ないことです。

リソースをイメージしにくい人は、家を建てる場合に必要なものを思い浮かべてみてください。大きな家を建てるには、たくさんの職人が必要になったり、専用の機材や材料を使いながら作ったりする必要が出てきます。当然、対応できる職人がいなかったり、機材がなかったりすれば完成することはできません。

プログラミングの世界でもコンピューターの脳の役割をするCPUや、一時的なデータの保管場所であるメモリなど、限られた能力のなかで処理をおこないます。プログラムの実行に必要なCPUやメモリ量が、使っているパソコンの処理能力を越えていると、処理ができずに停止してしまったり、対応できたとしても、長い時間をかけて徐々に処理をおこなったりする必要が出てきます。

このように、リソースの使用量が多いと利用できる環境に制限がかかったり、パソコンによっては使えなかったりする可能性も出てきてしまいます。

処理結果が同じになるのであれば、リソースの使用量を減らし、誰のパソコンでも使えるようにできるアルゴリズムのほうがよいアルゴリズムといえるでしょう。

アルゴリズムの効果的な学習方法3選

プログラムを学習するうえで、アルゴリズムがいかに重要なものか、理解できたのではないでしょうか。アルゴリズムは、プログラミング言語とは違い、何を学べばよいのか、迷う人も多いでしょう。

ここでは、アルゴリズムを効果的に学ぶ3つの方法を紹介します。

書籍や学習サイトで学ぶ

アルゴリズムを学ぶ最も基本的な方法は、書籍や学習サイトを使って学ぶ方法です。

近年では、小学生向けのプログラミング教育が必修化されたこともあり、図解を使ってアルゴリズムのイメージを学ぶことのできる書籍なども増加してきています。最初は優しいところからでも、アルゴリズムをイメージし、プログラミングであらわす方法を学んでいくとよいでしょう。

実際にプログラムを書いて学ぶ

プログラミングの学習を効果的に進めるためには、実際にプログラムを書いてみることが重要です。
プログラムの処理の流れをイメージし、プログラムを書いて実行を繰り返すことは、アルゴリズムの理解を助けてくれるでしょう。

また、自分でプログラムを書くだけでなく、他の人が書いたソースコードを読んで、自身で書いてみることも重要です。
優秀なプログラムの処理の流れをイメージし、プログラムを書いて実行を繰り返すことは、アルゴリズムの理解を助けてくれるでしょう。

他にも、自分でプログラムを書くだけでなく、他の人が書いたソースコードを読んで、自身で書いてみることも重要です。
優秀なプログラマーが書いたプログラムは、読みやすくて理解しやすいという特徴があります。このようなプログラムを見て、書き写すだけでもアルゴリズムへの理解は深まります。

プログラミングスクールに通う

独学で学ぶのが難しいという場合は、プログラミングスクールに通うこともおすすめです。
近年は、優秀なプログラマーをメンターとして起用したり、経験豊富な講師からプログラミングのコツと合わせて教えてもらったりできるスクールも増えています。

プログラミングスクールの最大の魅力は、講師や同じスクールに通っている仲間と交流しながら、モチベーションの維持がしやすいという点が挙げられます。
スクールへの通学だけでなく、オンラインで学べるスクールも出てきていますので、自分に合ったスクールを探してみるとよいでしょう。

まとめ

この記事では、プログラミングを学ぶあなたに、アルゴリズムの大切さとアルゴリズム自体の考え方について、具体例を紹介しながら解説しました。

ただ、大まかな処理の流れはわかっても、一からアルゴリズムを考えるのは大変そうだと思われた方もいらっしゃるのではないでしょうか。

でも、安心してください。アルゴリズムを初めて見た多くの人は、悩んだり理解したりするまでに、多くの時間を費やし、練習して身につけていくのです。

あなたもアルゴリズムを理解して、プログラミングのレベルをアップさせてみてはいかがでしょうか。

【お知らせ】

プロの現役Webデザイナーがあなたのお悩みを解決!
Webデザイナーという働き方セミナー開催中!!


こんな不安や悩みはありませんか?

・自分のキャリアでWebデザイナーに転職できるのか
・自分はWebデザイナーに向いているのか
・どうしたら効率良くWebデザインを習得できるか

このオンラインセミナーでは、これまで3000人以上のWebデザイナーたまごを指導してきた現役Webデザイナーが、中立な立場であなたの悩み解決をサポートします。

・Webデザイン未経験
・パソコンの操作が苦手…
・デザインセンスに自信がない...

このような方でも大丈夫です!(過去にもそのような方はたくさんいらっしゃいました)
あなたの悩みを聞きながら、あなたにピッタリのご提案をさせて頂きます。
些細なご相談でも構いませんので、気軽に参加してみてくださいね。

関連記事一覧