◆◆◆◆アマゾンで購入する◆◆◆

アニメーションで体験しながら
C#のソースプログラムを動かしながら


はじめに

日本語を知っているからといって,
小説や説明書を書けるとは限りません。
同様に,
プログラミング言語を知っているからといって
プログラミングできるわけではありません。

適用される分野の知識や
基本的な処理手順について
知っておく必要があります。

ただし,
プログラムが適用されるすべての分野の
知識等を網羅するのは,
分野があまりにも広すぎて,
まず無理な相談でしょう。

一方,多くの分野を横並びに眺めると
共通する手順(アルゴリズム)や
データ構造が使われています。
まずは,これらの常套手段を身に付けることが,
プログラミングの第1歩になります。

1970年代のプログラマ達は,
これらの手順を自ら考えることに専念しました。

処理速度が遅く少ないメモリの
コンピュータを使って,
どのような手順にすれば効率よく処理できるか,
メモリ量を削減できるかに頭を悩ましました。

プログラマにとって,
プログラミング=パズルだったかもしれません。
創造力を掻き立て自由闊達な
知的欲求を満足させる
「技芸」だったのかもしれません。

1970年代半ば頃から構造化プログラミング,
ソフトウェア工学等の話題が
欧米,アジア圏内を駆け巡りました。

残業,徹夜が当たり前の
プログラマたちの職場では
「Goto論争」が行き交い,
居酒屋では開発手法の話題が花盛り。

プログラマたちは,酒を酌み交わしながら,
自論を展開し,口角泡を飛ばしていました。

そのような中,
チューリッヒ工科大学のWirth先生らが

 「データ構造+アルゴリズム=プログラム」

という本を出版しました。
当時・電総研の鳥居先生らによって
日本語訳が出され,
ソフトウェア企業という狭い分野での
プログラマ達の

  「分厚く隠れたベストセラー」

とも言われました。

筆者自身も,
英語版,次いで日本語版を購入し,
Wirth先生らの本に書かれた
美しいアルゴリズムに酔いしれた
プログラマの一人です。

その後,色々なアルゴリズムが発表され,
アルゴリズム事典なるものも
発刊されてきました。

アルゴリズムやデータ構造について,
色々な書籍が発刊されています。
インターネットでも公開されています。
普通の問題であれば,
新しいアルゴリズムを
最初から考える必要はなさそうです。

手探りで新たに処理手順を考えるよりも,
先人たちが考えに考え抜いた
アルゴリズムやデータ構造を参考にして,
自らが必要とするプログラミング言語で
記述するほうが手っ取り早いかもしれない。

そう思えるぐらい,
様々なアルゴリズムの本が氾濫しています。
著者と同様,色々な人たちが
アルゴリズムに関するWebサイトを
公開しています。

コンピュータも高速化・大容量化し,
パソコンでさえ昔の汎用大型計算機よりも
高速・大容量化しています。

  「計算量の爆発」

については気にしなければなりませんが,
速度やメモリ量について
昔ほどシビアでなくてもよいかもしれません。

多少の処理速度やメモリ容量を我慢しても,
高速かつ小容量の技巧を凝らした
複雑なアルゴリズムより,
明解でシンプルなアルゴリズムの方が
好まれる時代かもしれません。

いまや,
アルゴリズムやデータ構造の多くは

 「技芸」の賜物である「芸術品」

ではありません。
創造性逞しい知的欲求の塊ではなく,
作る手順や作られた物の形が決められ,
これらを

  後進に伝承できる「工芸品」

に近くなっています。

すなわち,現在のプログラミングでは,
いかに色々なアルゴリズムや
データ構造における常套手段を
知っているかが鍵となりつつあります。

ただ,これからプログラミングを
始めようとしている方にとって,
既にまとめられている
アルゴリズムやデータ構造は,
やはり他者が創案した方法です。
借り物に過ぎません。

本書では,
なるべく平易な言葉で図を多用して,
明解に説明するよう心がけましたが,
紙に印刷されたソースプログラムや
図を眺めるだけでは,
やはりプログラムの流れや
データの変更の様子は
イメージしにくいものです。

そこで,
本書中に示したサンプルプログラムを
Webページからダウンロードするだけでなく,
プログラムステップごとの実行位置や
変数内の値の変更を
アニメーション風に観察できるための
プログラムを用意して,
ダウンロードできるようにしました。

ぜひ,Webページから体験用プログラムを
ダウンロードすることをお勧めします。
プログラムステップ単位での実行順序を
観察しながら,変数値を確認することで,
動きを実感しながら理解できると信じます。

本書と当社のWebページからの
ダウンロードプログラムの利用によって,
読者の皆様がアルゴリズムとデータ構造の
基本的な知識を習得していただければ幸いです。

2009年5月 白 井 豊

     目   次

(以下の節番号をクリックすると本の一部をPDFファイルで覗くことができます)

第2章、第5章、第9章、付録については全PDFを覗くことができます。
【第2章、第5章、第9章、付録の全ダウンロードへ⇒】

第1章 基本的なアルゴリズム
 1.1 アルゴリズムとは
 1.2 整数の和
 1.3 桁数を求める
 1.4 多重ループ

第2章 基本的なデータ構造
 2.1 C#のデータ型
 2.2 配列
 2.3 多次元配列
 2.4 構造体

第3章 操作を伴うデータ構造
 3.1 データ構造と操作
 3.2 スタック
 3.3 キュー
 3.4 動的な領域管理
 3.5 線形リスト
 3.6 循環・重連結リスト
 3.7 木構造

第4章 探 索
 4.1 単純線形探索
 4.2 番兵法
 4.3 2分探索法
 4.4 計算量
 4.5 ハッシュ法

第5章 再帰的アルゴリズム
 5.1 再帰の考え方
 5.2 ハノイの塔
 5.3 8王妃問題
 5.4 騎士巡回問題
 5.5 ナンプレパズル

第6章 ソート
 6.1 ソートの考え方
 6.2 単純交換法
 6.3 単純選択法
 6.4 単純挿入法
 6.5 シェルソート
 6.6 クイックソート
 6.7 マージソート
 6.8 ヒープソート
 6.9 度数ソート

第7章 集 合
 7.1 集合とは
 7.2 配列による集合
 7.3 ビットベクトルによる集合

第8章 文字列処理
 8.1 C#の文字列
 8.2 文字列の基本操作
 8.3 文字列の検索

第9章 色々なアルゴリズム
 9.1 等高線
 9.2 陰線消去
 9.3 ランダムドット
 9.4 色々な曲線/フラクタル

[付録] プログラム等のダウンロード

【書籍購入はこちら⇒】

本書に記載されているプログラムを
ダウンロードできます。

   ダウンロード⇒

講師用スライドをダウンロードできます。

   講師用スライドダウンロード⇒