export default DenseDataExtrema2D;
export type View2D = {
    get: (i: number, j: number) => number;
    set: (i: number, j: number, v: number) => void;
};
/**
 * @typedef View2D
 * @property {(i: number, j: number) => number} get
 * @property {(i: number, j: number, v: number) => void} set
 */
declare class DenseDataExtrema2D {
    /**
     * This module efficiently computes extrema of subsets of a given data matrix.
     * The matrix is subdivided into 'numSubsets' subsets where extrema are precomputed.
     * These values are used to efficiently approximate extrema given arbitrary subsets.
     * Larger values of 'numSubsets' lead to more accurate approximations (more expensive).
     *
     * @param {ArrayLike<number>} data array of quadratic length
     */
    constructor(data: ArrayLike<number>);
    /** @type {number} */
    epsilon: number;
    /** @type {number} */
    tileSize: number;
    /** @type {number} */
    numSubsets: number;
    /** @type {number} */
    subsetSize: number;
    /** @type {View2D} */
    subsetMinimums: View2D;
    /** @type {View2D} */
    subsetMaximums: View2D;
    /** @type {number} */
    minNonZeroInTile: number;
    /** @type {number} */
    maxNonZeroInTile: number;
    /**
     * Computes an approximation of the non-zero minimum in a subset
     *
     * @param {[startX: number, startY: number, endX: number, endY: number]} indexBounds
     * @return {number} Non-zero minium of the subset
     */
    getMinNonZeroInSubset(indexBounds: [startX: number, startY: number, endX: number, endY: number]): number;
    /**
     * Computes an approximation of the non-zero maximum in a subset
     *
     * @param {[startX: number, startY: number, endX: number, endY: number]} indexBounds
     * @return {number} Non-zero maxium of the subset
     */
    getMaxNonZeroInSubset(indexBounds: [startX: number, startY: number, endX: number, endY: number]): number;
    /**
     * Precomputes non-zero minimums of subsets of a given matrix
     * @param {View2D} dataMatrix
     * @return {View2D} Matrix containing minimums of the dataMatrix after subdivision using a regular grid
     */
    computeSubsetNonZeroMinimums(dataMatrix: View2D): View2D;
    /**
     * Precomputes non-zero maximums of subsets of a given matrix
     *
     * @param {View2D} dataMatrix
     * @return {View2D} Matrix containing maximums of the dataMatrix after subdivision using a regular grid
     */
    computeSubsetNonZeroMaximums(dataMatrix: View2D): View2D;
    /**
     * Computes the non-zero minimum of a subset of a matrix (ndarray)
     * @param {View2D} arr
     * @param {number} rowOffset - Starting row of the subset
     * @param {number} colOffset - Starting column of the subset
     * @param {number} width - Width (num columns) of the subset
     * @param {number} height - Height (num rows) of the subset
     * @return {number} Non-zeros - minimum of the subset
     */
    getMinNonZeroInNdarraySubset(arr: View2D, rowOffset: number, colOffset: number, width: number, height: number): number;
    /**
     * Computes the non-zero maximum of a subset of a matrix (ndarray)
     * @param {View2D} arr
     * @param {number} rowOffset - Starting row of the subset
     * @param {number} colOffset - Starting column of the subset
     * @param {number} width - Width (num columns) of the subset
     * @param {number} height - Height (num rows) of the subset
     * @return {number} Non-zeros maximum of the subset
     */
    getMaxNonZeroInNdarraySubset(arr: View2D, rowOffset: number, colOffset: number, width: number, height: number): number;
    mirrorPrecomputedExtrema(): void;
    /**
     * Computes the non-zero minimum in the entire data array using precomputed values
     *
     * @return {number} Non-zeros minimum of the data
     */
    getMinNonZeroInTile(): number;
    /**
     * Computes the non-zero maximum in the entire data array using precomputed values
     *
     * @return {number} Non-zeros maximum of the data
     */
    getMaxNonZeroInTile(): number;
}
