Language agnostic 什么是具有摊销复杂性要求的修改函数,与具有非摊销复杂性要求的修改函数?

Language agnostic 什么是具有摊销复杂性要求的修改函数,与具有非摊销复杂性要求的修改函数?,language-agnostic,time-complexity,language-lawyer,complexity-theory,Language Agnostic,Time Complexity,Language Lawyer,Complexity Theory,修正函数的摊销与非摊销复杂性的官方理论定义是什么?这个问题在STL的C++标准中特别相关,但这是一个更一般的问题。 “常量”(非变异)函数(观察者或“获取者”)是否可以分摊复杂性 编辑:澄清明显令人困惑的“观察者”(根据上下文,可以是观察功能或外部观察者)。至少有三个(甚至更多)独立的正交轴可能会出现算法的渐近分析:情况(最佳、平均、最差);界(大O,小ω,θ);以及是否考虑摊销 本案例描述了考虑中的输入类别。它实际上是算法输入的子集。在执行渐进复杂性分析时,根据算法的性能将输入状态划分为子集是

修正函数的摊销与非摊销复杂性的官方理论定义是什么?这个问题在STL的C++标准中特别相关,但这是一个更一般的问题。 “常量”(非变异)函数(观察者或“获取者”)是否可以分摊复杂性

编辑:澄清明显令人困惑的“观察者”(根据上下文,可以是观察功能或外部观察者)。

至少有三个(甚至更多)独立的正交轴可能会出现算法的渐近分析:情况(最佳、平均、最差);界(大O,小ω,θ);以及是否考虑摊销

本案例描述了考虑中的输入类别。它实际上是算法输入的子集。在执行渐进复杂性分析时,根据算法的性能将输入状态划分为子集是很自然的,即子集的w.r.t.元素。因此,您可能有一个最佳情况,该算法尽可能地渐近执行;一个子集,其渐近性能尽可能差;或者,在平均复杂度的情况下,一组输入及其相对权重或发生概率。在没有具体描述的情况下,很自然地假设所有输入都包含在内,并且权重相等

边界描述了算法的复杂度对于某类输入的渐近行为。复杂性可以从上面、从下面或两者都有界;边界可以很紧,也可以不紧;而实际上,你选择哪一个界限可能是由考虑中的情况决定的(最佳情况下的下限,最坏情况下的上限,等等),理论上,这个选择是完全独立的

摊销分析是在基础复杂性分析的基础上进行的,考虑的不是单个输入,而是输入序列。摊销分析旨在解释一系列操作的总时间复杂度是如何表现的。例如,考虑将新元素插入到数组支持向量结构中的简单情况。如果我们有足够的容量,操作是O(1)。如果我们缺少容量,则操作为O(n)。如果我们以算术方式增加向量的容量(例如,每次增加k个新点),那么对于O(n)摊销复杂度,我们将有O(1)次访问(k-1)/k次,O(n)次访问1/k次。然而,如果我们每次需要更多的容量时都几何地增加容量,那么我们发现一系列的添加将具有O(1)摊销复杂性


真正恒定的函数可以执行摊销分析,但实际上没有理由这样做。当潜在的少量重复请求具有较差的个体性能时,摊销分析才有意义,而请求的多数(渐近C++)具有渐进的更好性能。C++标签是专门用于C++代码的。@ NANOLIVER ReNestMeNoCa一般但特别是C++。相关的:“非ARMIZ化”与“非平均”一样有意义;正如我所说,“只是复杂性”是“最坏情况复杂性”的常用缩写。宇宙中所有可能输入的平均值(有时根据其发生的概率加权)。平均复杂度不常用;在讨论时,域的细节通常是明确的,或者从上下文中明确的。例如,平均值是
O(n logn)
(比如说,在所有可能的有限自然数序列中),最坏的情况是O(n^2)。