降服

分而治之 该方法已经讨论过,包括以下步骤: 将问题分解为若干子问题,这些子问题是同一问题的较小实例。 占领 通过递归求解子问题来解决这些问题。但是,如果子问题的规模足够小,只需以简单的方式解决子问题即可。 结合 将子问题的解转化为原问题的解。

null

类似地,该方法可以减少和克服,它还包括以下步骤: 减少 或者将问题实例减少为同一问题的较小实例,并扩展解决方案。 占领 通过解决问题的较小实例来解决问题。 延伸 解决较小的实例以获得原始问题的解决方案。 减少和征服技术的基本思想是基于利用问题的给定实例的解决方案与其较小实例的解决方案之间的关系。这种方法也称为渐进式或归纳式方法。

“分而治之”与“减少而征服”:

根据 维基百科 一些作者认为,只有当每个问题可能产生两个或多个子问题时,才应该使用“分而治之”的名称。对于单个子问题类,提出了“减少和征服”的名称。根据这个定义, 合并排序 快速排序 分而治之(因为有两个子问题)和 二进制搜索 属于减少和征服(因为有一个子问题)。

减少和征服的实现:

这种方法可以实现为自顶向下或自下而上。

自上而下的方法: 它总是导致问题的递归实现。 自下而上的方法: 它通常以迭代的方式实现,从问题的最小实例的解决方案开始。

减少和征服的变化:

减少和征服有三种主要变化:

  1. 减少常数
  2. 以不变的因数减少
  3. 可变尺寸减少

减少常数 :在这种变化中,实例的大小在算法的每次迭代中减少相同的常数。通常,该常数等于一,尽管偶尔也会发生其他常数大小的减小。以下是问题示例:

以不变的因数减少 :这种技术建议在算法的每次迭代中以相同的常数因子减少问题实例。在大多数应用中,该常数因子等于2。减少两倍以外的系数尤其罕见。

减少常数因子算法非常有效,尤其是当因子大于2时,如假硬币问题。以下是问题示例:

可变尺寸减少 :在这种变化中,大小缩减模式因算法的迭代而不同。 在寻找两个数的gcd的问题中,尽管第二个参数的值在右手边总是小于左手边,但它既不减少常数,也不减少常数因子。以下是问题示例:

可能有这样一种情况,即问题可以通过常数递减和因子变化递减来解决,但实现可以是递归的,也可以是迭代的。迭代实现可能需要更多的编码工作,但是它们避免了伴随递归的过载。

参考: 莱维丁 降服

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享