当前位置:网站首页>递归与分治
递归与分治
2022-07-28 23:47:00 【哈里斯Henry】
在前面的学习中了解了递归在排序与检索中的应用。本小节将介绍递归更广泛的应用。
棋盘覆盖问题
2^k*2^k的棋盘中间恰好有一个黑色格,其他都是白色。使用L型组合(4种)覆盖整个棋盘,注意黑色格不能被覆盖,白色格不能被重复覆盖。

由于棋盘2^k*2^k具有高度对称性,所以可以很容易的想到使用分治——将棋盘切割为4块,每一块都是2^(k-1)*2^(k-1),其中如果有一块有黑格子,可以使用递归解决;其他没有黑格子的三大块可以在中心构造出一个黑格子(如下图)继续递归。递归边界为k=1。

这道题在分治中为了使切割的四块使用同等的递归,变在本次递归的“中心”依据大白块的位置构造L型黑块,所以每次L型的覆盖利用的是这样的一个“构造”过程。最终递归的终点就是上图最右端,可见一直到递归的终点都是在一直构造L型块填充,所以可以证明出经过整个递归过程,棋盘内所有的白色小块都被L型无重复覆盖。
循环日程表问题
经典的一道递归问题,讲的是n=2^k个运动员进行网球循环赛,设计比赛日程表使得每个选手必须与其他n-1个选手各比赛一次,且每个选手每天只能比赛1次,循环赛一共n-1天。设计比赛日程表,有n行n-1列,第i行j列为第i个选手第i个选手第j天遇到的选手。
可以模拟k=1时的情况,此时n=2,所以可以列出这样的一个日程表:

接着模拟k=2,此时发现可以将原k=1的4*4方块体拓展成4个——原4*4块放在左上角,右下角和左上角一样,右上方和左下方都是左上角每一个元素+2的结果(数学易证,此处不做解释)。同理第一列还是要舍掉:

同样n=3也是一样的操作,其中右上角和左下角为左上角每个元素+4。以此类推,可以化作一个递归实现。
ACM学习笔记 DAY 24
边栏推荐
- Implement Lmax disruptor queue from scratch (VI) analysis of the principle of disruptor solving pseudo sharing and consumers' elegant stopping
- y80.第四章 Prometheus大厂监控体系及实战 -- kube-state-metrics组件介绍和监控扩展(十一)
- 进程和线程知识点总结 2
- 从零开始实现lmax-Disruptor队列(六)Disruptor 解决伪共享、消费者优雅停止实现原理解析
- 主线程与守护线程
- Send SMS verification code asynchronously using Ronglian cloud celery
- Error reporting: Rong Lianyun sends SMS verification code message 500
- AQS原理
- Inftnews | yuanuniverse shopping experience will become a powerful tool to attract consumers
- Machine learning | matlab implementation of RBF radial basis function neural network Newrbe parameter setting
猜你喜欢

电子招标初学者指南

Irregular clipping of NC data with CDO

QT static compiler (MinGW compilation)

分类预测 | MATLAB实现TCN时间卷积神经网络的时序分类预测

时间序列数据的预处理方法总结
![[AD learning] the course of PCB drawing in this marine vehicle competition](/img/37/211a0557848f6922fda7a69a114923.png)
[AD learning] the course of PCB drawing in this marine vehicle competition

🧐 table1 | 一秒搞定你的三线表

华为发布HarmonyOS 3.0,向“万物互联”再迈一步

SystemVerilog-连接和复制运算符

selenium对接代理与seleniumwire访问开发者工具NetWork
随机推荐
Day2:三种语言暴刷牛客130题
[raspberry pie] how does the windows computer connect with raspberry pie
B+ 树 ~
Copu Professor Lu Shouqun was invited to give a keynote speech at the open atom global open source summit
Daniel guild Games: summary and future outlook of this year
从零开始实现lmax-Disruptor队列(六)Disruptor 解决伪共享、消费者优雅停止实现原理解析
UE4 调试常用的打印信息方法
Educational Codeforces Round 132 (Rated for Div. 2)【A~C】
【commons-lang3专题】003- RandomStringUtils 专题
追踪伦敦银实时行情的方法有哪些?
快手重点整治搬运、洗稿等方式的养号行为,自媒体平台如何净化内容生态
Android必备的面试技能(含面试题和学习资料)
What opportunities does the London gold real-time market bring?
状态压缩dp-蒙德里安的梦想
Wechat campus bathroom reservation applet graduation design finished product (8) graduation design thesis template
ActiveMQ基本详解
ThinkPHP高仿蓝奏云网盘系统程序
Selenium docking agent and selenium wire access developer tool network
DRF - paging, JWT introduction and principle, JWT quick use, JWT source code analysis, JWT custom return format, custom user issued token, custom token authentication class
对接支付宝支付