我怀疑的是,递归二元搜索算法是否遵循Divide and Conquer范式。在我看来,它没有遵循。此算法中没有组合步骤。如果我错了,请纠正我。
下面的递归二进制搜索伪代码:
int search(int
a[], int value, int start, int stop)
{
// Search failed
if (start > stop)
return -1;
// Find midpoint
int mid = (start + stop) / 2;
// Compare midpoint to value
if (value == a[mid]) return mid;
// Reduce input in half!!!
if (value <a[mid])
return search(a, start, mid – 1);
else
return search(a, mid + 1, stop);
}
答案 0 :(得分:1)
是的,它是分而治之的方法,是的,没有合并步骤。
所以要明确,你知道会有3个步骤: -
- 鸿沟。 (选择适当的一半)
- 治。 (搜索选定的一半)
- 联合。 (这里什么都不做)
醇>
T(N)= T(N / 2)+ THETA(1)
告诉我们T(n)= O(logn)
该算法最多需要logn
步才能停止。在每个迭代范围除以2。
n,n/2,n/4... n/2^k=1 (after k step)
n/2k=1 so k=log2_n