Implicit B-trees: a new data structure for the dictionary problem

Abstract

An implicit data structure for the dictionary problem maintains n data values in the first n locations of an array in such a way that it efficiently supports the operations insert, delete and search. No information other than that in O(1) memory cells and in the input data is to be retained; and the only operations performed on the data values (other than reads and writes) are comparisons. This paper describes the Implicit B-tree, a new data structure supporting these operations in O(log B n) block transfers like in regular B-trees, under the realistic assumption that a block stores B = Ω(log n) keys, so that reporting r consecutive keys in sorted order has a cost of O(log B n + r/B) block transfers. En route a number of space efficient techniques for handling segments of a large array in a memory hierarchy are developed. Being implicit, the proposed data structure occupies exactly ⌈n/B⌉ blocks of memory after each update, where n is the number of keys after each update and B is the number of keys contained in a memory block. In main memory, the time complexity of the operations is O(log n/ log logn), disproving a conjecture of the mid 1980’s. A preliminary version of the results in this paper has been presented at the 43rd Annual IEEE Symposium on Foundations of Computer Science [12]. Dipartimento di Informatica, Università di Pisa, via Buonarroti 2, 56127 Pisa, Italy. Supported was provided in part by the Italian MIUR project “ALINWEB: Algorithmics for Internet and the Web”. Author supported by Natural Science and Engineering Research Council of Canada and the Canada Research Chairs program.

DOI: 10.1016/j.jcss.2003.11.003

Extracted Key Phrases

2 Figures and Tables

Cite this paper

@article{Franceschini2004ImplicitBA, title={Implicit B-trees: a new data structure for the dictionary problem}, author={Gianni Franceschini and Roberto Grossi and J. Ian Munro and Linda Pagli}, journal={J. Comput. Syst. Sci.}, year={2004}, volume={68}, pages={788-807} }