A data structure for dynamic trees
Journal of Computer and System Sciences
Making data structures persistent
Journal of Computer and System Sciences - 18th Annual ACM Symposium on Theory of Computing (STOC), May 28-30, 1986
Fully persistent lists with catenation
Journal of the ACM (JACM)
Persistent lists with catenation via recursive slow-down
STOC '95 Proceedings of the twenty-seventh annual ACM symposium on Theory of computing
ACM Transactions on Programming Languages and Systems (TOPLAS)
Purely functional data structures
Purely functional data structures
A large-scale study of file-system contents
SIGMETRICS '99 Proceedings of the 1999 ACM SIGMETRICS international conference on Measurement and modeling of computer systems
Fully Persistent Arrays (Extended Array)
WADS '89 Proceedings of the Workshop on Algorithms and Data Structures
Making data structures confluently persistent
Journal of Algorithms - Special issue: Twelfth annual ACM-SIAM symposium on discrete algorithms
PersiFS: a versioned file system with an efficient representation
Proceedings of the twentieth ACM symposium on Operating systems principles
Randomization does not help searching predecessors
SODA '07 Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms
Hi-index | 0.00 |
We consider a data-structural problem motivated by version control of a hierarchical directory structure in a system like Subversion. The model is that directories and files can be moved and copied between two arbitrary versions in addition to being added or removed in an arbitrary version. Equivalently, we wish to maintain a confluently persistent trie (where internal nodes represent directories, leaves represent files, and edge labels represent path names), subject to copying a subtree between two arbitrary versions, adding a new child to an existing node, and deleting an existing subtree in an arbitrary version.Our first data structure represents an n-node degree-Δtrie with O(1) "fingers" in each version while supporting finger movement (navigation) and modifications near the fingers (including subtree copy) in $O(\lg \Delta)$ time and space per operation. This data structure is essentially a locality-sensitive version of the standard practice--path copying--costing $O(d \lg \Delta)$ time and space for modification of a node at depth d, which is expensive when performing many deep but nearby updates. Our second data structure supporting finger movement in $O(\lg \Delta)$ time and no space, while modifications take $O(\lg n)$ time and space. This data structure is substantially faster for deep updates, i.e., unbalanced tries. Both of these data structures are functional, which is a stronger property than confluent persistence. Without this stronger property, we show how both data structures can be sped up to support movement in $O(\lg \lg \Delta)$, which is essentially optimal. Along the way, we present a general technique for global rebuilding of fully persistent data structures, which is nontrivial because amortization and persistence do not usually mix. In particular, this technique improves the best previous result for fully persistent arrays and obtains the first efficient fully persistent hash table.