最佳可调整大小的数组
摘要:可变大小的数组是一种可以通过添加或移除最后一项或两端的项来实现增长和收缩的数组,同时仍然支持根据索引对数组中的每个项进行常量时间访问。由于数组的大小即其中的项数随时间变化,因此要实现高效的可变大小数组维护,需要进行动态内存管理。标准的倍增技术允许使用仅为N的空间来维护一个大小为N的数组,每个操作的平摊时间为O(1),甚至可以达到最坏情况下为O(1)的时间。Sitarski和Brodnik等人描述了更好的解决方案,可以使用仅N+O(sqrt{N})的空间来维护大小为N的可变大小数组,每个操作仍然具有O(1)的时间。Brodnik等人给出了这是最佳可能性的简单证明。 我们区分储存可变大小数组所需的空间和访问其项所需的空间与增长或收缩数组时可能需要的临时空间。对于每个整数rge 2,我们证明了如果在增长和收缩操作期间可以暂时使用N+O(N^{1-1/r})的空间,则N+O(N^{1/r})的空间足以存储和访问大小为N的数组。按索引访问项需要O(1)的最坏情况时间,而增长和收缩操作需要O(r)的平摊时间。我们使用对增长游戏的精确分析来证明,对于从一类广泛的数据结构中使用仅N+O(N^{1/r})的空间来存储数组的任何数据结构,即使只允许增长和访问操作,其增摊成本也为Omega(r)。除非r=2,否则无法将增长和收缩操作的时间变为最坏情况。
作者:Robert E. Tarjan, Uri Zwick
论文ID:2211.11009
分类:Data Structures and Algorithms
分类简称:cs.DS
提交时间:2023-05-30