You are on page 1of 4

算法设计与分析第七章作业

姓名 班级 学号

第1题

第2题

第3题

第4题

第5题

总分

作业提交截止时间:2020-06-7 日 24:00,超过提交截至时间的作业视为无效。确因网络等特
殊原因无法及时提交作业的学生,应至少提前 1 小时与助教(汪诗悦,13713551993)联系
备注 沟通。作业提交邮箱:hitcsalgo2020@163.com。作业文件名命名方式: 第 x 章-x 班-姓名-
学号(例, 第 1 章-1 班-张三-2018054000.doc)
; 邮件主题为:第 x 章作业, x 班,姓名,
学号(例, 第 1 章作业,1 班,张三,2018054000) 。缺少这些信息的作业将被酌情扣分。

1、
假设我们对一个数据结构执行 n 次操作,如果 i 是 2 的乘方则第 i 个操作的开销为 i,
否则为 1。 使用聚集分析法分析操作的平摊代价。
(考察聚集分析法)
2、
使用会计法重做第 1 题。
(考察会计法)

3、
Bill 提出了一种称为翻转栈的数据结构,该结构仅支持 Flip_push()操作。 每次执行
Flip_push()时,首先入栈,然后检查栈中的对象数是否为 2 的幂。 如果是,则将翻转栈中
的所有对象。 例如,我们使用 Flip_push()将对象 1、2、3 和 4 压入栈。堆栈的内容变化
(从下至上)如下: (1)⇒(2,1)⇒(2,1,3)⇒(4,3,1,2) 。你需要使用势能法来
分析 Flipping_push()函数的摊销成本。 堆栈反转的成本等于堆栈中现有对象的数量。
(考察势能分析法)
Define a potention function Φ ; S.num is the number of objects in the stack , S.size is the size
of stack.
Φ(S)=2*S.num-S.size .
Let numi is the number of objects in the stack after the ith operation. Let sizei is the size of
stack after the ith operation.
If i is not the power of 2:
c^i=ci+Φi-Φi-1=1+(2* numi-sizei)-(2* numi-1-sizei-1)=1+(2* numi-sizei)- (2* (numi-1)- sizei)=3
If i is the power of 2:
c^i=ci+Φi-Φi-1=
numi+(2* numi-sizei)-(2* numi-1-sizei-1)= numi+(2* numi-2*(numi-1))- (2* (numi-1)- (numi-1))=3
The amortized cost of Flipping_push() is 3.

4、
假设我们有一个势函数Φ,对于所有 i,Φ(Di)≥Φ(D0),但 Φ(D0)≠0。 写出一个势
能函数Φ′,使得对于所有 i≥1,Φ′(D0)=0,Φ′(Di)≥0,而且使用Φ′的摊销成本与使用Φ的
平摊成本相同。
(考察势能分析法,提示:考虑用 Φ 函数来构造Φ′函数)

5、
如何使用两个普通堆栈实现队列,使得每个 ENQUEUE 操作和每个 DEQUEUE 操作的平摊
代价均为 O(1)。写出你的实现方案,证明平摊代价为 O(1)。
(使用两个普通堆栈实现队列是一个比较经典的问题,实在想不出可以查资料。你可以用聚
集法、会计法和势能法来证明平摊代价)

You might also like