Distribution Search

A distribution search requires that there is a best-fitting line which passes through the data together with a maximum error: array[i] = a*i + b ± B1 for real values of a, b, and M. In this case, it is possible to find an inverse function floor( (array[i] - b - M)/a ), ..., ceil( (array[i] - b + M)/a ) which maps a value onto a possible range of values. At this point, based on the width 2M/a, either introspective, binary, or linear search may now be used.

The run time of this algorithm is OM/a ln(M/a) ).