分治法

分治法(divide and conquer)的基本思想

分治法是把一片领土分解为若干部分,然后一块块的征服。(大的毕竟比小的容易征服)
划分问题(divide):把问题的实例划分成子问题
递归求解(conquer):递归解决子问题
合并问题(combine):合并子问题的解得到原问题的解


归并排序

  1. 先将待排序数组划分成两个待排序数组
  2. 依次递归的处理每一部分
  3. 合并两个有序数组(在线性时间内可以完成)。

运行时间

    T(n) = T(n / 2) + θ(n)


棋盘覆盖问题

无标题.png

棋盘覆盖算法(参数表)
{
  如果是单个字符,则返回;
  将棋盘划分成尺寸为一半的子棋盘;(2k * 2 k 划分为 4个2k-1 * 2k-1);
  判断特殊方格在哪个子棋盘中,再用相应的L型骨牌覆盖相应的结合部,
即不含特殊方格的部分在结合部的三个方格
  记下他们的位置,作为各部分的特殊方格
  依次对左上角,右上角,左下角和右下脚这四个子棋盘进行棋盘覆盖
}
参数表:
  递归元:棋盘尺寸size=2k。递归时棋盘尺寸减半,即size = size / 2。若size为1则终止
  棋盘位置参数tr和tc(棋盘左上角的位置参数--横坐标和纵坐标)
  该棋盘特殊方格位置的位置参数dr和dc
  L型骨牌覆盖的顺序利用全局变量title表示


Hilbert图案


Hilbert图案.PNG

从递推关系中找规律.PNG

从规律中总结递推关系.PNG

Hilbert算法.PNG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参考blog 棋盘覆盖问题 问题描述 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以...
    chenhh6701阅读 3,342评论 0 4
  • 本文来自我的个人博客 https://www.zhangshenghai.com/posts/57540/ 分治法...
    shenghaishxt阅读 666评论 0 0
  • 版本记录 前言 将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法...
    刀客传奇阅读 2,951评论 0 0
  • 目录 零、主定理 零-零、利用数学方法求解递归式 一、归并排序*二、最大子数组问题2.1 问题描述2.2 使用分治...
    王侦阅读 1,922评论 0 3
  • Day04 我记得在小学五年级的时候,自从这件事后改变了我,从此仿佛变了一个人似的。 那是在小学五年级时,我们换了...
    黄燕财富管理师阅读 245评论 0 1