「アルゴリズム」は効率的なあるいは困難な処理を行う、プログラミング手法の総称です。ここでは、アルゴリズムの「おもしろさ」、「凄さ」を紹介する簡単なアルゴリズムを紹介します。

// num の平方根の値を求める
float right, left;
float middle=0.0, fmiddle, fleft;
float num=10;
left=0.0;
right=num;
while (right-left>0.00001) {
middle=(left+right)/2.0f; //中点を求める
println("left"+left + " right:"+ right+ "middle:"+ middle);
fmiddle=middle*middle-num; //中点での値を求める
fleft=left*left-num; //左の値を求める
//解の存在範囲を変更する
if ( fmiddle * fleft< 0.0) right=middle;
else left = middle;
}
println("root="+middle);
///実行結果
left0.0 right:5.0middle:2.5
left0.0 right:2.5middle:1.25
left1.25 right:2.5middle:1.875
left1.875 right:2.5middle:2.1875
left2.1875 right:2.5middle:2.34375
left2.1875 right:2.34375middle:2.265625
left2.1875 right:2.265625middle:2.2265625
left2.2265625 right:2.265625middle:2.2460938
left2.2265625 right:2.2460938middle:2.2363281
left2.2265625 right:2.2363281middle:2.2314453
left2.2314453 right:2.2363281middle:2.2338867
left2.2338867 right:2.2363281middle:2.2351074
left2.2351074 right:2.2363281middle:2.2357178
left2.2357178 right:2.2363281middle:2.236023
left2.236023 right:2.2363281middle:2.2361755
left2.236023 right:2.2361755middle:2.2360992
left2.236023 right:2.2360992middle:2.236061
left2.236061 right:2.2360992middle:2.2360802
left2.236061 right:2.2360802middle:2.2360706
root=2.2360706
//二分探索
int num=1000;
int [] a = new int[num];
int s, n;
void setup() {
randomSeed(millis());
for (int i=0;i<num;i++) a[i]=(int)random(0, 10000);
a=sort(a);
s = (int)random(0, 999);
n = bySrch(a[s], a, 0, 999);
println("s:"+ s + " n:" + n);
}
int bySrch(int x, int[] a, int left, int right)
{
int mid=0;
while (left <= right ) {
mid = (left + right) / 2; //leftとrightの中央の位置
println("l="+left+" r="+right);
//println("mid="+a[mid]+" x="+x);
if (a[mid] <= x) left = mid + 1 ;
if ( a[mid] >= x) right = mid -1;
}
if (a[mid] == x ) return mid;//見つかった
return -1;//見つからない
}
///
l=0 r=999
l=0 r=498
l=0 r=248
l=125 r=248
l=125 r=185
l=156 r=185
l=156 r=169
l=156 r=161
s:158 n:158