The packed-memory array (PMA) is a data structure that maintains a dynamic set of N elements in sorted order in a (N )-sized array. The idea is to intersperse (N ) empty spaces or gaps among the elements so that only a small number of elements need to be shifted around on an insert or delete. Because the elements are stored physically in sorted order in memory or on disk, the PMA can be used to support extremely efficient range queries. Specifically, the cost to scan L consecutive elements is O(1 + L/B) memory transfers. This article gives the first adaptive packed-memory array (APMA), which automatically adjusts to the input pattern. Like the traditional PMA, any pattern of updates costs only O(log 2 N ) amortized element moves and O(1 + (log 2 N )/B) amortized memory transfers per update. However, the APMA performs even better on many common input distributions achieving only O(log N ) amortized element moves and O(1 + (log N )/B) amortized memory transfers. The article analyzes sequential inserts, where the insertions are to the front of the APMA, hammer inserts, where the insertions "hammer" on one part of the APMA, random inserts, where the insertions are after random elements in the APMA, and bulk inserts, where for constant α ∈ [0, 1], N α elements are inserted after random elements in the APMA. The article then gives simulation results that are consistent with the asymptotic bounds. For sequential insertions of roughly 1.4 million elements, the APMA has four times fewer element moves per insertion than the traditional PMA and running times that are more than seven times faster.
Bender and Hu REF describe an adaptive packed-memory array.
An adaptive packed-memory array
TODS
Computer Science