版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Last SectionKRUSKAL(G, w) _Disjoint Set A for each vertex v V Gdo MAKE-SET (v)sort the edges of E by nondecreasing weight wfor each edge (u, v) E, in order by nondecreasing weight do if FIND-SET (u) FIND-SET (v) then A A (u, v) UNION(u, v)Return ADisjoint Set Linked list: (m2)weighted union: m+nlogn
2、Disjoint-set Forest with union-by-rank and path compression: KRUSKAL: ElogEAnother Implementation of PrimsAlgorithm D (G, w, r)Q VG/ build heapfor each u Q do key u keyr 0r NILwhile Q do u EXTRACT MIN(Q) / O(V)O(lgV), for each v Adju/2Edo if v Q and w(u, v) keyvthen v ukeyv w u, vO(V), O(V)O(lgV), E
3、O(lgV).MethodologyAlgo. A Algo. B MethodPrincipleControlAlgo. B Algo. CMethodControl + Data StructureAlgo. C Algo. DData StructureDivide and ConquerMINMAX: 2n 2 vs. 3n/2 2二分搜索:算法BINARYSEARCHREC在n 个元素组成的已排序数组中搜索某个元素所执行的元素比较次数不超过 ;非递归;合并排序: nlogn寻找第 k 小元素:20cn划分算法与快速排序:n-1;n(n-1)/2合并排序将待排序数组对半分成两个子数组;
4、分别对两个子数组排序;将两个已排序的子数组合并。合并排序MERGESORT输入:n个元素的数组A1n。输出:按非降序排列的数组A1n。mergesort(A, 1, n)Procedure mergesort (A, low, high)if low 1, 则执行了步骤2到步骤5,根据函数C 的定义(n元素需比较次数),执行步骤3和步骤4需要的元素比较次数都为C(n/2)。合并两个子数组所需的元素比较次数在n/2 与n 1 之间Algorithm MERGE输入:数组A1.m,索引1p q r m,两个子数组Ap.q和Aq+1.r分别非降序排列输出:合并Ap.q和Aq+1.r的数组Ap.rBp
5、.r为辅助数组1.sp; tq+1; kp; 2.while s q and t r 3.If As At then4.Bk As5.s s+16.else7. Bk At8. t t+19.end if 10. k k+111.end while12.If s=q+1 then Bk.r At.r13.elseBk.r As.q14.end if15.Ap.r Bp.rAlgorithm MERGE输入:数组A1.m,索引1p q =2的解是f(n)= bnxlogcn + dnx若 a=cxf(n)= 若 acx合并排序效率最小比较次数C(n)=(nlogn)/2因(a,c非负整数,b,d
6、,x非负常数,n=ck):f(n)=d若 n=1=af(n/c)+bnx若 n=2的解是f(n)= bnxlogcn + dnx若 a=cxf(n)= 若 acx合并排序效率如果n 是任意的正整数(不必是2的幂),对于由算法MERGESROT执行的元素比较次数C(n) 的递推关系式为C (n) = 0 若n = 1 =C ( ) + C ( ) + bn 若 n 2C(n)=(nlogn)寻找第 k 小元素n 个已排序的A1n 序列的中项是其“中间”元素。如果n 是奇数,则中间元素是序列中第(n + 1)/2 个元素;如果n 是偶数,则存在两个中间元素,所处的位置分别是n/2 和n/2 +1,
7、 在这种情况下,我们将选择第n/2 个最小元素。综合两种情况,中项是第 最小元素。寻找中项的一个直接的方法是对所有的元素排序并取出中间一个元素,这个方法需要(n log n)时间,因为任何基于比较的排序过程在最坏的情况下必须至少要花费这么多时间。寻找第 k 小元素SELECT输入:n个元素的数组A1n和整数k, 1 k n。输出:A中的第k 小元素。select(A, 1, n, k)Procedure select (A, low, high, k)p high low + 1if p 44 then 将A 排序return (Ak)令q = 。将A分成q组,每组5个元素。如果5不整除p,
8、则排除剩余的元素。将q 组中的每一组单独排序,找出中项。所有中项的集合为M.mm select(M, 1, q, )/mm 为中项集合的中项将Alowhigh 分成三组A1 = a | a mm7. case| A1 | k: return select (A1, 1, |A1|, k)| A1| + | A2| k: return mm|A1| + |A2| k: return select(A3, 1, |A3|, k-|A1| - |A2|)8. end case寻找第 k 小元素把n 个元素划分成 组,每组由5个元素组成,如果n不是5的倍数,则排出剩余的元素。每组进行排序并取出它的中项
9、即第三个元素。接着将这些中项序列中的中项元素记为mm, 它是通过递归计算得到的。算法的步骤6将数组A 中的元素划分成三个数组:A1, A2, A3, 其中分别包含小于、等于和大于mm 的元素。最后,在第7步,求出第k 小的元素出现在三个数组中的哪一个,并根据测试结果,算法或者返回第k 小的元素,或者在A1 或A3上递归。寻找第 k 小元素SELECT输入:n个元素的数组A1n和整数k, 1 k n。输出:A中的第k 小元素。select(A, 1, n, k)Procedure select (A, low, high, k)p high low + 1if p 44 then 将A 排序re
10、turn (Ak)令q = 。将A分成q组,每组5个元素。如果5不整除p, 则排除剩余的元素。将q 组中的每一组单独排序,找出中项。所有中项的集合为M.mm select(M, 1, q, )/mm 为中项集合的中项将Alowhigh 分成三组A1 = a | a mm7. case| A1 | k: return select (A1, 1, |A1|, k)| A1| + | A2| k: return mm|A1| + |A2| k: return select(A3, 1, |A3|, k-|A1| - |A2|)8. end case例8, 33, 17, 51, 57, 49, 3
11、5, 11, 25, 37, 14, 3, 2, 13, 52, 12, 6, 29, 32, 54, 5, 16, 22, 23, 23, 7 设数组A1n 存储这个序列,k = 13, 即要在数组A 中找到第13小的元素, 例首先把数集划分成5组,每组有5个元素:(8,33, 17, 51, 57),(49,35, 11, 25, 37),(14,3, 2, 13, 52),(12,6, 29, 32, 54),(5,16, 22, 23, 7)。接着以升序对每组排序:(8,17, 33, 51, 57),(11,25, 35, 37, 49),(2,3, 13, 14, 52, (6,1
12、2, 29, 32, 54),(5,7, 16, 22, 23)。 取每组的中项并形成中项集:M = 33, 35, 13, 29, 16. 例利用算法递归找出M中的中项元素:mm = 29. 将A 划分成三个子序列:A1 = 8, 17, 11, 25, 14, 3, 2, 13 12, 6, 5, 16, 22, 23, 7, A2 = 29, A3 = 32, 51, 57, 49, 35, 37, 52, 32, 54. 因为1310 = | A1 | + | A2 |, 设A = A3 , 在A中找第3小的元素(3= 13-10),算法将返回A3= 22.Select 效率1、2均为
13、(1);3 为(n);4为(n);5为T( )6为(n);7为T(0.7n+1.2)设0.7n+1.2=44T(n)=c若n44 =44T(n)=20cn (c为一足够大的常数)寻找第 k 小元素SELECT输入:n个元素的数组A1n和整数k, 1 k n。输出:A中的第k 小元素。select(A, 1, n, k)Procedure select (A, low, high, k)p high low + 1if p 44 then 将A 排序return (Ak)令q = 。将A分成q组,每组5个元素。如果5不整除p?将q 组中的每一组单独排序,找出中项。所有中项的集合为M.mm sel
14、ect(M, 1, q, )/mm 为中项集合的中项将Alowhigh 分成三组A1 = a | a mm7. case| A1 | k: return select (A1, 1, |A1|, k)| A1| + | A2| k: return mm|A1| + |A2| k: return select(A3, 1, |A3|, k-|A1| - |A2|)8. end case划分算法SPLIT输入:数组Alowhigh.输出:(1)输出Alow in Position 的重新排列的数组A; (2) 划分元素Alow的新位置w.1. i low2. xAlow3. for j low +
15、 1 to high4. if A j x then5.i i + 16. if i j then 互换A i 和A j 7.end if8. end for9. 互换Alow 和Ai10. w i11. return A 和w571683划分算法SPLIT输入:数组Alowhigh.输出:(1)输出Alow in Position 的重新排列的数组A; (2) 划分元素Alow的新位置w.1. i low2. xAlow3. for j low + 1 to high4. if A j x then5.i i + 16. if i j then 互换A i 和A j 7.end if8. e
16、nd for9. 互换Alow 和Ai10. w i11. return A 和wn-1次元素比较571683快速排序QUICKSORT输入:n个元素的数组A1n.输出:按非降序排列的数组A 中的元素。Quicksort(A, 1, n)procedurequicksort (A, low, high)if low 1式中b 和d都是大于0的常量。由定理,递推式的解是T(n) = ( n2).大整数乘法考虑用以下恒等式计算wz + xywz + xy = (w + x) ( y + z) wy xz由于wy 和 xz 不需要做二次计算,结合以上二式,仅需3次乘法运算,即uv = wy2n +
17、( w + x) ( y + z) wy xz) 2n/2 + xz这样u 和v的乘法运算简化为3次n/2规模整数的乘法运算和6次加法运算,这些加法所花时间是( n)。 大整数乘法此方法产生以下递推式T (n) = d若n = 1=3T(n/2) +bn若 n1上式中的b 和d 是适当选择的某个大于0的常量。由定理得出:T (n) = ( n log 3) = O (n1.59)这是对传统方法的一个显著改进。矩阵乘法A 和B 是两个n x n 的矩阵,我们希望计算它们的乘积C = AB 传统算法C 由以下公式计算C (i, j) = A (i, k) B (k, j)算法需要n3次乘法运算和n
18、3 n2次加法运算,导致其时间复杂性为 ( n3)。分治(递归)方法设a, m分别表示加法和乘法的耗费T(n)=mn=1=8T(n/2)+4(n/2)2 an=2T(n)= mn3+an3-an2同传统方法STRASSEN 算法算法的基本思想在于以增加加减法的次数来减少乘法次数:用了7次n/2 x n/2 矩阵乘法和18次n/2 x n/2 矩阵的加法设A = a11a12 和B = b11b12 a21a22 b21b22为了计算矩阵的乘积C = a11 a12 b11 b12 a21 a22 b21 b22STRASSEN 算法首先计算以下的乘积d1 = (a11 + a22) (b11 + b22)d2 = (a21 + a22) b11d3 = a11 (b12 b22)d4 = a22 (b21 b11)d5 = (a11 + a12) b22d6 = (a21 a11) (b11 + b12)d7 = (a12 a22) ( b21 + b22)接着从下面式子计算出CC = d1 + d4 d5 + d7d3 + d5 d2 + d4d1 + d3 d2 + d6STR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工伤保险相关法律法规、司法解释及案例汇编(2026+版)
- 2026年山东省邹城市高考历史模拟卷及答案参考
- 2026 山东事业编市场监管岗含答案
- 2026 湖南 水利岗事业单位易错点巩固训练卷含解析
- 高中地理教资面试地图专项及答案
- 2026下半年小学美术教资面试色彩理论题库及解析
- 2026年保健按摩师职业技能等级认定操作技能历年真题
- 2026年七年级下册地理认识亚洲
- 2025年河北省深州市高二历史上册期末考试测试卷及参考答案【完整版】
- 2025年山东省禹城市高二生物上册期末考试考试卷【考点提分】附答案
- 2026年道路客运汽车驾驶员职业技能等级认定(三级)操作技能试题
- 2026年安徽省中考英语真题试卷及答案
- 内支撑设计计算书(Excel自动计算版)
- 六年级上册语文1-8单元基础默写通关练习卷
- 2026年安徽省基层法律工作试题(附答案)
- 2026年福建厦门大学附属第一医院海沧院区(厦门市肿瘤医院)辅助岗位招聘8人笔试备考试题及答案详解
- 2025-2026学年江苏省苏州市高新区苏州实验中学高二上学期10月月考数学试卷(含答案)
- 煤矿井下无轨胶轮车安全管理培训
- 慢性肾脏病基层诊疗管理指南(2025版)
- (正式版)DB11∕T 354-2023 《生活垃圾收集运输管理规范》
- 14.1 全等三角形及其性质 课件(共33张)-人教版(2024)数学八年级上册
评论
0/150
提交评论