当前课程知识点:数据结构(上) > 第二章 向量(上) > (b)可扩充向量 > 02B-5 分摊复杂度
刚才所做的分析过程中
我们无意中
已经引入了一个概念
叫作分摊复杂度
相应的方法也称作叫
分摊分析法
那么这种概念
和我们一般说的平均复杂度
以及平均分析法
实际上是有本质的区别的
在此我们不妨对它们二者
做一个简要的对比
我们先来看
所谓的平均复杂度
或者叫作期望复杂度
那么这种复杂度
要首先对特定的数据结构
所提供的各种操作
做一个概率上的假设
比如说
某种操作出现的概率是多少
另一种操作出现的概率是多少
诸如此类地
然后呢 再对照各种操作
各自的计算成本
做总体的加权平均
这种方法的好处是确实
可以对一个数据结构
更一般的一个性能
做出一个考量
但是我们说
它也有它的缺点
具体来说 就是
在一个数据结构生命期内
所能够执行的各种操作
在这里是作为孤立的事件
来分别考察的
所以在某种时候
在某些场合 它会体现为
将这些操作之间
本来具有的某些相关性
和连贯性割裂开来
所以在这些场合
我们不能够通过平均复杂度
来准确地评判和度量
一个DSA的真实性能
分摊分析呢 在这方面
相对要更好一点
在后面 我们会看到更多的实例
这种分摊分析的思路是
要连续地考察
对一个数据结构
能够实施的足够多次操作
大家注意 这些操作
既是数据结构允许的
而且它们作为一个整体的
生命周期内的操作序列
是必须能够出现的
然后在这样的一个序列的
总体范围之内
再对其中所涉及的各种操作
各自的时间成本进行总和
并且反过来分摊到
各自操作上的
因此相对于此前的
平均复杂度而言
它可以更好地
从实际可行的角度
对数据结构真实的
生命期内所能够支持的操作
做一个整体的考量
更加忠实地刻画
所能够出现的操作序列
以我们刚才这种扩容的算法为例
如果我们只是孤立地看待其中的
每一次扩容操作
那么我们会发现
无论是对于递增式的
还是加倍式的扩容策略
它们的最坏情况
都是单次的O(n)
而这并不足以反映二者的
性能总体的差异
唯有将整个过程中
所实施的所有的扩容操作
作为一个连续的整体
来进行总和和分摊考量
我们才能够像刚才所看到的那样
更加准确地反映出
两种策略的真实性能的差异
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验