网站大量收购独家精品文档,联系QQ:2885784924

《离散数学---算法的平均复杂度分析》课件.ppt

《离散数学---算法的平均复杂度分析》课件.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 素数测试随机算法 算法13.13 素数测试 Primality(n) 1. if n是偶数∧n≠2 then return 合数 2. if n=2 then return 素数 3. if n=1 then return n=1 4. 计算 t 和 s 使得n?1=2ts, 其中s是奇数 5. 产生一个{1,2,…,n?1}上的均匀随机数a 6. for i=0 to t do 7. 计算bi← * 素数测试随机算法(续) 8. if bt≠1 then return 合数 9. if b0=1 then return 素数 10. j←max{ i |bi≠1} 11. if bj=n?1 then return 素数 12. else return 合数 算法是单侧错误的. 当n是素数时, 必返回素数; 而当n是合数时, 算法不一定返回合数. 可以证明, 当n是合数时算法返回素数的概率, 即错误概率不超过1/2. 谢谢! * 13.3 算法的平均复杂度分析 13.3.1 排序算法 快速排序算法 桶排序算法 13.3.2 散列表的检索和插入 散列函数 链接法 开地址法(线性搜索法,双散列函数法) * 快速排序算法 算法13.6 快速排序算法 Quicksort(A,p,r) 1. if p≥r then return A 2. x←A[r] //取A[r]作为轴值 3. i←p?1 4. for j←p to r?1 do 5. if A[j]≤x then i←i+1, 交换A[i]与A[j] 6. 交换A[i+1]与A[r] //把A[p..r]分成A[p..i]和A[i+2..r], 主元x置于A[i+1] 7. Quicksort(A,p,i) 8. Quicksort(A,i+2,r) * 计算实例 i=0 5 6 2 8 1 7 3 4 i=0 5 6 2 8 1 7 3 4 i=0 5 6 2 8 1 7 3 4 i=1 2 6 5 8 1 7 3 4 i=1 2 6 5 8 1 7 3 4 i=2 2 1 5 8 6 7 3 4 i=2 2 1 5 8 6 7 3 4 i=3 2 1 3 8 6 7 5 4 2 1 3 4 6 7 5 8 * 快速排序算法平均时间复杂度分析 前提:假设输入服从均匀分布 ?n:n个数的排列, T(?n):输入为?n时算法的计算时间, Tn:输入规模为n 时的平均计算时间. ??n, P(?n)=1/n!, Tn=E[T(?n)]= 设轴值x是第i个小的数, 有 T(?n)= T(?i?1)+ T(?n?i)+O(n). * 快速排序算法平均时间复杂度分析(续) 表示对n?1 中取n?i的所有 排列求和 * 快速排序算法平均时间复杂度分析(续) 又T0=0, 得 Tn=O(nlogn) * 桶排序算法 算法13.7 桶排序算法 输入[0,1)上的n个数 Bucketsort(A) 1. n←|A| 2. for i←1 to n do 3. 把A[i]插入表 4. for i←0 to n?1 do 5. 用插入排序算法对表B[i]进行排序 6. 依次连接表B[0], B[1],…, B[n?1] * 桶排序算法平均时间复杂度分析 前提:A[1],A[2],…,A[n]相互独立且都~U[0,1) T(A):对输入A的计算时间, mi :桶B[i]中数的个数, 0≤i≤n?1, m0+ m1+…+ mn?1=n, Tn:输入规模为n时的平均计算时间. T(A)=O(n)+ Tn=E[T(A)]=O(n)+ * 桶排序算法平均时间复杂度分析(续) * 散列法 设关键码的全域为U, 散列表T[0..m?1], 散列函数h:U→{0,1,…,m?1}, h(K)称作关键码K的散列值, 关键码K存放在T[h(K)]内 发生冲突: h(K1) = h(K2) (K1≠K2) 解决冲突的办法: 链接法 开地址法 * 链接法 Λ * 链接法(续) 算法13.8 链式散列表的检索和插入算法 Chained Hash(K,n) 1. i←h(K) 2. if T[i]=Λ then n←n+1, T[i]←n, 转8 //建一个新的链表 3 i←T[i] 4. if i=N+1 then 溢出, 结束 /表已满, 查找失败 5. if DATA[i]=K then 输出i, 结束 /查

文档评论(0)

沙卡娜 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档