2005
DOI: 10.1017/s0956796805005769
|View full text |Cite
|
Sign up to set email alerts
|

Finger trees: a simple general-purpose data structure

Abstract: We introduce 2-3 finger trees, a functional representation of persistent sequences supporting access to the ends in amortized constant time, and concatenation and splitting in time logarithmic in the size of the smaller piece. Representations achieving these bounds have appeared previously, but 2-3 finger trees are much simpler, as are the operations on them. Further, by defining the split operation in a general form, we obtain a general purpose data structure that can serve as a sequence, priority queue, sear… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
4
1

Citation Types

0
67
0

Year Published

2011
2011
2023
2023

Publication Types

Select...
8

Relationship

1
7

Authors

Journals

citations
Cited by 85 publications
(67 citation statements)
references
References 21 publications
0
67
0
Order By: Relevance
“…However, Hinze and Paterson [4] have shown that using a generalization of binary search based on monoidal annotations, one could implement a variety of data structures. In this section, we present and verify a generalized implementation of usual AVL routines (insertion, deletion, etc) using a similar approach.…”
Section: Selection Of Elements In Balanced Treesmentioning
confidence: 99%
See 1 more Smart Citation
“…However, Hinze and Paterson [4] have shown that using a generalization of binary search based on monoidal annotations, one could implement a variety of data structures. In this section, we present and verify a generalized implementation of usual AVL routines (insertion, deletion, etc) using a similar approach.…”
Section: Selection Of Elements In Balanced Treesmentioning
confidence: 99%
“…To reach the appropriate level of genericity in the common part of this development we use an abstract binary search mechanism, based in particular on a notion of monoidal measure on stored data. This notion is shared with an approach proposed by Hinze and Paterson [4] for the development of another general-purpose tree data structure they called finger trees. This abstraction allows us to clearly separate the concepts of balanced trees on one hand and search trees on the other hand.…”
Section: Introductionmentioning
confidence: 99%
“…Their catenable sorted list is one instance of a finger search tree, a type of tree that has been studied extensively since the 1970s [7]. A more recent functional finger-tree data structure by Hinze and Paterson achieves similar bounds and accepts a simple implementation [8].…”
Section: Introductionmentioning
confidence: 99%
“…While there has been much focus on developing asymptotically efficient sequence data structures, there is relatively little rigorous work on practical data structures that can guarantee small constant factors on modern computers. To understand the significance of practical concerns we implemented in C++ an optimized version of Hinze and Paterson finger tree data structure [8], and compared it to a resizable circular array, which is simpler but asymptotically efficient only for a narrower set of operations including push and pop. Our experiments show that the finger tree is over 20 times slower for push/pop operations than with circular arrays.…”
Section: Introductionmentioning
confidence: 99%
“…Instead, we structure the intermediate results and merge them in parallel. Specialized data structures with ecient merge operations exist, but pay a price in cache-locality and memory usage [28] [25]. We show how to merge existing data structures, allowing parallel construction and retaining the eciency of the sequential access.…”
Section: Introductionmentioning
confidence: 99%