先頭へ戻る

はじめに | Programming Place Plus アルゴリズムとデータ構造編【導入】 第0章

Programming Place Plus トップページアルゴリズムとデータ構造編

先頭へ戻る

この章の概要

この章の概要です。


イントロダクション

自分が思い描くプログラムを作るためには、使用するプログラミング言語の構文やルールを覚えるだけではいけません。もちろん、構文を理解することも第1歩として必要ですが、それだけではプログラムを完成させることはできないでしょう。プログラミング言語の構文は、単なる記述のルールにすぎないので、構文を熟知しているからといって、目的を達成できるプログラムを書けるとはかぎりません。

目的どおりのプログラムを書くにはまず、目的を達成するためにどのような処理が必要であるかを考えなければなりません。こうすれば実現できそうだという見込みがついてはじめて、プログラムを書き始めることができます。

どのような処理が必要であるか検討をつけるにあたって、武器になるのが、アルゴリズムデータ構造の基礎的な知識です。アルゴリズムは処理手順、データ構造はデータの表現方法です。プログラムは、アルゴリズムとデータ構造の組み合わせによって実現されているといえます。

アルゴリズムとデータ構造には、ほとんどのプログラムに関係するような基礎的なものと、ごく限られた範囲の問題解決に役立つ専門特化したものがあります。専門特化しているもの(たとえば、写真から人の顔を検出するアルゴリズム)は、問題を解決する方法そのものであることも多く、知っていればその問題は解けたも同然なことがあります(速度やメモリ使用量などが実用に耐えるか、などの別の課題はありますが)。

一方、基礎的なアルゴリズムとデータ構造は、正しく使い分けることによって、実行速度を改善したり、メモリの消費量を抑えたりといったように、プログラムの性能を高められるものです。逆にいえば、不適切なアルゴリズムやデータ構造を選択してしまったがために、プログラムの性能が低下してしまう可能性もあります。

実際のところ、基礎的なアルゴリズムとデータ構造については、現在よく使われているプログラミング言語の多くが、言語仕様や標準ライブラリの機能の中に取り入れています。そのため、その言語の文法に沿って書くだとか、ライブラリの関数を呼び出すだとか、そういうレベルで使うことができます。そのため、実装方法から理解する必要性はないかもしれません(C言語はそうともいえない言語の1つですが)。

しかし、もしそういう便利な言語を使っているのだとしても、そのアルゴリズムとデータ構造を選択することが適切か不適切かを(コンパイラなどが)自動的に判断してくれるわけではありません。その選択をするのは、プログラマーであるあなたの役目です。そういった意味で、基礎的なアルゴリズムとデータ構造はきちんと理解しておくことを勧めます。

準備

アルゴリズムとデータ構造そのものは理論であって、実際にプログラムの中で使うには、なんらかのプログラミング言語での記述に書き起こさなければなりません。その際に使う言語は、よほど妙な仕様の言語でないかぎり(自由度がなさすぎて、アルゴリズムやデータ構造を表現できないような)、何だって構いません。

当サイトのアルゴリズムとデータ構造編では、C言語を使います。これは単に、当サイトで一番詳しい解説をしているプログラミング言語がC言語であるというだけの理由です。文法機能など、わからないことがあったら、C言語編を参照できるという利便性を活かす意味があります。

動作確認に使用している環境は以下のとおりです(C言語編に合わせています)。

言語 環境 備考
C言語 [Vi sualStudio Community 2017](../VC2017.html) C99規格を想定。

方向性

アルゴリズムとデータ構造編では、C言語の構文や、基本的な機能については学習済みであると想定して解説を行っています。C言語についてわからないことがあれば、C言語編を参照してください。

当サイトのアルゴリズムとデータ構造編であつかうのは、イントロダクションで触れた「ほとんどのプログラムに関係するような基礎的なもの」です。

アルゴリズムとデータ構造は、使用するプログラミング言語や、目的(実行速度の向上、メモリ使用量の削減など)によって、実装方法に創意工夫の余地があります。当サイトでは、比較的ベーシックな手法に限定して解説します。より高い性能が要求される場合には、ほかの実装方法や、ほかのより高度なアルゴリズムやデータ構造について調査・検討することをおすすめします。

解説されている範囲の内容に関して、どうしても理解できない場合は、質問メールを送って下されば、可能な範囲でお答えします。 までどうぞ。

本編の内容について

アルゴリズムとデータ構造編は、いくつかの分類ごとに、章立てを行っています。ですから、データ構造の第1章と、ソートアルゴリズムの第1章とは別の章になっています。

1つの分類の中の章は、できるだけ、突然内容が飛躍するようなことがないように考慮しているつもりですが、明らかにそうなっていない箇所があれば、ぜひご指摘ください。

やや高度な内容や、細かい部分は、次のように破線で囲んでコラム的な扱いとしています。この部分の説明については、難しければ読み飛ばしても構いません。

この部分に書かれている内容は、本文の内容を補足するものです。

【上級】この部分に書かれている内容は、少し高度な話題です。

本編で登場するサンプルプログラムや、その断片は、使えそうであれば、ご自分のプログラミング作業の中でそのまま使っていただいても構いません。ただし、バグがないことや、最良のプログラムであることを保証しているわけではありませんので、自己責任でお願いします。


参考リンク


更新履歴

’2018/6/17 メールアドレスを変更。

’2018/3/29 動作確認に使うコンパイラを、VisualC++2013 から VisualC++ 2017 に変更。

’2015/8/17 動作確認に使うコンパイラを、VisualC++2010 から VisualC++ 2013 に変更。

≪さらに古い更新履歴を展開する≫



次の章へ (第1章 計算量)

アルゴリズムとデータ構造編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー