PtsetSourceSets of integers implemented as Patricia trees.
Following Chris Okasaki and Andrew Gill's paper "Fast Mergeable Integer Maps".
This is a purely applicative data structure implementing a large fragment of Set.S with type elt = int, with identical specifications and similar performances.
One advantage of Patricia trees is unicity of representation. Thus OCaml's structural comparison can be used on sets.
sets implemented with little-endian Patricia trees
Notes:
min_elt, max_elt, and elements are purposely not provided, as there is no efficient way to implement them. If needed, you can implement min_elt s with fold min s (choose s), and similarly for max_elt, but this has linear complexity.map and split are merely implemented using fold and add.Additional functions not appearing in the signature Set.S from ocaml standard library.
intersect u v determines whether sets u and v have a non-empty intersection.
Big-endian Patricia trees
Big-endian Patricia trees with nonnegative elements only.
Changes:
add and singleton raise Invalid_arg if a negative element is givenmem is slightly faster (the Patricia tree is now a search tree)min_elt and max_elt are provided (and efficient)elements returns a list with elements in ascending order