Generic top-down discrimination for sorting and partitioning in linear time

5 Citations (Scopus)

Abstract

We introduce the notion of discrimination as a generalization of both sorting and partitioning, and show that discriminators (discrimination functions) can be defined generically, by structural recursion on representations of ordering and equivalence relations. Discriminators improve the asymptotic performance of generic comparison-based sorting and partitioning, and can be implemented not to expose more information than the underlying ordering, respectively equivalence relation. For a large class of order and equivalence representations, including all standard orders for regular recursive first-order types, the discriminators execute in the worst-case linear time. The generic discriminators can be coded compactly using list comprehensions, with order and equivalence representations specified using Generalized Algebraic Data Types. We give some examples of the uses of discriminators, including the most-significant digit lexicographic sorting, type isomorphism with an associative-commutative operator, and database joins. Source code of discriminators and their applications in Haskell is included. We argue that built-in primitive types, notably pointers (references), should come with efficient discriminators, not just equality tests, since they facilitate the construction of discriminators for abstract types that are both highly efficient and representation-independent.

Original languageEnglish
JournalJournal of Functional Programming
Volume22
Issue number3
Pages (from-to)300-374
Number of pages75
ISSN0956-7968
DOIs
Publication statusPublished - May 2012

Fingerprint

Dive into the research topics of 'Generic top-down discrimination for sorting and partitioning in linear time'. Together they form a unique fingerprint.

Cite this