算法:减治法分治法和变治法

概要

		减治法、分治法和变治法是优化算法的三种基本方法,本篇主要描述三种方法的基本思想,不提供经典
	例子以供分析,但在随后的几篇文章当中会具体讲解实例深刻理解这三种方法。本篇以及随后的算法文章
	的理论以及示例主要依据Anany Levitin教授所编写的《算法设计与分析基础》。

减治法

			减治法(decrease-and-conquer method)利用了一个问题给定的解和同样较小的实例的解之间的某
		种关系。一旦这种关系确定之后,我们既可以从顶至下,也可以从底至上地来运用该关系。

它主要有三种变换的形式:

  • 减去一个常量

  • 减去一个常量因子

  • 减去的规模是可变的

      下面来谈一下对概念的理解,通过这个概念的前几句可以看出,是将大问题分解成小问题来解决的,像是一个金字塔的层次结构,由大问题分成一层一层的问题从最基础的几个单元开始,最后堆砌成一个大的金字塔,但在后续的学习过程中通过示例又发现它和传统意义上的分层次的金字塔又不太一样,更像是一种层层嵌套的一种结构。如下图所示:

      如上图所示,我们可以将它视为一个集合有n个元素,我们有理由的相信,这个集合可以通过一系列规则只用知道其中的一个元素就可以求出其它所有元素,然后就形成了如上图的一种结构。而减治法大概也采用的是这样一种思路。
      再说明一下减治法的三种基本形式,减去一个常量就是n个元素我们减去C个元素(C是一个正整数),减去一个常量因子我们可以认为将这个集合的元素一分为二或者分成多份。比如将上图中的n-1改为n/2,减去的规模是可变的我们可以认为一个集合中每次减去的规模不一样,比如有n个元素的集合,我第一次减去一个元素成为n-1第二次减去了n/2的元素成为(n-1)/2.

分治法

		分治法(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;显然我们发现这是存在前后矛盾的因此我们可以断定每次至少有一个人不会被奶油派击中是正确的。
  这是将实际问题抽象的一个例子,将人抽象成点,将距离抽象成线的长度,并且利用反证法来证明这个假设。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值