- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
前(che)言(dan) 一天正水着 有一位少年提问: 我抱着“QAQ 同求!”的心态等了很久……还是木有人回答 前(che)言(dan) 当今世界 Spaly横行 随机提根的单旋党猖獗 相信很多同学当初学习Splay的过程是这样的: 看了会做法…… w 这很简单嘛! 复杂度咋证?一看——“留给读者自行证明”、“可以证明是O(log n)”、“Tarjan证明了是……” 算了不管辣! 不止是Splay,更为基础的并查集,复杂度也不知道咋证明。 前(che)言(dan) 不会复杂度分析,还是可以闷声做大题。 可是…… 作为一名OIER…… 应该反对迷信,崇尚科学。 →_→ 进入正题——均摊分析。 均摊分析 引用黑书上的一个例子进行说明: 均摊分析 “初始值为0的一个k位二进制计数器,只支持加一操作。” 每次确实是O(k)的,但均摊分析可以得到更好的上界。 累计分析 考虑n个操作的总时间T(n) 考虑第i位,每2^i次操作变一次,所以T(n)=n+n/2+n/4+...=O(n),T(n)/n=O(1) 会计分析 把时间消耗看做金钱的消耗 把一个0变成1时投资2元,其中1元当时就用掉,另1元在1变成0的时候用掉 每次操作投资2元,n次操作投资O(n),所以均摊时间复杂度O(1) 均摊分析 下面介绍一种更加通用的方法——势能分析。 把“势能”看做整个数据结构的一个状态函数 定义 Φ[i] 表示 i 次操作后整个结构的势能 定义第 i 次操作的均摊时间花费 a[i]=c[i]+Φ[i]-Φ[i-1](其中 c[i] 表示第 i 次操作的实际消耗时间) 如果我们能设计出恰到好处的势函数,得到 Σa 和 Φ[0]-Φ[n] 上界就得到了T(n)的上界。 均摊分析 以“二进制计数器”为例,我们尝试一下势能分析。 定义势能 Φ=(二进制串中1的个数)。 设第 i 个操作有x个0-1、y个1-0,则此操作均摊复杂度 a[i]=c[i]+ΔΦ=(x+y)+(x-y)=2x=2 。 T(n) = Σa+Φ[0]-Φ[n] ≤ Σa ≤ 2n 所以是O(n) 我们发现,势能分析的关键是设计势函数。 在一个很快的操作时稍微增加一点 在一个耗时的操作时急剧减少 把势函数想象成一种“存储”,在不怎么耗时的时候存下,在非常耗时的时候取出来。 类似于钱,只要“自己掏的钱”和“挪用的存款”不超过某个界,那么花的钱一定不超过那个界。 Splay 先来回顾一下 Splay rotate操作 如果父亲是根,单旋一次 如果父亲和爷爷方向一致,先转父亲后转自己 如果父亲和爷爷方向不同,转两次自己 定义 v 的势能 R(v)=log(size[v]),势函数 Φ=ΣR(v) 。 显然任意时刻 0≤Φ≤n log n,这意味着 Φ[0]-Φ[n] = O(n log n) 。 两个不怎么重要的发现 一棵很平衡的树,不怎么耗时,势函数值较小。 一棵很畸形的树(比如一条链),容易耗时,势函数值较大。 我们来看看,在这种势函数下,三种操作的均摊复杂度分别是什么。 Splay - Zig Splay - ZigZig Splay - ZigZag Splay 综上所述,我们得到了三种情况下的均摊复杂度: 如果父亲是根,单旋一次 ≤ 1+ R(x)-R(x) 如果父亲和爷爷方向一致,先转父亲后转自己 ≤ 3(R(x)-R(x)) 如果父亲和爷爷方向不同,转两次自己 ≤ 2(R(x)-R(x)) 由于每次旋转后 x 的结束位置是下一次旋转开始时 x 的位置 我们把三种全放缩成 ≤ 3(R(x)-R(x)) 那么执行 Splay(v) 的均摊复杂度 a = 1 + 3(R(root)-R(v)) = O(log(n/size[v])) 至此,我们得到了 n 个点、m 次 Splay 操作的时间复杂度为:O(n log n + m log n) LCT 分析完 Splay,再看看 LCT。LCT 可以看作一群 Splay 拼起来的结构。 LCT 的主要操作是 access(v),因此我们来分析 access 的时间复杂度。 《1》虚实边的切换 《2》Splay 中的复杂度 LCT 《1》虚实边的切换 若v是u的儿子且满足size[v]size[u]/2,称v是u的大儿子,否则为小儿子。对应的父边称大(小)边。 定义整个结构的势能 p=(大虚边的个数),一次操作的均摊复杂度 a=c+Δp。 当经过一条小边时,c+=1;p可能+=1; # 考虑size的变化,可知路过的小边条数是O(log n)的 当经过一条大边时
您可能关注的文档
最近下载
- 闽教版小学四年级下册英语期中试卷附答案.docx VIP
- 心电图基本常识共107张PPT.pptx VIP
- 《工程热力学》全册教学课件(共14章完整版).pptx
- 汽车租赁服务组织实施方案.docx VIP
- 电工作业考试(防爆电气)习题库(第2部分).pdf
- 苏教版五年级数学上册(全册)教案.pdf VIP
- 《有机化学》中国农业出版社 课后习题答案 .pdf
- Unit5 Whose dog is it Part B Let's learn (教案)-2021-2022学年英语五年级下册.docx
- 【开题报告】中小学跨学科综合教学实践研究 .docx
- 2016全国统一市政工程预算定额编制说明.doc VIP
文档评论(0)