アルゴリズムとは
アルゴリズム(英: algorithm)とは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。「算法(さんぽう)」と訳されることもある。
基本的なアルゴリズム
- 順次
- 条件判定と分岐 (if, switch)
- 繰り返し (while, for)
順次
順次実行構造は,上に書かれた命令が先に実行され,下に書かれた命令が後に実行される構造のことです。なるべくこのようなシンプルで自然な構造になるようコードを書くべきです。
典型的な順次実行の例として,GSWPよりサンプルコードを引用します。
// Example 03-13 from "Getting Started with Processing"
// by Reas & Fry. O'Reilly / Make 2010
size(480, 120);
smooth();
strokeWeight(12);
strokeJoin(ROUND); // Round the stroke corners
rect(40, 25, 70, 70);
strokeJoin(BEVEL); // Bevel the stroke corners
rect(140, 25, 70, 70);
strokeCap(SQUARE); // Square the line endings
line(270, 25, 340, 95);
strokeCap(ROUND); // Round the line endings
line(350, 25, 420, 95);
画面の設定から描画まで,上から下へ順に実行されます。
条件判定と分岐 (if, switch)
条件に従って実行するコードブロックを切り替える仕組みは大変便利です。図5.3はif
文の流れ図です。論理式が成り立つ場合,つまり「真」ならば直下のコードブロックを実行し,論理式が成り立たなければ,つまり「偽」ならば流れは右へ分岐し,右側のコードブロックが実行されます。
基本的に,条件分岐の流れ図では,論理式が成り立つ(すなわち真の)とき真下へ向かう流れ線をたどり,論理式が成り立たない(すなわち偽の)とき横へ向かう流れ線をたどります。流れ線に真や偽,TやFといった値が記されていない場合はそのように理解してください。
昼には太陽、夜には月が動くようなアニメーション
これを実現するためは、たとえば以下のようなプログラムを書く
int scene; int x; float theta; void setup(){ scene = 0; theta = 3.1; size(600,300); } void draw(){ theta += 0.01; if(scene==0){ background(100,100,200); noStroke(); fill(250,250,250); ellipse(300*cos(theta)+300,300*sin(theta)+400,100,100); if(theta > 6.3){scene=1; theta=3.1;} } else { background(0); noStroke(); fill(250,250,50); ellipse(300*cos(theta)+300,300*sin(theta)+400,100,100); if(theta > 6.3){scene=0; theta=3.1;} } }
ここでは、ふたつの場面のどちらであるかを表すために scene
という変数を用意して、scene
が0なら昼の場面、それ以外なら夜の場面を描くようにしている。実際にはscene
は0か1である。
繰り返し (while, for)
同じような仕事を繰り返すことがあります。コンピュータは,繰り返しの仕事が得意です。人間なら早晩飽きて放り出してしまうことも,コンピュータは決して飽きません。
図5.4は繰り返しの基本形,while
文の流れ図です。
while
文による繰り返し構造の流れ図は次のように読みます。
- 論理式(条件式とも呼びます)が成り立てば,すぐ下のコードブロックへ実行が移ります。
- コードブロックの実行が終わると,論理式の直前に実行が戻ります。
- 論理式が成り立つ限り,コードブロックを繰り返し実行します。
- 論理式が成り立たない場合,実行は右側へ移り,コードブロックを実行せず
while
文の構造を終了します。
命令 for
を使うと、同じ内容は以下のように書ける。
int i; for(i=0; i<=90; i += 10){ line(0,i,99,i); }
参考:
- いろいろなソートアルゴリズム http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/
- Interactive Data Structure Visualizations http://student.seas.gwu.edu/~idsv/idsv.html