アルゴリズム1(反復による平方根の計算)
x = 2; // 2の平方根を求める.ここを書き換えると別の数の平方根を求められる.
delta = 0.0001; // 解の精度
y = 0;
while((y+delta) * (y+delta) < x){
y = y + delta;
}
alert(str(x)+"の平方根は"+str(y));
アルゴリズム2(二分法による平方根の計算)
x = 2; // 2の平方根を求める.ここを書き換えると別の数の平方根を求められる.
delta = 0.0000001; // 解の精度を上げても大丈夫
a = 0;
b = x;
while(b-a > delta){
c = (a+b)/2
if(c*c > x){
b = c;
}
else{
a = c;
}
}
alert(str(x)+"の平方根は"+str(a));
アルゴリズム3(ニュートン・ラプソン法による平方根の計算)
x = 2; // 2の平方根を求める.ここを書き換えると別の数の平方根を求められる.
delta = 0.0000001; // 解の精度を上げても大丈夫
y = x;
while(abs(x - y * y)/(2*y) > delta){
y = (y*y+x)/(2*y);
}
alert(str(x)+"の平方根は"+str(y));
アルゴリズム4(再帰的なフィボナッチ数の計算)
int f(i){
if(i==0 || i == 1) { return 1; }
else{
int a = f(i-1);
int b = f(i-2);
return a + b;
}
}
alert("fib(10)="+str(f(10)));
アルゴリズム5(メモ化によるフィボナッチ数の計算)
int[] v=new int[1000];
int f(i){
if(i==0 || i == 1) { return 1; }
else if(v[i] != 0) { return v[i]; }
else{
int a = f(i-1);
int b = f(i-2);
v[i] = a + b;
return v[i];
}
}
alert("fib(10)="+str(f(10)));
アルゴリズム6(二分探索による辞書の検索)
words = {"apple","banana","melon","orange","pineapple"};
N = 5;
w = "orange";
// w = "watermelon";
int search(w){
int a = 0;
int b = N;
while(a <= b){
int c = floor((a+b)/2);
if(w == words[c]){
return c;
}
else {
if(w < words[c]){
b = c - 1;
}
else{
a = c + 1;
}
}
}
return -1;
}
j = search(w);
if(j < 0){
alert(w+"は収録されていなかった");
}
else{
alert(w+"は辞書の"+j+"番目に収録されている");
}
アルゴリズム7(再帰的な最短経路長の計算)
// 駅に番号をつける
// 渋谷 : 0, 新宿 : 1, 表参道 : 2, 目黒 : 3, 池袋 : 4,
// 国会議事堂前 : 5, 後楽園 : 6, 本郷三丁目 : 7
w = {{-1, 3.4, 1.3, 3.1, -1, -1, -1, -1},
{-1, -1, -1, -1, 4.8, 5.1, -1, -1},
{-1, -1, -1, -1, -1, 3.3, -1, -1},
{-1, -1, -1, -1, -1, 5.7, -1, -1},
{-1, -1, -1, -1, -1, -1, 4.8, -1},
{-1, -1, -1, -1, -1, -1, 6.8, 5.9},
{-1, -1, -1, -1, -1, -1, -1, 0.8},
{-1, -1, -1, -1, -1, -1, -1, -1}};
double d(v){
if(v == 7){ return 0.0; }
else{
double minv=100.0;
for(int i=0;i < 8;i++){
if(w[v][i]>=0.0){
minv=min(minv, d(i)+w[v][i]);
}
}
return minv;
}
}
alert(str(d(0)));
アルゴリズム8(メモ化による最短経路長の計算)
// 駅に番号をつける
// 渋谷 : 0, 新宿 : 1, 表参道 : 2, 目黒 : 3, 池袋 : 4,
// 国会議事堂前 : 5, 後楽園 : 6, 本郷三丁目 : 7
w = {{-1, 3.4, 1.3, 3.1, -1, -1, -1, -1},
{-1, -1, -1, -1, 4.8, 5.1, -1, -1},
{-1, -1, -1, -1, -1, 3.3, -1, -1},
{-1, -1, -1, -1, -1, 5.7, -1, -1},
{-1, -1, -1, -1, -1, -1, 4.8, -1},
{-1, -1, -1, -1, -1, -1, 6.8, 5.9},
{-1, -1, -1, -1, -1, -1, -1, 0.8},
{-1, -1, -1, -1, -1, -1, -1, -1}};
int[] m=new int[8];
double d(v){
if(v == 7){ return 0.0; }
else if(m[v]>0){ return m[v]; }
else{
double minv=100.0;
for(int i=0;i < 8;i++){
if(w[v][i]>=0.0){
minv=min(minv, d(i)+w[v][i]);
}
}
m[v] = minv;
return minv;
}
}
alert(str(d(0)));
「情報」授業用 プログラミング演習:図形描画プログラムを作ろうにコピー & ペーストで貼り付けて実行できる.