欢迎来到天天文库
浏览记录
ID:33931547
大小:218.50 KB
页数:22页
时间:2019-02-28
《算法分析与设计 第五讲 分治法及相关实例分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、算法分析与设计第五讲分治法及相关实例分析1主要内容快速排序的改进Fibonacci数列Strassen矩阵乘法最大元、最小元最近点对问题2快速排序的分析QUICKSORT(A,p,r)ifp2、A[r]returni+13快速排序的随机化版本主要区别在于主元的选择不总是选择A[r]作为主元,而是从A[p…r]中随机选择一个元素作为主元具体操作方法是将A[r]与A[p…r]中的随机选中的一个元素交换RANDOMIZED-PARTITION(A,p,r)1i←RANDOM(p,r)2exchangeA[r]↔A[i]3returnPARTITION(A,p,r)RANDOMIZED-QUICKSORT(A,p,r)1ifp3、CKSORT(A,p,q-1)4RANDOMIZED-QUICKSORT(A,q+1,r)4快速排序的实际应用通常是用于排序的最佳实用选择原地排序,在虚存环境中也可以很好工作5Fibonacci数列1n0F(n)1n1F(n1)F(n2)n1n递归算法:(),(15)/2自底向上,依次计算Θ(n)有更好的方法吗?6Fibonacci数列矩阵法nFFnn111FFnn1107矩阵乘法矩阵乘法AaBbij,iji,j1,2,...,4、nCABc[]ijncaijikbkjk18矩阵乘法直接解法fori←1tondoforj←1tondocij←0fork←1tondocij←cij+aikbkj时间复杂度3()n9矩阵乘法分治策略假设n为2的幂,将矩阵A,B和C中每一矩阵都分块成为4个大小相等的子矩阵,每个子矩阵都是n/2×n/2的方阵CC1112AABB11121112CC2122AABB21222122CAB10矩阵乘法分治策略分析2Tn()8(/2)Tn()n3Tn()()n5、直接分治的时间复杂度并不比直接计算好11Strassen的策略只需要7次子矩阵的乘法引入M(i=1,2,…,7),如下iCMMMMMA(BB)1154261111222CMMM(AA)B12122111222CMMM(AA)B21343212211CMMMMMA(BB)2251374222111M(AA)(BB)511221122M(AA)(BB)612222122M(AA)(BB)71121111212Strassen矩阵乘法分析2Tn()7(/2)Tn()n26、.81Tn()(n)更好的算法?2.376Tn()(n)13最大元、最小元给定n个数据元素,找出其中的最大元和最小元直接解法:逐个找,用n-1次比较来找出最大元,再用n-2次比较来找出最小元,比较次数(基本运算)为2n-3次可以用分治法吗?14最大元、最小元分治法当n=2时,一次比较就可以找出两个数据元素的最大元和最小元当n>2时,可以把n个数据元素分为大致相等的两半求数组最大元、最小元的算法下界3/22n15最近点对对于平面上给定的N个点,给出距离最近的两个点Bruteforce法:把所有点对逐7、一检查一遍分治策略•如何分解?•如何合并?16最近点对点数较少时的情形YYY直接计算直接计算d=∞XXX只有一个点只有两个点只有三个点17最近点对分解对所有的点按照x坐标从小到大排序根据下标进行分割,使点集分成两个集合18最近点对解决递归寻找P和P中的最近点对LR设其找到的最近点对的距离分别是δ和δLR置δ=min(δ,δ)LR19最近点对合并可能并不是δ,存在这样的情况,一个点在P中,L另一个点在P中,而这两点之间的距离小于δR如何检查呢?只考虑分割线两侧距离各为δ的点继续压缩点的范围20最近点对难点8、如何在线性时间内获得YYXXY,,,,LRLR21分治法小结二分搜索幂乘合并排序快速排序Fibonacci数列Strassen矩阵乘法最大元、最小元最近点对问题……22
2、A[r]returni+13快速排序的随机化版本主要区别在于主元的选择不总是选择A[r]作为主元,而是从A[p…r]中随机选择一个元素作为主元具体操作方法是将A[r]与A[p…r]中的随机选中的一个元素交换RANDOMIZED-PARTITION(A,p,r)1i←RANDOM(p,r)2exchangeA[r]↔A[i]3returnPARTITION(A,p,r)RANDOMIZED-QUICKSORT(A,p,r)1ifp3、CKSORT(A,p,q-1)4RANDOMIZED-QUICKSORT(A,q+1,r)4快速排序的实际应用通常是用于排序的最佳实用选择原地排序,在虚存环境中也可以很好工作5Fibonacci数列1n0F(n)1n1F(n1)F(n2)n1n递归算法:(),(15)/2自底向上,依次计算Θ(n)有更好的方法吗?6Fibonacci数列矩阵法nFFnn111FFnn1107矩阵乘法矩阵乘法AaBbij,iji,j1,2,...,4、nCABc[]ijncaijikbkjk18矩阵乘法直接解法fori←1tondoforj←1tondocij←0fork←1tondocij←cij+aikbkj时间复杂度3()n9矩阵乘法分治策略假设n为2的幂,将矩阵A,B和C中每一矩阵都分块成为4个大小相等的子矩阵,每个子矩阵都是n/2×n/2的方阵CC1112AABB11121112CC2122AABB21222122CAB10矩阵乘法分治策略分析2Tn()8(/2)Tn()n3Tn()()n5、直接分治的时间复杂度并不比直接计算好11Strassen的策略只需要7次子矩阵的乘法引入M(i=1,2,…,7),如下iCMMMMMA(BB)1154261111222CMMM(AA)B12122111222CMMM(AA)B21343212211CMMMMMA(BB)2251374222111M(AA)(BB)511221122M(AA)(BB)612222122M(AA)(BB)71121111212Strassen矩阵乘法分析2Tn()7(/2)Tn()n26、.81Tn()(n)更好的算法?2.376Tn()(n)13最大元、最小元给定n个数据元素,找出其中的最大元和最小元直接解法:逐个找,用n-1次比较来找出最大元,再用n-2次比较来找出最小元,比较次数(基本运算)为2n-3次可以用分治法吗?14最大元、最小元分治法当n=2时,一次比较就可以找出两个数据元素的最大元和最小元当n>2时,可以把n个数据元素分为大致相等的两半求数组最大元、最小元的算法下界3/22n15最近点对对于平面上给定的N个点,给出距离最近的两个点Bruteforce法:把所有点对逐7、一检查一遍分治策略•如何分解?•如何合并?16最近点对点数较少时的情形YYY直接计算直接计算d=∞XXX只有一个点只有两个点只有三个点17最近点对分解对所有的点按照x坐标从小到大排序根据下标进行分割,使点集分成两个集合18最近点对解决递归寻找P和P中的最近点对LR设其找到的最近点对的距离分别是δ和δLR置δ=min(δ,δ)LR19最近点对合并可能并不是δ,存在这样的情况,一个点在P中,L另一个点在P中,而这两点之间的距离小于δR如何检查呢?只考虑分割线两侧距离各为δ的点继续压缩点的范围20最近点对难点8、如何在线性时间内获得YYXXY,,,,LRLR21分治法小结二分搜索幂乘合并排序快速排序Fibonacci数列Strassen矩阵乘法最大元、最小元最近点对问题……22
3、CKSORT(A,p,q-1)4RANDOMIZED-QUICKSORT(A,q+1,r)4快速排序的实际应用通常是用于排序的最佳实用选择原地排序,在虚存环境中也可以很好工作5Fibonacci数列1n0F(n)1n1F(n1)F(n2)n1n递归算法:(),(15)/2自底向上,依次计算Θ(n)有更好的方法吗?6Fibonacci数列矩阵法nFFnn111FFnn1107矩阵乘法矩阵乘法AaBbij,iji,j1,2,...,
4、nCABc[]ijncaijikbkjk18矩阵乘法直接解法fori←1tondoforj←1tondocij←0fork←1tondocij←cij+aikbkj时间复杂度3()n9矩阵乘法分治策略假设n为2的幂,将矩阵A,B和C中每一矩阵都分块成为4个大小相等的子矩阵,每个子矩阵都是n/2×n/2的方阵CC1112AABB11121112CC2122AABB21222122CAB10矩阵乘法分治策略分析2Tn()8(/2)Tn()n3Tn()()n
5、直接分治的时间复杂度并不比直接计算好11Strassen的策略只需要7次子矩阵的乘法引入M(i=1,2,…,7),如下iCMMMMMA(BB)1154261111222CMMM(AA)B12122111222CMMM(AA)B21343212211CMMMMMA(BB)2251374222111M(AA)(BB)511221122M(AA)(BB)612222122M(AA)(BB)71121111212Strassen矩阵乘法分析2Tn()7(/2)Tn()n2
6、.81Tn()(n)更好的算法?2.376Tn()(n)13最大元、最小元给定n个数据元素,找出其中的最大元和最小元直接解法:逐个找,用n-1次比较来找出最大元,再用n-2次比较来找出最小元,比较次数(基本运算)为2n-3次可以用分治法吗?14最大元、最小元分治法当n=2时,一次比较就可以找出两个数据元素的最大元和最小元当n>2时,可以把n个数据元素分为大致相等的两半求数组最大元、最小元的算法下界3/22n15最近点对对于平面上给定的N个点,给出距离最近的两个点Bruteforce法:把所有点对逐
7、一检查一遍分治策略•如何分解?•如何合并?16最近点对点数较少时的情形YYY直接计算直接计算d=∞XXX只有一个点只有两个点只有三个点17最近点对分解对所有的点按照x坐标从小到大排序根据下标进行分割,使点集分成两个集合18最近点对解决递归寻找P和P中的最近点对LR设其找到的最近点对的距离分别是δ和δLR置δ=min(δ,δ)LR19最近点对合并可能并不是δ,存在这样的情况,一个点在P中,L另一个点在P中,而这两点之间的距离小于δR如何检查呢?只考虑分割线两侧距离各为δ的点继续压缩点的范围20最近点对难点
8、如何在线性时间内获得YYXXY,,,,LRLR21分治法小结二分搜索幂乘合并排序快速排序Fibonacci数列Strassen矩阵乘法最大元、最小元最近点对问题……22
此文档下载收益归作者所有