比较分而治之与递归

Posted

技术标签:

【中文标题】比较分而治之与递归【英文标题】:Compare divide and conquer with recursion 【发布时间】:2012-02-25 22:55:27 【问题描述】:

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

所有的分治算法都是递归的,或者换句话说,所有的递归都采用了分治思想吗?

我糊涂了 。

【问题讨论】:

你问了两个不同的问题,请澄清 【参考方案1】:

如果我正确理解您的问题.. 所有分治算法本质上都是递归的吗?是的!

根据定义

在实践中应用分治算法分为三个步骤:

将问题分解为一个或多个子问题。 通过递归解决子问题来征服子问题。如果子问题 尺寸足够小,但是,只需解决一个子问题 直截了当的方式。 将子问题的解决方案合并到 原来的问题。

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

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

//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);

【讨论】:

以上是关于比较分而治之与递归的主要内容,如果未能解决你的问题,请参考以下文章

分而治之和快速排序

为啥分而治之在数组总和上没有表现出其性能优势?

对分而治之算法的一点认识

代码复用与函数递归

给定已排序的数组,如果数组 A 包含元素 A[i] 使得 A[i] = i (递归和分而治之),则返回索引 i

将分而治之的递归算法转换为迭代版本