算法导论 16.1 Exercises 答案 发表于 2023-02-14 更新于 2023-07-03 分类于 算法导论 阅读次数: 120 本文字数: 708 阅读时长 ≈ 1 分钟 16.1-1 相比于 MULTIPOP 操作,MULTIPUSH 操作总是需要遍历完 k 个元素进行插入,它不能像 MULTIPOP 那样及时终止循环。总共插入的元素个数在 n 个操作以内可以达到 ω(n) 的数量(如果 k=ω(n)),因此摊分下来的花费不能达到 O(1)。 16.1-2 在最坏情况下,如果计数器的低 k−1 个比特全 0,最高位比特为 1,并且 k 个操作按照 DECREMENT, INCREMENT, DECREMENT, ... 的操作交替执行,那么每一次操作都会使得全部比特翻转,此时总运行时间恰好为 Θ(nk)。 16.1-3 令 T(n) 表示这 n 次操作之和,那么分开考虑 i 是 2 的幂和 i 不是 2 的幂这两项,有 T(n)=∑i=0⌊lgn⌋2i+∑1≤i≤n,∄k∈Z s.t. 2k=11=2⌊lgn⌋+1−1+∑1≤i≤n,∄k∈Z s.t. 2k=11≤2lgn+1−1+∑i=1n1=2n−1+n≤3n 因此有 T(n)=O(n),平均每次操作的时间复杂度为 T(n)n=O(1)。