这个问题:Time complexity of memory allocation说内存分配需要非确定性的时间。基于此,如何说“将项目添加到动态数组需要分摊O(1)时间”是否有效?在这种情况下,如果添加项目导致动态数组调整大小,则必须分配新的后备缓冲区。据我们所知,分配该缓冲区可能需要O(1)时间,或者O(n ^ 2)时间,或者一些相当于内存分配器使用的算法及其当前状态的疯狂大表达式,这取决于内存分配器使用的算法。
学术论文是否只是忽略了内存分配的时间复杂性/假设它在计算时间复杂度时是O(1)?
答案 0 :(得分:1)
对于使用动态内存的算法的渐近(大O)分析,通常可以安全地假设分配的摊余成本与分配的大小成比例。
这是保守的,因为有真正的内存分配方案,比如简单的复制垃圾收集,可以保证时间。同时,假设一个更快的分配方案通常没有用,因为实际使用你分配的内存的成本至少也与分配的大小成正比。
真正的分配器通常也会将线性成本归零,以便将内存或映射页面或其他内容清零,因此即使假设更快的分配器可能更方便,也应该避免使用它是不切实际的。