DSA 问题集第二章
好早之前做的现在拿来复习正好。
DSA 问题集第二章



a),n=$ck$,总成本 $1 + c+…+c{k-1}=\frac {n-1}{c-1}$ 均摊得 1/(c-1)
b),常倍数越大时间复杂度越低
c),常倍数越大空闲空间越大,空间浪费多
e),每次扩容到 max {n + m,n * c},依然 O (1)
均摊是整个操作序列的平均,不是特定的平均。一次昂贵的操作换来了许多次便宜的操作

c):因为 expand 的装填因子是 1/2,如果一样的话,在 1/2 处反复做删除插入会造成大量扩容缩容。
1 | template <typename T> //0 <= lo < hi <= _size |

a):dedup () 将 elem [hi]=elem [k],但是 hi 就等于 k 了
c):直接内联

c):对于 elem [k],如果 find 到前面有 elem [i] 相同 (i + 1 次比对),就 remove (n-1-i 次移动),一共 n 次,n–;如果没找到一样的,就比对 k 次,k++。最后就是 1 + 2+…+n 次
d):每次删除靠后的元素,因为 remove 操作复杂度和后缀长度相关
e):
1 | Rank i = 0; |
g):哈希表


O(n)=max(O($\lambda n$)+1,O($(1-\lambda) n$)+2),O(n)=klogn
当且仅当两个数相等的时候取最小,$\lambda = 0.618$
每次强制区间长度是 fib_k - 1,每次取 mi = lo + fib_{k-1}-1



25:a):判定树是一个完全二叉树。总搜索次数:$\sum {(k-i)(2^{k-i-1})}$



在开始的时候申请一块大数组


删除元素时要旋转,把删除元素和末尾元素互换