【漫画でIT入門】とあるIT企業の社員活動日誌 第27話「プログラミング学習のすゝめ⑬ データ構造とアルゴリズム」
パソコンを使う人のありそうでなさそうなお話や、ガジェットのお話を漫画で紹介させていただくコーナーです。
とあるIT企業に務める彼女たちは日々楽しく真面目に業務に励んでいます。その中で、起こったハプニングや困った事などを活動日誌を通して覗き見していきましょう。
※当ブログは、アフィリエイトプログラムに参加して商品を紹介しております。当ページのリンクを介して商品を購入すると著者に収益が発生することがあります。
【漫画で入門】「とあるIT企業の社員活動日誌」各話一覧はこちら
目次
プログラミングとデータ構造・アルゴリズムについて
これまで多くのプログラミング言語について簡単に解説してきました。
現在、この世界にはこれまでに紹介したプログラミング言語以外にも多くのプログラミング言語が存在しています。どの言語を使用するかはそれぞれのメリット・デメリットを天秤に抱えて選択していくことが必要です。
また、一つの言語で全てする必要もありません。実際には、それぞれの言語を組み合わせてシステムは構築されています。
その為、一つ覚えればよい訳でもありません。多くの言語を扱えるに越したことはないでしょう。
プログラミング言語はあくまで、特定の処理をさせるための指示に過ぎません。
基本に忠実にプログラミング言語を操り使用する事は非常に大切ですが、プログラムをより効率的に操る事でさらにレベルの高いプログラムを記述することが出来ます。
つまり、レベルの高いプログラマーはより効率的にコンピュータリソースを扱える方々だと言えます。「どの様に作るか」だけでなく「どの様に動かすのか」という部分に目を向けて勉強を進めていくことが重要です。
アルゴリズムの大切さ
そこで、大切になってくるのが「アルゴリズム」です。
プログラミングを勉強していくと必ずアルゴリズムという言葉出てくるでしょう。プログラミングとアルゴリズムを混同している方は多いのではないでしょうか。それぞれの意味合いと役割が大きい異なります。
先程お話した通りプログラミング言語は特定の処理をさせるための指示です。
しかし、アルゴリズムは問題・課題を解決するための計算・処理手順にの事を指します。IT関連で多く耳にするためIT用語だと思っている方は多いかもしれませんがアルゴリズムという言葉どちらかというと数学的な用語になります。
プログラムを書けたのなら、問題を解く有限の手順を具体的に組み立てられたということなので、それすなわちアルゴリズムを組み立てていたことになります。
対偶を取れば、アルゴリズムがわかってなければプログラムは書けません。「あちこちからコピペしてきたコードを適当に組み合わせたら何となく動きました」というようなやり方でなく、こう書いたら動くだろ、と自分でわかって書いていたのなら、アルゴリズムを理解していたということです。
アルゴリズム+データ構造=プログラム
プログラミング言語「Pascal」の開発者であるN.Wirthは「アルゴリズム+データ構造=プログラム」という言葉を残しています。
アルゴリズムは処理の手順、データ構造はデータの配置・管理する方法のことで、この2つがプログラムを構成していることを端的に表現しています。
代表的なデータ構造
①リスト構造
リスト構造は要素をチェーンのように繋ぐデータ構造です。要素はデータを格納するデータ部と次に繋がる要素(次要素)の位置情報を持つポインタ部から構成されています。
②スタック
スタックは「後入れ先出し(LIFO:Last In First Out)」の性質を持つデータ構造です。一方だけ空いた管にデータを格納するようなイメージを持つと分かり易いです。
③キュー
キューは「先入れ先出し(FIFO:First In First Out)」の性質を持つデータ構造です。両端(入り口と出口)が空いた管にデータを格納するイメージを持つと分かり易いです。
④木構造
木構造は親子関係で階層構造を表すデータ構造です。親は複数の子を持つことが出来ますが、子は一つの親しか持てません。
代表的なアルゴリズム
①検索アルゴリズム
多くのデータの中から目的のものを見つけ出す事が検索で、それを用いるアルゴリズムが検索アルゴリズムです。検索アルゴリズムは比較的単純なアルゴリズムです。
②ソート(整列)アルゴリズム
ソート(整列)とは、データをキー値の昇順あるいは降順に並び替えるアルゴリズムです。
③暗号化アルゴリズム
暗号化アルゴリズムとは名前の通り情報を暗号化するアルゴリズムです。暗号化の強度に直結するアルゴリズムです。
④幾何学系アルゴリズム
幾何学系アルゴリズムは、グラフィック系のプログラミングに役立つアルゴリズムです。
幾何学系アルゴリズムを活用することで複雑な図形同士の関係を三角形などを使用してシンプルに考えることが出来ます。
アルゴリズムを学ぶ意義
世の中には巧妙なアルゴリズムを考えつく賢い人がいるので、ほとんどの場合は、自分でゼロから発明しなくても、有りもののアルゴリズムを応用すれば済みます。
しかし、有りもののアルゴリズムを探し出すにも、ある程度の知識があった方が便利です。類似のアルゴリズムを知っていれば何を探せば良いかの見当がつけやすいです。
代表的なアルゴリズムを理解しておくことには、そういう意味もあります。
さらに学べるおすすめ書籍
・問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)