标签:code fir 说明 时间 -o info height pop 设计
平摊分析在使用时灵活性和技巧性较强,下面通过几个例子来说明具体使用
【队列的栈实现】
使用如图的两个栈实现:
push:S2.push ---O(1)
pop:若S1不空,S1.pop ; ---O(1)
若S1空,将S2拷贝到S1后pop; ---O(| S2 | + 1)
设计势函数:| S2 |
(1)第 i 次操作为push:
平摊代价 = 2
(2)第 i 次操作为pop,且S1不空
平摊代价 = 1
(3)第 i 次操作为pop,且S1为空
实际代价:|S2| + 1
势差:- |S2|
平摊代价=1
总代价:O(2n)
【双端队列】
若设计成之前一样完全拷贝的方式,如果不断重复执行popfirst操作将不断拷贝,时间代价很高,不妨设计成不完全拷贝的方式
pushfirst:S1.push
pushlast:S2.push
popfirst:若S1不空:S1.pop
若S1为空:复制S2的一半到S1中再pop --O(|S2| + 1)
poplast:若S2不空:S2.pop
若S2为空:复制S1的一半到S2中再pop --O(|S1| + 1)
设计势函数:| |S2| - |S1| |
(1)第 i 次操作未进行拷贝
平摊代价:O(2)
(2)第 i 次操作进行了拷贝
实际代价:O(|Si | + 1)
势差:-|Si|
平摊代价:O(1)
总时间代价O(2n)
标签:code fir 说明 时间 -o info height pop 设计
原文地址:https://www.cnblogs.com/duanshuai/p/13173227.html