【算法?日更?第二十期】构造分治

▎什么是分治?

?『定义』

  分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等等。(copy自百度)

  一句话总结:分治就是把大问题转化成若干小问题,小问题解决后,大问题自然就迎刃而解。

?『使用条件』

  ①大问题分解成的小问题容易解决。

  ②大问题可以分解成子问题,且子问题的最优解就是大问题的最优解。

  ③在合并子问题时,可以得到大问题的解。

  ④任何子问题间不存在公共的子问题。

?『应用』

  归并排序二分&三分,快速排序等。

▎构造分治

?『分治的一般步骤』

  1. 划分步:把输入的问题划分为k个子问题,并尽量使这k个子问题的规模大致相同。

  2. 治理步:当问题的规模大于某个预定的阈值n0时,治理步由k个递归调用组成。

  3. 组合步:组合步把各个子问题的解组合起来,它对分治算法的实际性能至关重要,算法的有效性很大地依赖于组合步的实现。

  分治法的关键是算法的组合步。究竟应该怎样合并,目前没有统一的模式,因此需要对具体问题进行具体分析,以得出比较好的合并算法。(copy自百度)

  百度上说的太深奥了,我们只需要分解子问题,再逐个处理,最后合并答案即可。

原文地址:https://www.cnblogs.com/TFLS-gzr/p/11225057.html

时间: 2024-11-13 09:36:11

【算法?日更?第二十期】构造分治的相关文章

【算法?日更?第二十五期】万能算法(一):搜索+?

▎前言 看到这个标题,你是不是倍感疑惑,为什么会是搜索+,而不是搜索,会不会是小编打错的,其实本篇博客将会让你看到搜索的各种玩法. ▎前置技能 ?『基础知识』 搜索:dfs和bfs(戳这里迅速上手). ?『dfs和bfs的异同点』 相同点:dfs和bfs都用于搜索,都是来寻找点的. 不同点:dfs以深度为优先,不撞南墙不回头,一鼓作气搜遍一条路,所以比较不靠谱,但是代码量少,也好写,大部分人都喜欢用.而bfs则是以广度为优先,逐层遍历,相比dfs来说更加理性,但是当状态不好存储时,就只能用dfs

【算法?日更?第二十六期】非常基础的数论

一说到基础数论,那么我们就从整除那套理论开始谈起. ▎整除 ?『定义』 如果a能把b整除,也就是没有余数,则我们称a整除b,亦称b被a整除,记为a|b. 其中的“|”称为整除符号. ?『性质』 ①自反性:显然,对于任意正整数n,有n|n: ②传递性:若有a|b,b|c,则有a|c: ③反对称性:若a|b,b|a,则有a=b: 其中性质③很有用,通常用于无法直接证明a=b的情况,不过用到的少. ▎约数和倍数 ?『定义』 如果a|b,那么a是b的约数,b是a的倍数,也称a是b的因数/因子. ?『推论

【算法?日更?第十七期】信息奥赛一本通1598:【 例 2】最大连续和题解

废话不多说,直接上题: 1598:[ 例 2]最大连续和 时间限制: 1000 ms         内存限制: 524288 KB提交数: 303     通过数: 91 [题目描述] 给你一个长度为 n 的整数序列 {A1,A2,?,An},要求从中找出一段连续的长度不超过 m 的子序列,使得这个序列的和最大. [输入] 第一行为两个整数 n,m: 第二行为 n 个用空格分开的整数序列,每个数的绝对值都小于 1000. [输出] 仅一个整数,表示连续长度不超过 m 的最大子序列和. [输入样

【算法?日更?第八期】区间动态规划:1572:括号配对题解

废话不多说,直接上题: 题目测评链接:戳这里 其实什么GBE都没用,小编最开始看了半天不懂,看了看别人的博客才知道这段话没什么用处.其实就是给一段字符串,判断是否括号是配对的. 这道题一看就会想到区间动态规划(不会戳这里临时补一补),最开始先老老实实地写了一遍区间动态规划,后来觉得用栈也可以,于是写了一遍,代码如下: 1 #include<iostream> 2 #include<cstring> 3 #include<stack> 4 using namespace

日更第6期-2015-1-29-如何科学地使用因特网-第一讲-总之先爬墙

哟哟,我又来日更了啊!O(∩_∩)O哈哈~不过,其实是隔了两天,不过比起上次,是要好了不少. 先说个好消息吧!我1月31日就要放假啦,然后就可以回家啦. 然后,回家之后,我就要正式的日更啦!现在为止我可是一直在隐藏实力哦.我要从几天一更进化为一天几更. 先试试一夜七次...... 恩,说点正经的:我接下来会更新些什么内容. 第一部分,OpenFrameworks的使用,即OpenFrameworks系列教程,里面包括example的解释,tutorial的 翻译,api的详解以及最新例子的展示.

日更第2期-2015-1-15-openFrameworks系列第一讲-手把手制作openFrameworks上的第一个程序!

恩,今天和朋友打球来着,于是今天的案例程序就做一个球吧!O(∩_∩)O哈哈~ 首先,没有看过上一篇教程的同学,还有还没有下载好VS和OpenFrameworks的同学,都去下一下. 传送地址:http://www.cnblogs.com/linongbo/p/4227552.html 那么,开始今天的日更啦! Hello OpenFrameworks! VS的安装部分我就不说了,不过我个人建议——默认是安装在C盘的,不过你要是手动改到别的盘上的话,C盘上 依然会有6G左右的内容.......Σ(

日更第11期-2015-3-27-processing教程-API篇-第一讲-map(),Table,loadTable(),norm(),lerp()

hI!!今天上线发现我多了一个粉丝!!哇,好高兴! 不过我昨天食言了,没有继续日更......希望不会掉粉..... 不过那是有原因的,我昨天一直在找数据,终于今天给整理好了,我打算这个周末整一整.然后就可以出真正厉害的教程啦!! 我先说一下我接下来会出的教程,然后说说今天发的这个到底是什么. 接下来: 1,美国失业数据可视化 2,地图数据可视化案例教学(案例来自processing教学书visualizing data) 3,中国高考分地域分析 4,API教程 然后说说今天这是干啥. 简单来说

日更第4期-2015-1-19-openFrameworks系列第三讲-面向对象的小球们

昨天的教程里,实在有太多想讲的东西了,所以反而什么都没有讲.一个很大的原因就是——我妄想让所有 水平的读者都能读懂.这其实是绝对不可能的.因为,每个人知识面不同,已经掌握的技能也不同,那么所 适应的学习轨迹其实也该不同. 以我个人来说,我其实是一个谨慎型的人,在学习的过程中一般不会冒进,这意味着我的基础知识会更加 扎实,但是进步的速度就会偏慢.我在这里写博客,其实就是一种学习方式,但无疑,这种学习方式其实很 效率低下(而且还没有人看).可是,对于我就是一个很好的补充......感觉有点跑题了,其

【算法?日更?第五十期】二分图(km算法)

▎前言 戳开这个链接看看,惊不惊喜,意不意外?传送门. 没想到我的博客竟然被别人据为己有了,还没办法投诉. 这年头写个博客太难了~~~ 之前小编写过了二分图的一些基础知识和匈牙利算法,今天来讲一讲km算法,若你不知道匈牙利算法,请先看下面的博客.(否则会体验极差) 传送门 ▎km算法 ?『引入』 之前学习的匈牙利算法还记得吗?它处理的是无权二分图,长这个样子: //mspaint画出来的真粗糙 但是如果加入了权值呢?比如说是这个样子的: 现在,我们的问题变了,不再求最大匹配问题了,而是最优匹配问