Fast maximum-minimum filters implemented in C++
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.travis.yml Adding missing file. Apr 18, 2016
runningmaxmin.h Adding mono wedge. Oct 31, 2017
unit.cpp Adding mono wedge. Oct 31, 2017

Fast running maximum-minimum filters implemented in C++.

Build Status

This code implements the algorithms described in the following paper:

Daniel Lemire, Streaming Maximum-Minimum Filter Using No More than Three Comparisons per Element. Nordic Journal of Computing, 13 (4), pages 328-339, 2006.

A preprint is available there:

Contributors: Daniel Lemire, Kai Wolf

The main algorithm presented in this package is used in Apache Hive.


To reproduce the numbers from the paper, do the following:



./runningmaxmin --sine 1000000 10000 --windowrange 4 100 --times 1

./runningmaxmin --white 1000000 --windowrange 4 100 --times 1


The new algorithm introduced in the manuscript is most suitable for piecewise monotonic data or when low-latency is required. Otherwise, Gil-Kimmel and van Herk are good choices.

See also

For a Python version, see

For an application of this idea to rolling statistics in JavaScript, see

For an application in Go, please see

Another C++ library:

STL Monotonic Wedge