分而治之的方法

时间:2017-10-29 04:51:44

标签: algorithm

我怀疑的是,递归二元搜索算法是否遵循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);
} 

1 个答案:

答案 0 :(得分:1)

是的,它是分而治之的方法,是的,没有合并步骤

所以要明确,你知道会有3个步骤: -

  
      
  1. 鸿沟。 (选择适当的一半)
  2.   
  3. 治。 (搜索选定的一半)
  4.   
  5. 联合。 (这里什么都不做)
  6.   

时间复杂度

  

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