算法导论第十四章思考题参考答案(27)

 Problem 14-1

 

a.假设我们有一个最大重叠点p,然后,只要我们想象移动点p但不经过任何区间的任何端点,那么我们不会改变包含p的区间的数量,所以,我们只是向右移动,直到我们到达某个区间的端点,然后,我们有一个最大重叠点,也就是区间的端点。
b.我们将给出一个简单的解决方案来解决这个问题,它的运行时间为O(nlg (n)),它不会增加红黑树,尽管这是提示所建议的。考虑一个元素列表,每个元素都有一个整数x.pos和一个字段,该字段表示它是左端点还是右端点。x.dir = L或R。然后,根据每个元素的pos属性对该列表排序。然后,在列表中运行当前所处间隔的总数,为每个右端点减去一个,为每个左端点添加一个。还要跟踪这些值的运行最大值,以及具有该值的端点。那么,这个达到运行最大值的点就是应该返回的。

 

  Problem 14-2

a.创建一个循环双链表。继续在列表中前进m个位置(不包括哨兵),然后打印并删除当前节点,直到列表为空。因为m是一个常数,我们最多前进了mn个位置,所以运行时间是O(n)。
b.首先为给定的元素创建一个顺序统计树,其中秩从0开始到n - 1结束,节点的秩是其在原始顺序中的位置减去1,并且我们将每个元素的值存储在属性x.value中。打印秩为m(n)−1的元素,然后将其从树中删除。然后按如下步骤进行:如果你刚刚打印了第k个值,其秩为r,则从树中删除该节点,那么要打印的第(k+ 1)值的秩为r−1 + m(n) mod (n−k)。由于删除和查找需要O(lg n),且有n个节点,因此运行时间为O(n lg n)。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值