时间复杂度
时间复杂度分析
递归操作
主定理
摊还分析
设 \(n\) 次操作总复杂度为 \(T(n)\),每次操作复杂度 \(O(\frac{T(n)}{n})\)
求 \(T(n)\)
栈
定义新操作 \(multipop(k)\) 一次性弹出 \(k\) 个数,操作 \(n\) 次,同时有 \(push\;pop\)
二进制
每次给一个 \(k\) 位二进制串最低位 \(+1\),初始为全 \(0\),每次进位 \(O(1)\)
聚合法
eg1:所有 \(pop\) 的操作最多执行 \(n\) 次,所以是 \(T(n)=O(n)\)
eg2:最低位每次都要变 \(O(n)\) 倒数第二位每两次变一次 \(O(\frac n2)\)
记帐法
保证每次自己的存款 \(\geq 0\) 即可
eg1:设 \(push\) 表示花 \(1\) 元,存 \(1\) 元,\(pop/multipop\) 花 \(1\) 元
\(pop/multipop\) 数少于 \(push\) 数,存款 \(\geq 0\)
最多 \(push\) \(n\),\(T(n)=2n\)
eg2:\(0 \to 1\) 花 \(1\) 元,存 \(1\) 元,\(1 \to 0\) 花 \(0\) 元
每次出现 \(1\) 必然原位置 \(0\) 存了 \(1\) 元变回来,存款 \(\geq 0\)
最多 \(n\) 位 \(1\),\(T(n)=2n\)
例题
1.\(vector\) 初始空间为 \(0\),第一次插入变 \(1\) 后面每次空间到达上界,空间变为 \(2\)倍,插入/扩展每个元素都是 \(O(1)\)
聚合法
设扩张了 \(k\) 次,扩展总复杂度 $$O(\Sigma_{i=1}^{k} 2^{i-1} =2^k-1)$$
插入 \(O(n)\),\(T(n) \lt 3n-1\)
2.对 \(a_1,.....a_n\) 两两求 \(gcd\) 得所有数 \(gcd\) 的复杂度
单次 \(gcd\) \(O(\log \frac{min(a,b)}{gcd(a,b)})+\Theta (1)\)
势能法
\(a_i\) 每次实际操作复杂度
构造势能函数 \(\phi(i)\),且 \(b_i=\phi(i)-\phi(i-1)\)

浙公网安备 33010602011771号