基本思想:

为解决一个大问题:

  1. 分解成两个或多个更小的问题
  2. 分别解决每个小问题
  3. 把各小问题的解答组合起来,即可得到原问题的解
    小问题通常与原问题相似或同质,因而可以递归地分治。

分治策略的抽象化控制

procedure DANDC(p,q)global n,A(1:n);integer m,p,q;//1<=p<=q<=nif SMALL(p,q)then return(G(p,q))elsem<-DIVIDE(p,q)//p<=m<=q     return(COMBINE(DANDC(p,m),DANDC(m+1,q)))endif
end DANDC

分析

  • k=2:二分是最常用的分解策略;
  • SMALL(p,q):布尔函数,判断输入规模q-p+1是否足够小而无需进一步分解
  • G(p,q):对输入规模为q-p+1的子问题求解
  • DIVIDE(p,q):对输入规模为q-p+1的i问题进一步分解,返回值为[p.q]区间进一步的分割点
  • COMBINE(x,y):子结果的合并函数,将区间[p,m]和[m+1,q]上的子问题的解合并成上级区间[p,q]上的较完整解。当p=1,q=n时,就得到整个问题的解。

DANDC的计算时间

若两个子问题的输入规模大致相当,则DANDC总的计算时间可用递归关系式表示:
T(n)=g(n),n足够小
2T(n/2)+f(n),否则
注:

  • T(n):表示输入规模为n的计算时间
  • g(n):表示对足够小的输入规模直接
  • f(n):表示COMBINE对两个子区间的子结果进行合并的时间

二分检索(折半查找)

  1. 问题描述
    已知一个按非降次序排列的元素表a1, a2, …,an,判定某给定的元素x是否在该表中出现。若是,则找出x在表中的位置并返回其所在下;若非,则返回0值。
  2. 算法设计
procedure BINSRCH(A,n,x,j)//A为降次排列的数组integer low,high,mid,j,n;low<-1;high<-n;while low<=high domid<-(low+high)/2case:x<A(mid):high<-mid-1:x>A(mid):low<-mid+1:else:j<-mid;returnendcaserepeatj<-0
end BINSRCH
  1. 算法的正确性证明
  • 在具体指定A中的数据元素及x的数据类型后,算法中的所有运算都能按要求正确运行——即首先满足确定性和能行性
  • 终止性:满足条件结束程序
  1. 性能分析
  • 空间特性:n+5个空间位置——O(n)
  • 时间特性:成功检索/不成功检索

二元比较树

算法执行过程的主体是x与一系列中间元素A(mid)比较。可用一棵二元树描述这一过程,并称之为二元比较树。
内结点(成功,圆形)、外结点(不成功,方形)、路径
若n在区域[2k-1,2k)中,则对于一次成功的检索,BINSRCH至多做k次比较;对于一次不成功的检索,或者做k-1次比较,或者做k次比较。

任何一种以比较为基础的算法,在最坏情况下的计算时间都不低于Ο(logn)。因此, 不可能存在最坏情况比二分检索数量级还低的算法。
二分检索是解决检索问题的最优的最坏情况算法。

找最大最小元素

  1. 问题描述:
    给定含有n个元素的集合,在其中找出最大和最小元素。
  2. 算法设计:
 procedureAIATMIN(A,n,max,min)//将A中最大值置于max,最小值置于minInteger i,nmax<-min<-A(1)for i<-2 to n doif A(i)>max thenmax<-A(i)endifif A(i)<min thenmin<-A(i)endifrepeatend STRAITMAXMIN
  1. 比较次数
    最好情况:按递增次序排列,元素比较次数为n-1次
    最坏情况:按递减次序排列,元素比较次数为2(n-1)次
    平均情况:元素比较次数为3(n-1)/2次
  2. 分治法求解策略
    MAX(I) = max(MAX(I1),MAX(I2))
    MIN(I) = min(MIN(I1),MIN(I2))
    递归求解:
 procedure MAXMIN(i,j,fmax,fmin)integer i,j;global n,A(1:n)case:i=j:fmax<-fmin<-A(i):i=j-1:if A(i)<A(j) then fmax<-A(j):fmin<-A(i)endif:else:mid<-(i+j)/2call MAXMIN(i,mid,gmax,gmin)call MAXMIN(mid+1,j,hmax,hmin)fmax<-max(gmax,hmax);fmin<-min(gmin,gmin)end caseend MAXMIN
  1. 性能分析

归并分类

  1. 分类问题:排序
  • 内排序:冒泡,插入,归并,快排,堆排
  • 外排序
  1. 插入分类
procedure INSERTIONSORT(A,n)A(0)<- -∞for j<-2 to n doitem<-A(j);i<-j-1while item<A(i) doA(i+1)<-A(i);i<-i-1repeatA(i+1)<-item;repeat
end INSERTIONSORT

