证明:如果作用于一动态表上的第i个操作是TABLE-DELETE,且αi-1 ≥ 1/2,则以势函数(17.6)表示的每个操作的平摊代价由一个常数从上方限界
来源:互联网 发布:淘宝几十块钱的vr质量 编辑:程序博客网 时间:2024/06/07 05:08
这是《算法导论》(原书第二版)中第17章的一个习题(17.4-2)。
分成三种情况讨论:
1)αi≥ 1/2
这时表并没有进行扩张或收缩,只是表中的项数少了1
平摊代价
^Ci
=
ci+Φi-Φi-1
=
1 + (2 · numi - sizei) - (2 · numi-1 - sizei-1)
= 1-2 =-1
2) 1/4<=αi < 1/2
这时表并没有进行扩张或收缩,除了表中的项数少了1,
^Ci =
ci+Φi-Φi-1
=
1 + (sizei /2 - numi) - (2 · numi-1 - sizei-1)
=3+3/2 sizei-1 -3 numi-1
=3+3(1/2 -αi-1) sizei-1<=3
3) αi<1/4
这种情况只对sizei-1等于2时,numi-1等于1时才会发生。
这时,需要对表进行两次收缩才能满足1/4<=αi <=1,这样表变成一个空表,尺寸和项数都是0。
平摊代价:
^Ci =1
因此,平摊代价至多为3
- 证明:如果作用于一动态表上的第i个操作是TABLE-DELETE,且αi-1 ≥ 1/2,则以势函数(17.6)表示的每个操作的平摊代价由一个常数从上方限界
- 证明:如果从一个随机的磁道i移动到另外一个随机的磁道j,平均移动距离是扫描整个磁盘的1/3
- 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1<=i,j<=n,且i<=j)在B中的位置为()
- CF223 div2 (C)给出m个操作,1表示在串中添加一个数,2表示将前面长度为l的串复制c次添加到串尾。有n个查询,问你第i个数是什么
- 已知一支白菜连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该白菜第i天的
- 计算第K个能表示(2^i * 3^j * 5^k)的正整数(i,j,k为整数)?其前7个满足此条件的数分别是1,2,3,4,5,6,8
- 在无头结点的动态单链表上实现线性表操作Delete(L,i)
- 沿着循环路线有N个加油站,其中i站的天然气量是[i]。你有一辆带有无限气罐的汽车,并且它的费用是从i站到我的下一站(i + 1).如果您可以绕电路行驶一次,则返回起始站索引
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天
- 对一个正整数作如下操作:如果是偶数则除以2,如果是奇数则加1,如此进行直到1时操作停止,求经过9次操作变为1的数有多少个?
- 对一个正整数作如下操作:如果是偶数则除以2,如果是奇数则加1,如此进行直到1时操作停止,求经过9次操作变为1的数有多少个?
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 冲突解决策略是定义一个序列F(i)=ri,其中r0=0且r1,r2……rN是前N个整数的随机排列(每个整数恰好出现一次)
- Java i++是原子操作的假象
- 不带缓存操作的I/O操作(1)
- 有10个学生,每个学生的数据包括学号、姓名和1门课成绩,编写如下函数: (1)根据学生的信息建立链表; (2)输出链表; (3)输入一个学生的学号,查找链表中是否有该学生; (4)在第i
- JAVA的I/O操作(一)
- 由unix文件I/O引出的原子操作
- ajax学习笔记(2)
- 使用libpng,libjpeg从文件读取和从内存读取2中方式的实现
- 实机调试无法输出LogCat的解决办法
- 反复平方法(很经典的算法)
- mysq密码修改 处理中文乱码
- 证明:如果作用于一动态表上的第i个操作是TABLE-DELETE,且αi-1 ≥ 1/2,则以势函数(17.6)表示的每个操作的平摊代价由一个常数从上方限界
- WebClient does not support concurrent I/O operations 错误的解决办法
- 深度搜索与追girl
- Linq 好去处!
- windows 2003 服务器建站基础
- Ubuntu探秘之二:软件包管理系统
- SQL 流水号 字符串主键
- WP7 LinqToXml调用静态xml文件
- timer 定时器