分治法

分治法:

1)   将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模

2)   对这些较小的实例求解(一般使用对贵方法,但在问题规模足够小的时候,有时候会利用另一个算法)。

3)   如果必要的话,合并这些较小问题的求解,已得到原始问题的解

1.      归并排序

算法:

mergeSort(A,n)

//用对贵调用对数组 A进行排序

//输入:一个待排序的数组 A,n 为数组元素个数

//输出: 一个已排序数组 A

if n >1

     copyA[0,1,..n/2-1]  to  B[0,1…n/2-1]

     copyB[n/2,….n-1]  to  C[0,1…n-n/2]

     mergeSort(B,n/2)

     mergeSort(C,n-n/2)

     merge(B,n/2,C,n-n/2,A,n)

 

Tromino谜题 Tromino是一个有棋盘上的三个邻接方块组成的L型瓦片。我们的问题是,如何用Tromino覆盖一个缺少了一个方块(可以在棋盘上的任何位置)的2^n*2^n棋盘。除了这个缺失的方块,Tromino应该覆盖棋盘上的所有方块,而且不能重叠。

Tromino(n,i,j)

//用递归来求解Tromino问题

//输入:其反的大小n(即:2^n*2^n),缺失方块的位置i,j

ifn=1

     return //此时只需要一个L瓦片填充非缺失快即可

//否则棋盘将分成4个区域,其中一个包含缺失方块

//第一个区域,判断缺失方块是否在其中

ifi<=2^(n-1)-1 and  j<=2^(n-1)-1   //缺失方块在区域中

     Tromino(n-1,i,j)

Tromino(n-1,2^(n-1)-1,2^(n-1)-1)  //让右下角的方块空缺,目的是让这个方块与其他3个区域的方块组成一个 L 型瓦片

//第二个区域

ifi>2^(n-1)-1 and j<=2^(n-1)-1

     Tromino(n-1,i-2^(n-1),j)

Tromino(n-1,0,2^(n-1)-1)

//第三个区域

if  i<=2^(n-1)-1 and j>2^(n-1)-1

     Tromino(n-1,i,j-2^(n-1))

Tromino(n-1,0,2^(n-1)-1)

//第四个区域

if  i>2^(n-1)-1 and j>2^(n-1)-1

     Tromino(n-1,i-2^(n-1),j-2^(n-1))

Tromino(n-1,0,0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值