在我看到的任何地方(在SO和其他来源上),摊销分析通常只适用于数据结构。例如用于dynamic array或splay tree。然而,我还没有看到纯算法的分期分析的应用。关于算法的摊销分析有意义吗?摊销分析假设了一系列操作,这对于数据结构是正确的,但对于算法则不是。
发布于 2021-10-13 18:59:06
只有当存在某种可变状态,允许在一个操作中完成的计算影响另一个操作中的计算性能时,摊销一系列操作的成本才有意义。如果一系列操作的性能可以独立地分析为各个操作的性能总和,其中每个操作都不依赖于执行的其他操作,则不会进行摊销。
因此,从这个意义上说,摊销分析只适用于数据结构,而不适用于纯算法。然而,这假设了一个非常宽泛的“数据结构”的定义,它几乎涵盖了任何可变状态。例如,当协程执行暂停时,coroutine的局部变量是否应该被视为数据结构,这是有争议的。
同样,我们通常不会将装饰有LRU cache的函数视为“是”数据结构,而是说它“使用”缓存的数据结构,并且在分析一系列调用(其中一些命中缓存,另一些未命中)的性能时,我们不会说我们正在分析缓存使用的数据结构,我们会说我们正在分析memoised算法。
https://stackoverflow.com/questions/69560766
复制相似问题