zoukankan      html  css  js  c++  java
  • 平摊分析的应用

    平摊分析在使用时灵活性和技巧性较强,下面通过几个例子来说明具体使用

    【队列的栈实现】

    • 问题定义:使用栈实现队列:入队和出队的操作,并分析他的时间代价
    • 队列的栈实现方法:

    使用如图的两个栈实现:

    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)

     

  • 相关阅读:
    CSS3——过渡
    CSS——优雅降级和渐进增强
    jq1 颜色填充器 和清空指定颜色
    1. 初识node
    javaSE- 01
    鼠标悬浮图片时弹出透明提示图层的jQuery特效
    通过jQuery制作电子时钟表的代码
    9种网页Flash焦点图和jQuery焦点图幻灯片
    7种网页图片切换方式代码
    21种网页在线客服代码实例演示
  • 原文地址:https://www.cnblogs.com/duanshuai/p/13173227.html
Copyright © 2011-2022 走看看