1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
平摊分析

算法设计与分析 平摊分析 汪小林 北大计算机系 主要内容 • 平摊分析的三种方法 – 聚集分析 – 记账法 – 势能法 • 动态表及其上的平摊分析 平摊分析 • 在平摊分析中,执行一系列数据结构操作所需要 的时间是通过执行的所有操作求平均而得出的。 平摊分析可以用来证明在一系列操作中,通过对 所有操作求平均之后,即使其中单一的操作具有 较大的代价,平均代价还是很小的。 • 平摊分析不牵涉到概率, 平摊分析保证在最坏情况 下,每个操作具有的平均性能。 平摊分析——聚集分析 栈S上的三种操作 • PUSH(S,x) :将x压入S – 运行时间Ο(1) • POP(S) :弹出栈顶 – 运行时间Ο(1) • MULTIPOP(S,k) :弹出栈顶k个对象 MULTIPOP(S, k) 1 while not STACK-EMPTY(S) and k ≠ 0 2 do POP(S) 3 k → k - 1 – 运行时间Ο(min(k,s)) ,s为栈中对象个数 n个栈操作的平摊时间 • 设有n个栈操作(PUSH、POP 、MULTIPOP ) 的序列,作用于初始为空的栈S 。 • 总的运行时间的界是什么? – 每个操作都可能是MULTIPOP – 每个MULTIPOP 的运行时间是Ο(min(k, s))=Ο(n) 2 – 总的运行时间的上界为Ο(n ) – 这是一个紧的上界吗? n个栈操作的平摊时间 • 只有PUSH操作增加栈S 中的对象个数 • 所有POP和MULTIPOP 弹出的对象数不会弹出多 于PUSH入栈的对象数 • 故总的运行时间为Ο(n) – 所有PUSH入栈的对象数为Ο(n) – 所有POP和MULTIPOP 弹出的对象数也为Ο(n) • 每个PUSH 、POP和MULTIPOP 操作的平摊时间 – Ο(n)/n = Ο(1) • 聚集法:通过总运行时间求平均得到平摊时间, 不需要对操作序列的概率分布做假设。 二进制计数器 • 计数器A [0 ‥k -1] 表示为k位二进制位的数组 k 1  i x i 0 A i 2 • 操作INCREMENT实现计数器加一 – 运行时间Ο(k) INCREMENT(A) – n个INCREMENT操作 1 i ← 0 序列的运行时间 2 while i length [A ] and A [i] = 1 Ο(nk) (紧吗?) 3 do A [i] ← 0 4 i ← i + 1 5 if i length [A ] 6 then A [i] ← 1 INCREMENT操作的平摊时间 • n个INCREMENT操作序列 的运行时间应为:Ο(n) • 观察INCREMENT 操作序列 – 每次操作,A [0]都反转; – 每两次操作,A [1]反转; i – 每2 次操作,A [i]反转; • 于是,总反转次数为 log n  n  1    

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档