美文网首页
算法导论摊还分析笔记

算法导论摊还分析笔记

作者: 琦思妙想君 | 来源:发表于2018-10-11 00:37 被阅读44次

摊还分析在分析什么?
分析一种数据结构上所有操作的平均性能,之前的性能分析,例如红黑树,我们分析的是每种单独的操作性能如何,如红黑树的查找、插入和删除分别性能如何。摊还分析则是分析查找、插入和删除操作的平均性能。
其现实意义是摊还分析的结果更能表现出一种数据结构在实际使用中的性能。

聚合分析

聚合分析的方法是,分析一种数据结构上 n 个操作(任意操作)的最坏时间消耗 T(n),然后摊还代价即为 T(n)/n

举了两个例子,扩展的栈操作、二进制计数器递增,用聚合分析的方法得出的结果更为紧确。

核算法

核算法是对不同的操作赋予不同的摊还代价,这个代价可能与其实际操作代价不同,但是通过整体的调整,会使得对一系列操作的整体摊还代价的分析变得简单。

例如,将入栈操作赋予 2 的摊还代价,那么其实际代价是 1,每个入栈存储了 1 的信用,当该元素出栈时即可用其关联的信用覆盖实际代价,所以各种出栈(POP,MULTIPOP)操作的摊还代价都可以设置为 0,方便分析。

势能法

势能法选择一个合适的势能函数,势能函数的值即是当前的总信用(类比核算法)。

个人认为势能法的好处是,通过公式 17.2 可以更有条理的定义各个操作的摊还代价。算法的难度集中在了如何选择一个合适的势能函数。

动态表

动态表是一个被填满或删减后,会扩张或收缩空间的数据结构。

简单的说动态表只有插入和删除两个操作,但每次插入操作的性能可能会差距很大,原因是在扩张临界的插入会引发表的复制(收缩临界的删除操作同理)

那么问题来了,在动态表的一系列插入删除操作中,操作的平均性能如何?

摊还分析的意义在于可以证明动态表的 n 个操作实际运行时间为 O(n),即平均运行时间为 O(1)

书中用 3 中方法分析了只有插入操作的动态表的性能,用势能法分析了同时有插入和删除操作的动态表的性能

PS:iOS 中的可变数组就是一个典型的动态表,不过有文章分析它只实现了表的扩张,不进行收缩,完全符合上述第一部分的分析

相关文章

  • 算法导论摊还分析笔记

    摊还分析在分析什么?分析一种数据结构上所有操作的平均性能,之前的性能分析,例如红黑树,我们分析的是每种单独的操作性...

  • 『算法』摊还分析

    聚合分析(aggregate analysis) 一个 n 个操作的序列最坏情况下花费的总时间为, 则在最坏情况下...

  • 数据结构与算法参考书籍

    数据结构与算法分析 算法 算法导论 java编程思想

  • 《算法》——分析,数据结构,算法

    1 算法分析 1.1 摊还分析 摊还分析是用来评价程序中的一个操作序列的平均代价,有时可能某个操作的代价特别高,但...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 算法导论学习笔记(1)

    《算法导论》一共包含两部分,即算法分析和算法设计。 什么是算法分析? “算法分析是关于计算机程序性能和资源利用的理...

  • 长期计划安排

    一、数据结构与算法分析 参考书 数据结构与算法分析:C语言描述 算法(第四版) 算法导论 课程相关 MOOC 邓俊...

  • 算法设计与分析导论

    《算法设计与分析导论》本书在介绍算法时,重点介绍用干设计算法的策略.非常与众不同。书中介绍了剪枝搜索、分摊分析、算...

  • 算法导论笔记

    1.1 简单介绍何为算法,它能解决什么样的问题,介绍NP完全问题。 1.2 比较算法复杂度 2.1 Insert ...

  • 算法导论笔记

    贪心算法 贪心算法:每一步在当时看起来是最佳的选择,总是做出局部最优的选择 贪心算法并不保证得到最优解,但对于很多...

网友评论

      本文标题:算法导论摊还分析笔记

      本文链接:https://www.haomeiwen.com/subject/mxdvaftx.html