int のソートされていない配列で指定されたターゲット値を見つける関数を C で書きたいとしましょう。一般に、これは単純で、O(n) 時間で実行されます。
int search(int *data, int len, int target)
{
int i;
for(i = 0; i < len; i++)
if(data[i]==target) return i;
return -1;
}
私たちがマゾヒスティックであり、代わりに分割統治アルゴリズムを使用してこれにアプローチしたいとしましょう。二分探索のように毎回配列の半分を除外できないため、再帰部分で問題が発生します。
int search(int *data, int start, int stop, int target)
{
// Base case: we've divided the array into two size subarray
if(stop==start+1)
{
if(data[start]==target) return start;
if(data[stop]==target) return stop;
return -1;
}
/* The recursion part is tricky.
We *need* to parse both halves of the array, because we can't safely
exclude any part of the array; it's not sorted, so we can't predict
which half it's going to be in.*/
else
{
/** This obviously doesn't work. */
int mid = (stop-start)/2;
return search(data, start, mid, target);
return search(data, mid+1, stop, target);
}
}
これを機能させる方法はありますか?
注: この質問を読んでいると思う人もいるかもしれませんが、これは私のために宿題をするように人々に求めているわけではありません。ただし、今週初めに提出した課題の問題を解決しようとしたときにこの問題に遭遇した後、好奇心に触発されました.