平摊分析 Amortized Analysis ------geeksforgeeks翻译
当偶尔一切操作很花的时间很慢,而大多数操作的时间都很快的时候,平摊分析的方法就很很好用了。在平摊分析中,我们分析一串操作并且可以得到最坏情况下的平均时间复杂度。例如hash table, disjoint set 和splay tree都是用平摊分析算法的。
举一个简单的hash table的插入算法,我们怎么来定义hash table的大小呢?这是一个时间和空间的权衡(trade-off)。如果让hash table空间大的话,那搜索的时间会变慢,如果空间小,不一定能存的下数据。
解决这种权衡的方法是利用动态表or数组(dynamic table)。主要思想是当表已经满的时候增加哈希表的大小,步骤是:
1.给哈希表增加内存,一般是原来大小的两倍。
2.把原来的表的数据复制到新表中。
3.释放旧表的内存。
(有点类似java中 string 拼接的感觉)

这种哈希表的插入算法的时间复杂度是多少呢?
如果我们简单的分析,插入一个元素的最坏复杂度是O(n),(解释一下,因为这时哈希表可能满,需要复制n个元素到新的大表中,所以最坏的情况是O(n) ) 所以插入n个数的时间复杂度是n*O(n) = O(n2)。 这种分给除了上界限,但不是一个最紧的上界限,因为n个元素插入,不一定没一个都需要O(n)的时间。

所以用平摊分析发,我们可以证明用动态表的话,插入一个元素的时间复杂度是O(1)。动态大小的这种方法也用于C++ 的vector 和 Java的ArrayList。
下面是一些重要的信息:
1.平摊分析可以看做一个人是如何消费的,一个人平均每个月的花销是小于或者等于他的月薪。但是它可以在这个月花更多的钱,而在其他的月份存一些钱。
2.用动态数组的平摊分析有个名字叫做aggregate method (总体成本法),有两个厉害的方法去平摊分析:accounting method , potential method
3.平摊分析法和概率没啥关系,还有一些别的概念去分析一些用随机算法来减少算法的时间复杂度。这种方法叫做随机算法 Randomized Analysis。例如 随机化的快速排序(quick sort),快速选择(quick select,或者散列函数(hashing)。我们会在之后会的文章中提到这些内容
平摊分析 Amortized Analysis ------geeksforgeeks翻译的更多相关文章
- 算法课笔记系列(七)—— 平摊分析Amortized Analysis
本周的内容是Amortized Analysis,是对算法复杂度的另一种分析.它的基本概念是,给定一连串操作,大部分的操作是非常廉价的,有极少的操作可能非常昂贵,因此一个标准的最坏分析可能过于消极了. ...
- 算法分析方法之平摊分析(Amotized Analysis)
- Learning Spark: Lightning-Fast Big Data Analysis 中文翻译
Learning Spark: Lightning-Fast Big Data Analysis 中文翻译行为纯属个人对于Spark的兴趣,仅供学习. 如果我的翻译行为侵犯您的版权,请您告知,我将停止 ...
- 数据关联分析 association analysis (Aprior算法,python代码)
1基本概念 购物篮事务(market basket transaction),如下表,表中每一行对应一个事务,包含唯一标识TID,和购买的商品集合.本文介绍一种成为关联分析(association a ...
- 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串
老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...
- x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- x264源代码简单分析:宏块分析(Analysis)部分-帧内宏块(Intra)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- 生存分析(survival analysis)
一.生存分析(survival analysis)的定义 生存分析:对一个或多个非负随机变量进行统计推断,研究生存现象和响应时间数据及其统计规律的一门学科. 生存分析:既考虑结果又考虑生存时间的一种统 ...
- amortized analysis
w https://en.wikipedia.org/wiki/Amortized_analysis In computer science, amortized analysis is a meth ...
随机推荐
- Linux命令详解之–cd命令
cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...
- python 学习之电脑的发展历史
电脑的发展历史 电脑的学名叫计算机,电脑是用来做计算的.在古时候,人们最早使用的计算工具可能是手指,英文单词“digit”既有“数字”的意思,又有“手指“的意思.古人用石头打猎,所以还有可能是石头来辅 ...
- 中国快递包裹总量的预测-基于SARIMA模型
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- task mysqld:26208 blocked for more than 120 seconds
早上10点左右,某台线上ECS服务器突然没响应. 查看日志,发现如下信息: Aug 14 03:26:01 localhost rsyslogd: [origin software="rsy ...
- php对mysql数据库简单连接操作
前些阵子忙完了公司前端静态页面的事情了之后,简单学习了下php的基础知识,今天想了想回顾一下php连接数据库的方式,写一下随笔存一下看看 php连接数据库端口和新建数据库 <?php $serv ...
- bootstrap第一天,响应式布局,栅格系统运用
<!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...
- SQL Server 分组 去除从复列
下面先来看看例子: table表 字段1 字段2 id name 1 a 2 b 3 c 4 c 5 ...
- Android—Ormlite框架简单的操作数据库
大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...
- IOS 杂笔-13(appearance的巧妙使用)
在我们查看原生api时,我们不难发现,有些api的后面有着->UI_APPEARANCE_SELECTOR 那么我可以很高兴的说我们可以通过appearance对象来统一设置.十分巧妙. 例如: ...
- DP大作战——多重背包
题目描述 在之前的上机中,零崎已经出过了01背包和完全背包,也介绍了使用-1初始化容量限定背包必须装满这种小技巧,接下来的背包问题相对有些难度,可以说是01背包和完全背包的进阶问题. 多重背包:物品可 ...