文章目录

  • 前言
  • 一、分治法设计思想
  • 二、分治法与递归
  • 三、分治法的适用条件
  • 四、时间复杂度分析
  • 五、分治法设计步骤
  • 六、分治法示例
  • 总结

前言

大家好,我是一只勤勤恳恳的程序猿。本篇文章小猿将跟您分享算法设计与分析中的分治法,希望对大家有所帮助。

一、分治法设计思想

将一个复杂的问题分解成若干个规模较小、相互独立,但类型相同的子问题求解;然后再将各子问题的解组合成原始问题的一个完整答案,这样的问题求解策略就叫分治法。
        说明
        (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、分治法的设计步骤:划分、求解子问题、合并

结语
        对蛮力法的介绍就到这里啦,希望这篇文章能给予你一些帮助,感谢各位人才的:点赞、收藏和评论,我们下次见。

算法设计与分析之分治法相关推荐

  1. 算法设计与分析-《分治法》

    <分治法> 一.分治与递归 二.分治法适应条件与时间复杂度 三.快速幂算法 四.Strassen矩阵乘法 五.合并排序 一.分治与递归 分治的设计思想是: 将一个大问题,分割成一些规模比较 ...

  2. 【算法设计与分析】-- 分治法

    1.分治法的基本思想 分治法的基本思想是将一个规模为n的问题分解为k个规模为较小的子问题,这些子问题互相独立且与原问题相同,递归地求解这些子问题,然后利用子问题的解合并出原问题的解. 2.分治算法的设 ...

  3. 算法设计与分析之分治法——棋盘覆盖

    一:算法分析 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图:

  4. 计算机算法课程论文设计与实现,算法设计与分析课程论文

    算法设计与分析课程论文 "卓越工程师教育培养计划"(简称卓越计划)旨在培养一批创新能力强.适应经济社会发展需要的高质量工程技术人才.在南通大学计算机科学与技术学院制定的软件工程专业 ...

  5. 深大算法设计与分析实验二——分治法求最近点对问题

    源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...

  6. 算法设计与分析——分治法

    主要思想 (其实有这个思想也想不出来): 1.划分:整个问题划分成多个子问题 2.求解:求解各子问题的解 3.合并:合并子问题的解 (手说:"我会了",脑子:"不会&qu ...

  7. 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...

    <太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...

  8. 算法设计与分析——算法思想总结

    算法设计与分析 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 分治法所能解 ...

  9. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

最新文章

  1. 北大博士网恋被骗7400RMB,聊天记录惨遭曝光!
  2. CTFshow 文件包含 web79
  3. 将完整的XP(非PE)安装到U盘
  4. Log4j线程死锁–案例研究
  5. modelsim 安装后运行,出现fatal License Error
  6. python + mysql 实现账号管理系统
  7. 中药和西药的历史渊源,到底谁才是科学好药
  8. 以太坊合约24小时新增2.44万ETH
  9. 使用PDF-XChange Editor为PDF文件添加图章(仅图片)
  10. 关于微信拼车小程序开发的需求分析(需求获取)
  11. c语言编写算术编码,算术编码C语言实现
  12. 激活visio(2019)
  13. 苹果电脑怎样禁用首字母自动大写?
  14. JAVA实现GMT转换北京时间
  15. 计算机中安装音乐软件是一种,电脑必装的八款软件,你装了吗?
  16. linux 根据文件路径自动创建文件夹
  17. 漏洞修复:Often Misused: HTTP Method Override
  18. vue使用高德地图实现实时天气预报功能
  19. 网页字体单位px、em、%、rem、pt、vm、vh介绍
  20. 设计模式是不是一件脱裤子放屁的事

热门文章

  1. 2021山东上半年软考时间已定!!!
  2. qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库
  3. 基于PHP的酒店住宿管理系统 毕业设计源码261455
  4. 用Auto.js批量删除空间说说
  5. 小甲鱼PE详解之资源(PE详解11)
  6. 混合正弦余弦算法和 Lévy飞行的麻雀算法-附代码
  7. 如何使用“友宝”app在自动售水机上使用“友宝钱包”支付。
  8. 数据结构个人电话号码查询系统实验报告
  9. 备抵附加账户的期末余额_会计账户
  10. 无盘服务器4根网线雨两根网线的区别,网线接法的描述:实际用到4根。