计算复杂度相关知识解析
1. 归纳证明
我们可以利用归纳法来证明公式的等式关系。以 $\sum_{i = 1}^{n}i$ 为例,证明过程如下:
$\sum_{i = 1}^{n}i = (\sum_{i = 1}^{n - 1}i) + n = \frac{n(n - 1)}{2} + n = \frac{n(n - 1)}{2} + \frac{2n}{2} = \frac{n^2 - n + 2n}{2} = \frac{n^2 + n}{2} = \frac{n(n + 1)}{2}$
从公式的左边到右边,我们可以看到要证明的两者确实相等,这样就完成了归纳证明。归纳证明不需要我们遍历所有步骤,只要创建了这样的元证明,就证明了等式对所有的 $n$ 都成立,这就是归纳法的强大之处。
2. 提高 PyList 追加操作的效率
最初我们想找出向 PyList 追加 $n$ 个元素所需的时间。使用之前的追加方法,其时间复杂度为 $O(n^2)$。这是因为第一次调用追加操作时要复制一个元素,第二次要复制两个元素,第三次要复制三个元素,依此类推。根据前面的证明,$1 + 2 + 3 + \cdots + n = \frac{n(n + 1)}{2}$,该公式中最高次项是 $n^2$ 项,所以之前的追加方法具有 $O(n^2)$ 的复杂度,这不是一个好的结果。
例如,在一个复杂程序中,如果有 100,000 个图形命令,再添加一个命令大约需要 27 秒,这是不可接受的。在大 O 表示法中,我们说这个追加方法是 $O(n^2)$ 复杂度的。当 $n$ 很大时,具有 $O(n^2)$ 复杂度的程序或函数性能不佳,通常应避免编写具有此类计算复杂度的代
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



