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