P258 摊还分析概念
聚合分析,利用它,我们证明对于n,一个n个操作的序列最坏情况下的花费的总时间为T(n),因此,在最坏情况下,每个操作的平均代价(摊还代价)为T(n)/n
举了例子来形容这个概念 1)栈操作 PUSH(s,x) POP(s) MULTIPOP(s,k) 三个函数
2) k位二进制计数器递增
(算法导论书中说的比较晦涩,引申搜索得到的:摊还分析是用来评价程序中的一个操作序列的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均匀分摊后的平均代价。
摊还分析有三种常用的技术;聚合分析,核算法,势能法。)
(引申搜到的例子:表扩张
有个程序,假设这个表只允许插入,当插入数据发现表满了,会自动新建一个表大小为原来的两倍,然后把已有的数据复制过去,再插入,在问题就是要求这个程序的摊还代价。
解答思路:用核算法:假设现在表中有m/2条数据,表大小为m,而且没有信用,那么插一条数据要付出3的代价,为什么?看,1是为了插入时消耗了,1是保存起来作为自己的信用,还有1呢,就是捐赠跟原本就在表中但没有信用的数据,这样,但数据插入了m/2条,一共有m条数据时,这也刚好是表要扩张的时候,表中所有的数据都有1的信用,就可以用来支付扩展表时复制到新表的代价,从而表的大小变成2m,数据刚好又没了信用而且刚好是表大小的一半,这又到回了最初,就好像递归一样,也就是说1条数据支持3代价就可以保证它永远的扩展,摊还代价是3。)
(摊还分析:价格悖论通过经济学的一个案例分析,浅尝辄止地探讨了摊还分析方法论在多个领域可能的思维投影/应用,经济学上似乎有实际应用)
P261 核算法 accounting method
P262 17.3 势能法 势能=势 将势能释放即可用来支付未来操作的代价
P264 17.4动态表
研究这种动态扩张和收缩表的问题,将使用摊还分析证明,虽然插入和删除操作可能会引起扩张或收缩,从而有较高的实际代价,但它们的摊还代价都是O(1)。如何保证动态表中的空闲空间相对于总空间的比例永远不超过一个常量分数
P275 第五部分 高级数据结构 18章 B数(磁盘存储设计)19章可合并堆
20章 van Emde Boas数
21章 用于不相交集合的数据结构
P278 磁盘 平均读取时间8~11ms,有机械的部分 比硅存储高了5个数量级
硅存储常见存取时间50us
P280 B树的高度 B树上所需的磁片存取次数与B树的高度是成正比的
(并不是心里有b数的b数,而是一种多路平衡查找树)
B树包含n个关键字,高度为h,最小度数t
不允许最小度数t=1
(B树感觉上和数据库方面联系紧密,搜索时能搜到相关的)
P282中间关键字 median key
分裂为两个各含t-1个关键字的结点,中间关键字被提升到y的父节点
P283 以沿树单程下行方式向B树插入关键字
P286 从B树中删除关键字
P289 如何让B树操作高效执行,缓存无关算法
该算法可以不用显式地了解存储层次中数据传输规模的情况下高效工作
(引申搜索“显式与隐式”:显式算法基于动力学方程,因此无需迭代;而静态隐式算法基于虚功原理,一般需要迭代计算。使用显式方法,计算成本消耗与单元数量成正比,并且大致与最小单元的尺寸成反比,应用隐式方法,经验表明对于许多问题的计算成本大致与自由度数目的平方成正比,因此如果网格是相对均匀的,随着模型尺寸的增长,显式方法表明比隐式方法更加节省计算成本。
显式算法是建立在i时刻的运动平衡方程,不需要迭代,运算简单但是对步长要求很高,因为其影响精度和稳定性;而隐式算法是建立在i+1时刻的,因此需要迭代,过程复杂些,但是更加精确)
P290 斐波那契堆(一系列有最小堆序的有根树的集合) 可合并堆 可在常数摊还时间内完成
(斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合。它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间。堆的名字来源于斐波那契数,它常用于分析运行时间。检索时没有看到实际应用。)