4-1 序列旋转
下面是一个序列AVL树T。执行操作T.delete_at(8),该操作期间,每次旋转操作执行完后,画出该树。
4-2 Fick Nury
Fick Nury领导n名超级英雄组成了精英团队——复仇者联盟。他听说:超人Sanos正在一个遥远星球上制造麻烦,需要他决定是否与她对抗。Fick对复仇者们进行调研,并编写了一个调查结果表,每个调查结果是一个元组,对应复仇者的名字以及对于该话题的观点。观点+s意味着他们对于对抗Sanos的力度为s,然而观点-s意味着他们反对对抗Sanos的力度为s。Fick想生成一个列表,包含log个复仇者的名字(他们有着最有力的观点),因此他可以和他们见面讨论。假设这些包含调查的记录是只读访问控制的,因此任何计算必须写到另外的内存。
(a) 描述一个 O ( n ) \mathcal{O}(n) O(n)时间的算法来生成Fick的列表
解:构建一个最大优先队列,包含所有的复仇者(带着他们的名字)。优先队列至多存储n个复仇者,因此应该花费不大于 O ( n ) \mathcal{O}(n) O(n)的空间。每个复仇者 r i r_i ri带着观点 s i s_i si,形成 ( ∣ S i ∣ , i ) (|S_i|,i) (∣Si∣,i),保证key唯一性。
4-3 SCLR
Stormen, Ceiserson, Livest, and Rein四个学者,写了一本有关计算机科学书方面非常受欢迎的书,众所周知:SCLR。他们在办公室中找到了前k版本,想把他们线下拍卖用于慈善。拍卖会中的每个投标都有一个唯一整数:投标id,可以对单个复制品竞标某个正整数金额(在整个拍卖会期间,可能增加或减少)。描述一个数据库,支持下面操作,假设n是执行该操作时,数据库中竞标者的数量。对于每个操作,标注你的运行时间是:最坏/期望/摊还。
new_bid(d, b),对竞标b记录一个新的竞标者ID:d, O ( log n ) \mathcal{O}(\log n) O(logn)