zoukankan      html  css  js  c++  java
  • 算法导论笔记——第十七章 摊还分析

    17.1 聚合分析

    用来确定一个n个操作的序列的总代价的上界T(n).

    • 由n个push,pop,multi-pop组成的操作序列。依赖于push
    • 二进制计数器递增

        A[0]每次都翻转,A[1]每两次翻转一次,A[2]每两次翻转一次...

    17.2 核算法

      较早操作的余额(overcharge)作为预付信用(prepaid credit)储存起来,与数据结构中的特定对象相关联。对应后续操作中摊还代价小于实际代价的情况,信用可以用来支付差额。

    17.3 势能法

    势能法摊还分析并不将预付代价表示为数据结构中特定对象的信用,而是表示为“势能”,或简称“势”,将势能释放即可用来支付未来操作的代价。我们将势能与整个数据结构而不是特定对象相关联。

    工作方式如下:

    我们将对一个初始数据结构D0执行n个操作。对每个i=1,2,。。。,n,令ci为第i个操作的实际代价,令Di为在数据结构Di-1上执行第i个操作得到的的结果数据结构。势函数Φ将每个数据结构Di映射到一个实数Φ(Di),此值即为关联到数据结构Di的势。第i个操作的摊还代价c‘i用势函数Φ定义为

    c‘i=ci+Φ(Di)-Φ(Di-1

    总摊还代价为

        

    栈操作:可定义栈的势为栈中的对象数量。

    二进制计数器:可定义计数器的势为其中1的位数。

    17.4 动态表

    17.4.1 表扩张

    17.4.2 表扩张和收缩

    总之,由于每个操作的摊还代价的上界是一个常数,在一个动态表上执行任意n个操作的实际运行时间是O(n)。

  • 相关阅读:
    Linux 4.11 内核变化
    c++设计模式
    【MySQL】undo,redo,2PC,恢复思维导图
    10053
    深入理解MySQL中的Redo、Undo、MVCC
    oracle 博客精选
    Linux内存中的Cache真的能被回收么?
    MySQL性能指标及计算方法 等待show processlist
    HTTP抓包工具Fiddler
    科来网络分析
  • 原文地址:https://www.cnblogs.com/justinh/p/6595920.html
Copyright © 2011-2022 走看看