比较分而治之和递归

时间:2012-02-03 09:52:18

标签: recursion divide-and-conquer

当我们谈论分而治之时,我们总是使用递归。我已经知道分而治之是一种算法设计技术,但我有一个问题:

是否所有分而治之的算法递归,或换句话说,在所有递归中都采用分而治之的思想?

我糊涂了 。

1 个答案:

答案 0 :(得分:4)

如果我正确理解你的问题.. 是Divide&征服算法本质上是递归的?是的!

按照定义

在实践中应用Divide and Conquer算法有三个步骤:

  • 将问题分为一个或多个子问题。
  • 解决子问题,解决它们递归。如果是子问题 但是,尺寸足够小,只需解决a中的子问题 直截了当的方式。
  • 将子问题的解决方案合并到解决方案中 原始问题。

但如果你关注实现部分..然后递归(虽然更优雅和简单)并不是唯一的方法。

二元搜索是一个众所周知的分而治之范例,这里是算法的迭代实现。

//binary search for x, in array A[1 .. N]

min := 1;
max := N;
repeat
  mid := (min+max) div 2;
  if x > A[mid] then
    min := mid + 1;
  else
    max := mid - 1;
until (A[mid] = x) or (min > max);