分治法
来源:互联网 发布:sqlserver导入数据 编辑:程序博客网 时间:2024/05/17 07:43
分治法:
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)
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- _BLOCK_TYPE_IS_VALID(pHead->nBlockUse
- java WeakReference SoftReference and PhatomReference 介绍
- BSP编译问题
- 怎样获取一个集合中不同对象的同一个属性?
- Android高手进阶教程(五)之----Android 中LayoutInflater的使用!
- 分治法
- Js保留小数点
- 赋权
- 泛型及其应用
- 多线程操作一览
- iphone开发零碎知识汇总
- 将主机进程列表输出到一个文件,将该文件通过ftp上传
- 如何控制设备驱动程序的加载顺序
- 如何把程序钉到Windows7任务栏