このメソッドの Big O の複雑さを分析する際に問題が発生しています。実際、私はこの方法が紛らわしい性質を持っているため、どのように機能するかについても確信が持てません. 今のところ、私が理解しているのは、配列内の「徐々に縮小する範囲」が特定の数値で検索されるということだけです。誰かが次のコードを説明し、その複雑さを分析する方法を教えてくれませんか?
static int foo(int a[], int u, int l, int x) {
while(l <= u) {
int s = (u-l+1)/3, f = l+s, b = f+s;
if(a[f] == x)
return f;
else if(a[b] == x)
return b;
else if(a[f] > x)
u = f-1;
else if(a[b] > x)
l = b+1;
else {
l = b-1;
u = f+1;
}
}
return -1;
}