算法设计与分析之分治法
文章目录
- 前言
- 一、分治法设计思想
- 二、分治法与递归
- 三、分治法的适用条件
- 四、时间复杂度分析
- 五、分治法设计步骤
- 六、分治法示例
- 总结
前言
大家好,我是一只勤勤恳恳的程序猿。本篇文章小猿将跟您分享算法设计与分析中的分治法,希望对大家有所帮助。
一、分治法设计思想
将一个复杂的问题分解成若干个规模较小、相互独立,但类型相同的子问题求解;然后再将各子问题的解组合成原始问题的一个完整答案,这样的问题求解策略就叫分治法。
说明
(1)、规模较小:当规模小的时候将会容易得到求解答案;
(2)、相互独立:避免在递归的时候重复计算,提高效率;
(3)、类型相同:方便递归实现;
下面使用图解的方式展示一下分治法的设计思想
1、首先将要求解的较大规模的问题分割成k个更小规模的子问题,对这k个子问题分别求解。
2、如果子问题的规模仍然不够小,则再划分为k个子问题。如此递归的进行下去,直到问题规模足够小,很容易求出其解为止,对这k个子问题分别求解。
3、将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
注意点
(1)、最好使子问题的规模大致相等
(2)、最好使各子问题之间相互独立
(3)、分治法是可行的:子问题都可解,可利用这些子问题的解求出原问题的解。
二、分治法与递归
反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。因此,分治与递归就像一对孪生兄弟,经常同时应用在算法设计之中。
三、分治法的适用条件
1、该问题的规模缩小到一定的程度就可以容易地解决。
2、该问题可以分解为若千个规模较小的相同问题,即该问题具有最优子结构性质。
3、利用该问题分解出的子问题的解可以合并为该问题的解。
4、该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。需要注意的是,这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。
四、时间复杂度分析
五、分治法设计步骤
一般来说, 分治法的设计步骤由以下三个阶段组成:
1、划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并烬量使这k个子问题的规模大致相同。.
2、求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。
3、合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。
由上面的分析过程可以得到分治法的算法设计模式
对该设计模式进行时间复杂度分析
六、分治法示例
1、数字旋转矩阵
2、有序表查找
3、Strassen矩阵乘法
4、棋盘覆盖问题
5、快速排序
6、最近对问题
总结
知识点总结
1、分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
2、分治法的设计步骤:划分、求解子问题、合并
结语
对蛮力法的介绍就到这里啦,希望这篇文章能给予你一些帮助,感谢各位人才的:点赞、收藏和评论,我们下次见。
算法设计与分析之分治法相关推荐
- 算法设计与分析-《分治法》
<分治法> 一.分治与递归 二.分治法适应条件与时间复杂度 三.快速幂算法 四.Strassen矩阵乘法 五.合并排序 一.分治与递归 分治的设计思想是: 将一个大问题,分割成一些规模比较 ...
- 【算法设计与分析】-- 分治法
1.分治法的基本思想 分治法的基本思想是将一个规模为n的问题分解为k个规模为较小的子问题,这些子问题互相独立且与原问题相同,递归地求解这些子问题,然后利用子问题的解合并出原问题的解. 2.分治算法的设 ...
- 算法设计与分析之分治法——棋盘覆盖
一:算法分析 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图:
- 计算机算法课程论文设计与实现,算法设计与分析课程论文
算法设计与分析课程论文 "卓越工程师教育培养计划"(简称卓越计划)旨在培养一批创新能力强.适应经济社会发展需要的高质量工程技术人才.在南通大学计算机科学与技术学院制定的软件工程专业 ...
- 深大算法设计与分析实验二——分治法求最近点对问题
源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...
- 算法设计与分析——分治法
主要思想 (其实有这个思想也想不出来): 1.划分:整个问题划分成多个子问题 2.求解:求解各子问题的解 3.合并:合并子问题的解 (手说:"我会了",脑子:"不会&qu ...
- 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...
<太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...
- 算法设计与分析——算法思想总结
算法设计与分析 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 分治法所能解 ...
- 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案
<计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...
最新文章
- 北大博士网恋被骗7400RMB,聊天记录惨遭曝光!
- CTFshow 文件包含 web79
- 将完整的XP(非PE)安装到U盘
- Log4j线程死锁–案例研究
- modelsim 安装后运行,出现fatal License Error
- python + mysql 实现账号管理系统
- 中药和西药的历史渊源,到底谁才是科学好药
- 以太坊合约24小时新增2.44万ETH
- 使用PDF-XChange Editor为PDF文件添加图章(仅图片)
- 关于微信拼车小程序开发的需求分析(需求获取)
- c语言编写算术编码,算术编码C语言实现
- 激活visio(2019)
- 苹果电脑怎样禁用首字母自动大写?
- JAVA实现GMT转换北京时间
- 计算机中安装音乐软件是一种,电脑必装的八款软件,你装了吗?
- linux 根据文件路径自动创建文件夹
- 漏洞修复:Often Misused: HTTP Method Override
- vue使用高德地图实现实时天气预报功能
- 网页字体单位px、em、%、rem、pt、vm、vh介绍
- 设计模式是不是一件脱裤子放屁的事
热门文章
- 2021山东上半年软考时间已定!!!
- qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库
- 基于PHP的酒店住宿管理系统 毕业设计源码261455
- 用Auto.js批量删除空间说说
- 小甲鱼PE详解之资源(PE详解11)
- 混合正弦余弦算法和 Lévy飞行的麻雀算法-附代码
- 如何使用“友宝”app在自动售水机上使用“友宝钱包”支付。
- 数据结构个人电话号码查询系统实验报告
- 备抵附加账户的期末余额_会计账户
- 无盘服务器4根网线雨两根网线的区别,网线接法的描述:实际用到4根。