算法复杂度分析:离线算法、摊还分析与下界意义
1. 离线与在线算法
在算法分析中,我们大部分时间会聚焦于离线算法。但这并不意味着会完全忽略在线算法,像搜索树(包括 AVL 树)和哈希技术等本质上就是在线算法,尽管它们常被当作离线算法呈现。在线算法非常适合进行摊还分析,在这种分析里,算法的幸运实例和糟糕实例会相互平衡。
2. 摊还分析
当我们执行一次算法时,可以考虑其平均复杂度或最坏情况复杂度。若这两种复杂度的差距较小,可忽略不计;若差距较大,就需要了解出现糟糕实例的可能性。当多次执行算法时,这种情况尤为有趣,因为糟糕情况(算法接近最坏情况)可能会被良好情况(算法接近平均情况甚至最佳情况)平衡。考虑重复执行的复杂度分析被称为摊还分析或信用分析。并非所有算法都适合摊还分析,在线算法通常是最适合的。进行摊还分析时,我们希望糟糕情况少见,良好情况常见。摊还分析与平均分析差别不大,如果知道每种情况的概率(在摊还分析中也称为势),平均复杂度就是所有情况的复杂度与概率乘积的平均值。
3. 下界及其意义
解决问题的算法复杂度构成了该问题复杂度的上界。也就是说,我们知道用这么多的努力可以解决问题,但这并不意味着没有更好的方法,这就是下界的重要性所在。确定问题复杂度的下界时,我们确定了下界和特定算法复杂度之间的范围。若这两种复杂度基本相同,那么我们的算法就是渐近最优的;若差距很大,有两种可能:一是下界不太好,可以改进;二是我们的算法效率不高,需要改进。有些情况下,我们无法改进这两种复杂度,且差距仍然很大,这类问题通常被认为是非常困难的问题。
下面以计算二维矩阵模板的 I/O 复杂度为例。我们担心主存和磁盘之间的块传输量远大于两个矩阵
超级会员免费看
订阅专栏 解锁全文
16

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



