Computer Science    
   
Table of contents
(Prev) Finger protocolFinger (Next)

Finger tree

A finger tree is a purely functional data structure used in efficiently implementing other functional data structures. A finger tree gives amortized constant time access to the "fingers" (leaves) of the tree, where data is stored, and the internal nodes are labeled in some way as to provide the functionality of the particular data structure being implemented. For example, a priority queue can be implemented by labeling the internal nodes by the minimum priority of its children in the tree, or an indexed list/array can be implemented with a labeling of nodes by the count of the leaves in their children. Finger trees can provide amortized O(1) cons, reversing, cdr, O(log n) append and split; and can be adapted to be indexed or ordered sequences.

They have since been used in the Haskell core libraries (in the implementation of Data.Sequence), and an implementation in OCaml exists[1] which was derived from a proven-correct Coq specification;[2] and a C# implementation of finger trees was published in 2008; the Yi text editor specializes finger trees to finger strings for efficient storage of buffer text. Finger trees can be implemented with or without[3]lazy evaluation, but laziness allows for simpler implementations.

They were first published in 1977 by Leonidas J. Guibas,[4] and periodically refined since (e.g. a version using AVL trees,[5] non-lazy finger trees, simpler 2-3 finger trees,[6] and so on)

See also

References

  1. ^ Caml Weekly News
  2. ^ Matthieu Sozeau :: Dependent Finger Trees in Coq
  3. ^ Kaplan, H.; Tarjan, R. E. (1995), "Persistent lists with catenation via recursive slow-down", Proceedings of the Twenty-Seventh Annual ACM Symposium on the Theory of Computing, pp. 93–102.
  4. ^ Guibas, L. J.; McCreight, E. M.; Plass, M. F.; Roberts, J. R. (1977), "A new representation for linear lists", Conference Record of the Ninth Annual ACM Symposium on Theory of Computing, pp. 49–60.
  5. ^ Tsakalidis, A. K. (1985), "AVL-trees for localized search", Information and Control 67 (1-3): 173–194, doi:10.1016/S0019-9958(85)80034-6.
  6. ^ Hinze, Ralf; Paterson, Ross (2006), "Finger Trees: A Simple General-purpose Data Structure", Journal of Functional Programming 16 (2): 197–217, doi:10.1017/S0956796805005769, http://www.soi.city.ac.uk/~ross/paper s/FingerTree.pdf.

External links


(Prev) Finger protocolFinger (Next)