
50
■
3
章 アルゴリズムの構成要素
例
3-2
配列の最大要素を見つける再帰分割統治法式
/*
再帰呼び出し
*/
public static int maxElement (int[] vals) {
if (vals.length == 0) {
throw new NoSuchElementException("No Max Element in Empty Array.");
}
return maxElement(vals, 0, vals.length);
}
/*
部分問題
vals[left, right)
の最大要素を計算する。
*/
static int maxElement (int[] vals, int left, int right) {
if (right - left == 1) {
return vals[left];
}
//
部分問題を計算する
int mid = (left + right)/2;
int max1 = maxElement(vals, left, mid);
int max2 = maxElement(vals, mid, right);
//
部分問題の結果から最終結果を計算する
if (max1 > max2) { return max1; }
return max2;
}
例3-2に示される構造の分割統治法アルゴリズムは、ここに示すように解決ステッ
プが定数
O(1)
時間で達成されるなら
O(n)
性能を示す。解決ステップそのものに