减治法、分治法和变治法是优化算法的三种基本方法,本篇主要描述三种方法的基本思想,不提供经典
例子以供分析,但在随后的几篇文章当中会具体讲解实例深刻理解这三种方法。本篇以及随后的算法文章
的理论以及示例主要依据Anany Levitin教授所编写的《算法设计与分析基础》。
减治法(decrease-and-conquer method)利用了一个问题给定的解和同样较小的实例的解之间的某
种关系。一旦这种关系确定之后,我们既可以从顶至下,也可以从底至上地来运用该关系。
它主要有三种变换的形式:
减去一个常量
减去一个常量因子
减去的规模是可变的
下面来谈一下对概念的理解,通过这个概念的前几句可以看出,是将大问题分解成小问题来解决的,像是一个金字塔的层次结构,由大问题分成一层一层的问题从最基础的几个单元开始,最后堆砌成一个大的金字塔,但在后续的学习过程中通过示例又发现它和传统意义上的分层次的金字塔又不太一样,更像是一种层层嵌套的一种结构。如下图所示:
分治法(divide-and-conquer method)是将一个问题划分成多个同一类型的子问题(子
问题最好规模相同),之后求这些子问题的解,如果有必要的话合并这些子问题的解,以得到
原始问题的答案。
因为这个基础概念比较容易理解因此不再绘图,我们可以将其理解一个树结构的处理问题方式,比如一个问题将其抽象为求n,然后分成了两个求n/2的问题,之后两个求n/2的问题又接着分形成了四个求n/4的问题,最后求得n/4的解,经过回溯得到了原本求n问题的答案。
变治法(transform-and-conquer)将同样的问题变成一个简单的方便的实例,或者变换同样实例
的不同表现,或者变换为另一个问题的实例。
这个方法的思路类似于数学建模的思路,将生活的问题进行简单的抽象,以便对此进行研究,举一个简单的例子:
在操场(欧几里得平面)上有n>=3个人,每个人都有唯一一位最近的邻居,他们手上拿着1块奶油块,收到信号后,都会把派扔向他最近的邻居。假设n是奇数,而且每个人都可以100%命中对方,请判断对错:每次至少有一个人不会被奶油派击中。
这个问题应该是正确的,我们来以3个人A,B,C举例,假如A与B的距离为c,B与C的距离为a,C与A的距离为b,那么如果每个人都会被扔到那么他们的距离关系应当满足c<a,b<c,a<c;显然我们发现这是存在前后矛盾的因此我们可以断定每次至少有一个人不会被奶油派击中是正确的。
这是将实际问题抽象的一个例子,将人抽象成点,将距离抽象成线的长度,并且利用反证法来证明这个假设。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务