算法设计与分析- 分治法.ppt

第章分治法 ;subproblem 2 of size n/2;分治法的基本思想;一个简单的例子: 个数字求和,如何用分治法解决? 是不是分治法一定比蛮力法高效呢? 串行计算 并行计算 通过分治法解决大问题的时间等于所有解决小问题的时间? ()()();()()()递推式的解法 直接使用公式 写出分治法解决个数字相加问题的效率类型,设每次分为个子问题;本章解决的问题: 排序 查找 大整数乘法 矩阵乘法 最近对 凸包 二叉树遍历; 合并排序 ;思想;;合并排序的递归算法;()是将有序数组、合并为有序数组的算法。 称为归并排序 归并排序示例:;前提:数组及数组已经有序。 比较数组的第一个记录与数组的第一个记录将值小者输出至数组,再从相应数组读进一个记录,替代已被输出的记录,再继续比较。 结束:直至有一个数组的记录已被穷尽,然后再将未穷尽的数组上的所有记录拷贝到输出数组上。;([][][]) ; []≤[] [][], [][], [] [] [] [];合并排序的效率分析; 简写为 ()()() 基本操作 比较?拷贝? (比较的次数不会大于拷贝的次数) 是否和其他因素相关? 最坏情况如何? 归并排序的效率(), ()() 解得 ()∈Θ();合并排序结论; 快速排序;;快速排序算法 ([]) 使用快速排序法对序列或者子序列排序 输入:子序列[]或者序列本身[] 输出:非递减序列 ← ( [] ) ( [] ) ( [] )? 是中轴元素基准点,是数组分区位置的标志 中轴元素如何选? 选好中轴后如何扫描数组形成分区?;分区的例子(双向扫描);数组的分区算法:;快速排序效率分析;()()(前面) (后面) 上式依赖于的位置。 考虑的基本操作: 比较 一次分区算法的比较次数是否和其他因素相关 对于一次长度为的数组的分区算法,如果出现指针交叉,所执行的比较是次,为什么? 相等,比较次数为次;;;; 结论; 折半查找(有序数组); ( [], ) 输入:已排序大小为的序列,待搜索对象 输出:如果搜索成功,则返回的位置,否则返回 ; ≤ ?()? [] [] ;折半查找效率分析: 基本操作:比较 最坏情况下,比较次数 ()( ??) () 设,可解得 () 于是 ()∈Θ(); 结论; 二叉树遍历及其相关特性;中序遍历( );前序遍历( );前序遍历执行过程图;二叉树的构造;二叉树的高度计算; 大整数乘法和矩阵乘法;分治法如何体现。 令为偶数,则和可表示为 其中和分别为的前半部和后半部。 =· (·) =· 和则分别为的前半部和后半部。如果按下述方法得到积(多项式相乘) ·()() ();;改进的乘法;有 ()()· () 其中,为常数,表示加法、减法所需时间与成正比。 解此递归方程,得 () ∈() ≈() 可见,乘法效率有改善。;评价;、 矩阵乘法;矩阵乘法;矩阵乘法; ?????? ???????????????? ??????????????????????? ?? 依此算法,计算个阶方阵的乘积转化 为计算个阶方阵的乘积 和个阶方阵的加法 上述分治法的计算时间耗费()如何写? ()() ();方法 () () () () ()() ()() ()() 他的算法只用了次乘法运算,但增加了加、减法的运算次数次。; 于是可得到:  引入次加减??? 矩阵乘积分治算法中,用了次对于阶矩阵乘积的递归调用和次阶矩阵的加减运算。 由此可知,该算法的所需的计算时间()满足如下的递归方程: ;矩阵乘法;结论; 分治法解最近点对问题和凸包问题; ) 将上的个点分成大致相等的个子集和 如何分? 将点按照轴升序排序 画一条垂直线;; ) 求一点在、另一点在中的最近点对 是否需要考察和

文档评论(0)

1亿VIP精品文档

相关文档