算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析?

文章目录

  • 1. 分治策略的基本思想
    • 1.1 二分检索的设计思想
    • 1.2 二分归并排序的设计思想
    • 1.3 Hanoi塔的递归算法
  • 2 小结

1. 分治策略的基本思想

  • 分治策略(Divide and Conquer)
  1. 将原始问题划分或归结为规模较小的子问题
  2. 递归或者迭代的求解每个子问题
  3. 将子问题的解综合得到原问题的解

在设计分治策略时,一定要注意以下几点:

  1. 子问题与原问题的性质完全一样
  2. 子问题之间可以彼此独立的求解
  3. 递归停止时,子问题可以直接进行求解得出结果。

下面以二分检索的例子来分析分之策略的思想。

1.1 二分检索的设计思想

  • 设算法:Binary Search(T,l,r,x)。
  • 输入:排好序的数组T ,下标从l到r;数x。
  • 输出:j //若x在T中,则为下标,否则为0

给出下面的伪码


二分检索的设计思想:

  1. 通过x与数组的中位数进行比较,将原问题归结为规模减半的子问题。如果x小于中位数,则子问题由小于x的数构成,否则子问题由大于x的数构成。
  2. 对子问题进行二分搜索算法
  3. 当子问题为1时,直接比较T[m]与x,若相等则返回m,否则返回0.

二分检索最坏情况下时间复杂度分析,在前面的文章中已经学习了如何分析算法的时间复杂度,如果不懂下面的公式的,可以多看看前面的文章。

W(n)=W(⌊n/2⌋)+1W(n)= W(\lfloor n/2 \rfloor)+1W(n)=W(⌊n/2⌋)+1
W(1)=1W(1) = 1W(1)=1

可以解出:

W(n)=⌊logn⌋+1W(n) = \lfloor logn \rfloor +1W(n)=⌊logn⌋+1

1.2 二分归并排序的设计思想

  • 设算法:Merge Sort(A,p,r)
  • 输入:A[p…r]
  • 输出:元素按从小到大排序额数组A

先看以下伪码:


二分归并的设计思想:

  1. 将原问题划分为规模为n/2的两个子问题
  2. 继续划分,将原问题归结为4个子问题,继续…当子问题估摸为1时,划分结束。
  3. 从规模1到n/2,陆续归并被排好序的两个数组。每归并一次,数组规模扩大一倍,直到原始数组。

二分归并排序的时间复杂度:假设n为2的幂次方,二分归并排序最坏时间复杂度为:

W(n)=2W(n/2)+n−1W(n) = 2W(n/2) + n-1W(n)=2W(n/2)+n−1
W(1)=0W(1) = 0W(1)=0

可以解出:
W(n)=nlogn−n+1W(n) = nlogn - n + 1W(n)=nlogn−n+1

仔细体会着其中的分治策略

1.3 Hanoi塔的递归算法


Hanoi塔的算法设计思想:

  1. 将原问题归结为规模为n-1的两个子问题
  2. 继续归结,将原问题归结为n-2的四个子问题.继续… ,当子问题规模为1时,归约过程截止。
  3. 从规模为1到n-1,陆续组合两个子问题的解,知道规模为n。

2 小结

  1. 将原问题归约为规模较小的子问题,子问题与原问题性质完全一样
  2. 子问题规模足够小时,可以直接求解
  3. 算法可以递归也可以迭代实现
  4. 算法的分析方法为:递推方程

【算法设计与分析】13 分治策略的设计思想相关推荐

  1. 算法设计与分析:分治思想 - 入门

    文章目录 分治思想 判断分治的条件 分治思想在排序问题的应用 求逆序对的个数 分治总结 本文参考UCAS卜东波老师的计算机算法设计与分析课程完成 分治思想 分治思想可以归纳为两点: 将一个复杂问题化简 ...

  2. 算法实验一 递归与分治策略

    递推/递归与分治策略1 实验题目:王老师爬楼梯 题目描述: 王老师爬楼梯,他可以每次走1级或者2级或者3级楼梯,输入楼梯的级数,求不同的走法数.(要求递推求解)如果N很大,需要高精度计算. 输入要求: ...

  3. 计算机算法设计与分析二--分治

    1.如果问题和以下数据结构相关,那么把他们分成子问题相对容易 n维数组 矩阵 n个元素的集合 树 有向无环图 通用图 2.分治算法一般应用于可以分成子问题的问题 实例: 一.排序问题:对一个n维数组排 ...

  4. HTML+CSS期末大作业 中国传统美食网站设计 节日美食13页 html5网页设计作业代码 html制作网页案例代码 html大作业网页代码

  5. 【算法设计与分析】14 分治算法的一般描述和分析方法

    本文主要描述分治算法的一般描述和分析方法.衔接上一篇文章:[算法设计与分析]13 分治策略的设计思想 文章目录 1 分治算法的一般性描述 1.1 分支算法的时间分析 1.2 两类常见的递推方程与求解方 ...

  6. 【算法设计与分析】15 分治策略:芯片测试

    上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...

  7. 算法设计与分析练习题

    第一章 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ.算法执行后一定产生确定的结 ...

  8. c语言分治法求众数重数_五大常见算法策略之——递归与分治策略

    递归与分治策略 递归与分治策略是五大常见算法策略之一,分治策略的思想就是 分而治之 ,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的 ...

  9. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

最新文章

  1. 金额阿拉伯数字转换为中文大写
  2. 如何理解物体的6D位姿估计任务?
  3. python之路--嵌套函数、匿名函数、高阶函数。函数的递归
  4. mongodb 安装启动
  5. sitecore系列教程之目标功能有什么新意?
  6. Java实现心跳机制
  7. mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)
  8. 主键约束 mysql
  9. 苹果cms10 官方QQ微信防红防封代码
  10. Sqlit--学习教程(基本操作1)
  11. JavaScript数据结构——栈(Stack)
  12. 个人取得工资、薪金所得应当如何缴纳个人所得税
  13. 2016/11/23【转载3】USB OTG 引脚定义
  14. java同期_Java日期处理-本期,同期,上期
  15. 操作系统---处理器调度
  16. 通过tushare的股票数据绘制股票各曲线图——KDJ指标曲线
  17. “我爱淘”冲刺阶段Scrum站立会议9
  18. On Inferring Autonomous System Relationships in the Internet 论文阅读笔记
  19. ParameterizedType获取java泛型参数类型
  20. linux编译GDAL

热门文章

  1. 第七十一期:管理 | 技术Leader:选OKR还是KPI?
  2. 53pagecontext对象
  3. java学习(152):字节缓冲输出流
  4. java学习(85):Interage包装类基本使用
  5. Centos7中Memcached安装使用说明
  6. SpringCloud(二) 服务注册到Eureka
  7. [Python] 制作启动uiautomator2 的web版 uiautomatorviewer2 批处理启动
  8. 写出gradle风格的groovy代码
  9. 技能UP:SAP OBYC自动记账的实例说明(含value String应用说明)
  10. JAVA求集合中的组合