見出し画像

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

 アルゴリズムとは、順番通りに行う計算式のかたまりのことです。プログラムはアルゴリズムをプログラミング言語で表現したものです。Pascal言語を開発したニクラウス・ヴィルトは、『アルゴリズム+データ構造=プログラム』(1975)という本を出版しています。確かに、プログラムを構成するものは、この本のタイトル通りなのかもしれません。
 では少しだけ、プログラミングがどんなものか、具体的な事例で見てみましょう。
 次に示すのは、100円のりんごの売上げと次の仕入れ数を計算する、というプログラムです。

 りんごが30個売れたとして、りんごの販売数aに30を代入します。そして、aとりんごの値段である100円をかけたものが、りんごの売り上げbになります。つまり、bは3000円となります。
 さて次に、仕入れはどうすればいいか。もしりんごが50個以上売れたとすれば、次の仕入れ数は販売数のa(30)をそのまま入れます。つまり、売れてしまった分だけ仕入れるわけですね。そうでなければ、cに50と30の差(20)を代入します。つまり20個仕入れます。

 このような一連の手順が、アルゴリズムです。販売数をもとに、プログラムで仕入れ数を自動的に算出できれば、発注が楽になります。
 このアルゴリズムは、下記のようにフローチャートと呼ばれる図で書くことができます。「←」は、右辺を左辺に代入するという意味です。


画像1

このアルゴリズムをC言語という、プログラミングでよく使われる言語で書くと、次のようになります。int とは整数ですよ、という宣言で、int a = 30;は、aは初期値が30の整数です、という意味です。ifは、条件文といって、もし〜なら〜、そうでなければ〜、を意味します。下記の場合は、もし「aが50以上」なら「cにaを代入」、そうでなければ「cに50 - aを代入」という意味になります。

int a = 30;
int b = a * 100;
if (50 <= a) c = a;
else c = 50 - a;

このとき、売上げbは3000、次の仕入れ数cは20になります。
 在庫が十分にあったとして、1行目で販売数aに60を代入した場合、cは60になります。このプログラムはたったの4行ですが、アルゴリズムが複雑になれば、プログラムの行数は数百行から数千行になることもあります。
 アルゴリズムは、やりたいことの用途に合わせてその都度作るものもありますが、便利にみんなが使い回しているものもたくさんあります。三角関数のsin, cosなどの値を計算するものや、バラバラに並べられた数列を大きさの順に並べるといったソート関数、ネットワーク状の経路のうち、最短なものを選ぶダイクストラ法などたくさんあります。
 これらのアルゴリズムをプログラミングして、その通りに動いて、問題が解決できるととても楽しいし、どのような理屈で動いているのかを理解した気分になれます。みんなが使う有名なアルゴリズムは、すでにプログラミングの開発環境の中に用意されていたり、Webで公開されていたりしています。最近ではディープラーニングなどの最新のアルゴリズムも簡単に入手でき、あっという間にソフトウェアを動かすことができます。ですから、ディープラーニングのプログラミングができるからといって、魔術師みたいだなんて、だまされてはいけません。
 この他に、プログラムの表現として、PAD (Problem Analysis Diagram)と呼ばれる書き方もあります。これは、処理の流れを図で表現する方法のひとつです。フローチャートを使う人の方が多いのですが、PADの方が格段に簡潔に書けます。フローチャートは無駄な空白や線が多くなりがちで、同じフローでもいろんな書き方ができてしまいます。PADであれば、同じフローは、ほぼ同じ図になりますので、プログラムとの相性もよいと思います。
 余談ですが、このPADを発明したのは、日本の企業の研究者です。

画像2

画像3


この記事が気に入ったらサポートをしてみませんか?