• 【算法简介】平摊分析


    【算法简介】平摊分析

    1. 简述

    平摊分析是指在某种数据结构上完成一系列操作,在最坏情况下所需的平均时间

    平摊分析与传统分析方法的主要差别为:

    1)平摊分析时间与传统分析方法的平均情况下时间不同,它是最坏情况下的平均时间。

    2)平摊分析不涉及概率分析。

    3)平摊分析中时间函数T(n),其中n指的是操作的次数,而不是输入的规模。

    常见的有三种方法:聚集法、记账法、势能法。

    2. 合计法(聚集法)

    2.1 合计法的思想:把n个不同或相同的操作合在一起加以分析计算得到总时间的方法。即n个操作序列在最坏情况下的总时间,记为T(n),其中n为操作数。由此得到在最坏情况下每个操作的平均时间为T(n)/n。

    2.2 例子说明:栈操作的平摊分析(不同类操作)

    操作 代价
    PUSH 1
    POP 1
    MULTIPOP min(k,s)

    解法一,传统方法分析:

    由于三个操作最坏的操作为multipop操作,而一次multipop操作在最坏情况下的时间为O(n),如果n个操作均为multipop操作,则总时间将达到O(n^2)。

    在最坏情况下n个操作的总时间T(n)= O(n^2),每个操作的平摊时间为:T(n)/n=O(n)。

    解法二,合计法分析:

    由于三个操作不是相互独立的,一个对象入栈后最多弹出一次,因而在非空栈S上完成的pop次数(包括multipop操作)最多为push的次数,又由于初始栈S为空,且n个操作中push的次数≤n,pop次数≤n,由于每个push和pop操作的实际代价为O(1),所以n次操作在最坏情况下的总时间≤2n=O(n),每个操作的平摊时间为T(n)/n=O(1)。

    2 记账法

    记帐法思想:先对每个不同的操作核定一个不同的费用(时间),然后计算n次操作总的费用。当然,由于这个费用是人为赋予的,所以很容易得到一个松上界。

    这种事先的操作费用核定可能与实际费用不符,存在二种情况:

    1)超额收费:核定费用>实际费用,此时差额存放在该对象的身上。

    2)收费不足:核定费用<实际费用,此时差额由该对象身上的存款支付。

    费用的核定(平摊核定)是否正确需检查n次操作核定总费用是否大于n次操作实际总费用(这里n具有任意性,并不是单指一个定值n)。因此,在记账方法中,某些操作的费用比它们实际代价或多或少。但push、pop、multipop操作的平摊时间为O(1)。

    3 势能法

    思想:通过定义一个势函数完成对每个操作的平摊核定。

    势是与整个数据结构联系而不是其中的个别对象发生联系的。且push、pop、multipop操作的平摊时间为O(1)。

  • 相关阅读:
    python网络爬虫与信息提取——5.信息组织与提取方法
    python网络爬虫与信息提取——4.Beautiful Soup库入门
    python网络爬虫与信息提取——3.requests爬虫实战
    python网络爬虫与信息提取——2.网络爬虫排除标准robots
    python网络爬虫与信息提取——1.requests库入门
    时间戳转日期
    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目
    数组、对象等的按值传递与数字、字符串不同
    用flex做垂直居中
    手机端页面自适应解决方案-rem布局
  • 原文地址:https://www.cnblogs.com/lwp-nicol/p/14001159.html
Copyright © 2020-2023  润新知