We present an optimal partially-persistent external-memory search tree with amortized I/O bounds matching those achieved by the non-persistent $B^{\varepsilon}$-tree by Brodal and Fagerberg [SODA 2003]. In a partially-persistent data structure each update creates a new version of the data structure, where all past versions can be queried, but only the current version can be updated. All operations should be efficient with respect to the size $N_v$ of the accessed version $v$. For any parameter $0<\varepsilon<1$, our data structure supports insertions and deletions in amortized $O\!\left(\frac{1}{\varepsilon B^{1-\varepsilon}}\log_B N_v\right)$ I/Os, where $B$ is the external-memory block size. It also supports successor and range reporting queries in amortized $O\!\left(\frac{1}{\varepsilon}\log_B N_v+K/B\right)$ I/Os, where $K$ is the number of values reported. The space usage of the data structure is linear in the total number of updates. We make the standard and minimal assumption that the internal memory has size $M \geq 2B$. The previous state-of-the-art external-memory partially-persistent search tree by Arge, Danner and Teh [JEA 2003] supports all operations in worst-case $O\!\left(\log_B N_v+K/B\right)$ I/Os, matching the bounds achieved by the classical B-tree by Bayer and McCreight [Acta Informatica 1972]. Our data structure successfully combines buffering updates with partial persistence. The I/O bounds can also be achieved in the worst-case sense, by slightly modifying our data structure and under the requirement that the memory size $M = \Omega\!\left(B^{1-\varepsilon}\log_2(\max_v N_v)\right)$. The worst-case result slightly improves the memory requirement over the previous ephemeral external-memory dictionary by Das, Iacono, and Nekrich (ISAAC 2022), who achieved matching worst-case I/O bounds but required $M=\Omega\!\left(B\log_B N\right)$.
翻译:我们提出了一种最优的部分持久化外存搜索树,其平摊I/O复杂度与Brodal和Fagerberg [SODA 2003]提出的非持久化$B^{\varepsilon}$树所达到的界相匹配。在部分持久化数据结构中,每次更新操作都会创建数据结构的一个新版本,所有历史版本均可被查询,但只有当前版本可被更新。所有操作相对于所访问版本$v$的规模$N_v$都应是高效的。对于任意参数$0<\varepsilon<1$,我们的数据结构支持插入和删除操作的平摊I/O复杂度为$O\!\left(\frac{1}{\varepsilon B^{1-\varepsilon}}\log_B N_v\right)$,其中$B$为外存块大小。同时支持后继查询和范围报告查询,平摊I/O复杂度为$O\!\left(\frac{1}{\varepsilon}\log_B N_v+K/B\right)$,其中$K$为报告值的数量。该数据结构的空间使用量与总更新次数呈线性关系。我们采用标准且最小化的假设,即内存大小满足$M \geq 2B$。先前由Arge、Danner和Teh [JEA 2003]提出的最先进的部分持久化外存搜索树,所有操作的最坏情况I/O复杂度为$O\!\left(\log_B N_v+K/B\right)$,与Bayer和McCreight [Acta Informatica 1972]提出的经典B树所达到的界一致。我们的数据结构成功地将缓冲更新技术与部分持久化相结合。通过轻微修改数据结构,并在内存大小满足$M = \Omega\!\left(B^{1-\varepsilon}\log_2(\max_v N_v)\right)$的条件下,上述I/O界也可在最坏情况下实现。该最坏情况结果在内存需求方面较Das、Iacono和Nekrich (ISAAC 2022)提出的临时性外存字典略有改进,后者虽达到了匹配的最坏情况I/O界,但要求$M=\Omega\!\left(B\log_B N\right)$。