配列 a: a 1 , a 2 , … a k , … a nの場合、 1 < k および k < n のときにa k-1 ≤ a k ≥ a k+1である場合に限り、a kはピークです。a 1 ≥ a 2の場合、a 1はピークであり、a n-1 ≤ a nの場合、 a nはピークです。目標は、配列から 1 つのピークを見つけることです。
分割統治アルゴリズムは次のように与えられます。
find_peak(a,low,high):
mid = (low+high)/2
if a[mid-1] <= a[mid] >= a[mid+1] return mid // this is a peak;
if a[mid] < a[mid-1]
return find_peak(a,low,mid-1) // a peak must exist in A[low..mid-1]
if a[mid] < a[mid+1]
return find_peak(a,mid+1,high) // a peak must exist in A[mid+1..high]
このアルゴリズムが正しいのはなぜですか? ピークが存在するアレイの半分を失うことで問題が発生する可能性があると思います。