性能分析

  • 最坏情况:O(n2)
  • 最好情况:O(n)
  1. 归并分类(分治策略)
 procedure MERGESORT(low,high)integer low,highif low<high thenmid<-(low+high)/2call MERGESORT(low,mid)call MERGESORT(mid+1,high)call MERGE(low,mid,high)endifend MERGESORT
 procedure MERGE(low,mid,high)//A(low,high)是一个全程数组,它含有两个放在A(low,mid)和A(mid+1,high)中的已分类子集合,目标是将这两个已分类的集合归并成一个集合,并存放到A(low,high)中   integer h,l,j,k,low,mid,high;global A(low,high);local B(low,high)h<-low;i<-low;j<-mid+1;while h<=mid and j<=high do//当两个集合都没有取尽时,将较小的元素先存放到B中if A(h)<=A(j) then B(i)<-A(h);h<-h+1//如果前一个数组中的元素较小else B(i)<-A(j);j<-j+1//如果后一个数组中的元素较小endifrepeat//处理尚有剩余元素的集合if h>mid then for k<-j to high do B(i)<-A(k);i<-i+1;repeatelse for k<-h to mid do B(i)<-A(k);i<-i+1;repeatendiffor k<-low to high do A(k)<-B(k) repeat//将已归并的集合复制到A中end MERGE

性能分析:
T(n)=O(nlogn)
4. 快速分类
划分过程:

 procedure PARTITION(m,p)integer m,p,i; global A(m:p-1)v<-A(m);i<-m//A(m)是划分元素looploop i<-i+1 until A(i)>=v repeat//i由左向右移loop p<-p-1 until A(end PARTITION

计算机算法基础:分治法相关推荐

  1. 算法简介及计算机算法基础——算法学习(四)

    文章目录 关注算法缘由 描述计算机算法基础 描述运行时间 循环不变式 参考文档 接下来的算法学习内容主要根据<程序员必读经典(算法基础+计算机系统)>一书而写,作为读书笔记,感兴趣的可以见 ...

  2. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx 第 12 章计算几何基础计算几何(Computational Geometry)是计算机算法的一个重要分支,它要解决的是如何 ...

  3. 趣学算法系列-分治法

    趣学算法系列-分治法 声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版,更多实例分析请查看原书内容 第三章 分治 ...

  4. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx 第 14 章NP-完全问题讨论问题的复杂性.根据其难易程度把问题分类.如果一个问题有多项式的算法,则称为可驾驭的(tract ...

  5. 从合并排序算法看“分治法”

    本文内容 分治策略 分治步骤 从合并排序看"分治策略" 分治策略 分治法(divide-and-conquer),"分治法策略"是一种很重要的算法.顾名思义,& ...

  6. 沈孝钧计算机算法基础答案,计算机算法基础

    出版信息 沈孝钧 / 机械工业出版社 / 2013-11 / 45.00元 内容简介 计算机算法是计算机科学的一个重要分支,也是一个难点.本书作者根据自己20多年在国内.国外的教学与科研实践,系统地总 ...

  7. python矩阵乘法分治算法_矩阵乘法的Strassen算法详解 --(算法导论分治法求矩阵)...

    1 题目描述 2 思路分析 3 解法 4 小结 1 题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 2 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数 ...

  8. python分治算法_python算法实现-分治法

    分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 将最后子问题可以简单的直接求解----"治" 将所有子问 ...

  9. python分治算法_分治法及其python实现例子

    在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

  10. 算法复习——分治法重点问题

    一.众数问题 问题描述:给定含有n 个元素的多重集合S,每个元素在S 中出现的次数称为该元素的重数.多重集S 中重数最大的元素称为众数.例如,S={1,2,2,2,3,5}.多重集S 的众数是2,其重 ...

最新文章

  1. callee与caller
  2. c++ 指针常量,常量指针
  3. java中的泛型的使用与理解
  4. 实战-130W表增加字段耗时
  5. java.lang.IllegalStateException: Not connected to server
  6. 关于阿拉伯数字转化成为大写汉字
  7. java多态的实现_Java多态的实现机制是什么,写得非常好!
  8. springcould结合springbboot微服务 开发@^——^@ 模式讲解
  9. sql server 2005 几个常用的存储过程或函数
  10. 胎压监测 (15 分)
  11. windows 下访问bsd系统分区的小工具 ____FFS driver mount manager
  12. yamdi 实现添加元数据的注入flv文件,实现Nginx搭建flv视频浏览器上点播拖拽
  13. 大数据分析流程步骤都有哪些
  14. 【Pytorch with fastai】第 11 章 :使用 fastai 的中级 API 进行数据处理
  15. English——slang about body
  16. 张量网络算法基础(二、量子态、量子算符)
  17. 03矩阵的乘法与逆矩阵
  18. C++实现类似QT中的计时器QTime类(CQTime)
  19. tiktok运营学习怎么样
  20. 2n皇后问题 简单递归

热门文章

  1. 树莓派下pyaudio安装与声音监控应用
  2. javascript中文乱码问题分析及解决方案
  3. linux 神舟z7,老船长带你神舟战神Z7使用进阶
  4. 神经网络中激励函数的作用
  5. JSON Editor Online
  6. Oracle之rollUp函数
  7. skywalking源码分析第二十三篇一扩展篇:全链路压测
  8. JSP+MySQL基于ssm的物理竞赛管理系统
  9. Centos7系列各版本镜像合集下载
  10. DWG 、DXF格式互转、CAD版本转换,记住一个就能快速提高你的工作效率!