/**
 * @typedef {object} ROCKNode
 * @property {number[]} [point] Data point of leaf node
 * @property {number} [index] Data index of leaf node
 * @property {number} g Number of leaf nodes
 * @property {number} [distance] Distance between children nodes
 * @property {ROCKNode[]} [children] Children nodes
 * @property {ROCKNode[]} leafs Leaf nodes
 */
/**
 * RObust Clustering using linKs
 */
export default class ROCK {
    /**
     * @param {number} th Threshold
     * @param {number} k Number of clusters
     */
    constructor(th: number, k: number);
    _th: number;
    _k: number;
    _f(): number;
    _g(c1: any, c2: any, links: any): number;
    _sim(a: any, b: any): number;
    _link(data: any): Link;
    /**
     * Fit model.
     * @param {Array<Array<number>>} data Training data
     */
    fit(data: Array<Array<number>>): void;
    _root: {
        g: number;
        children: any[];
        readonly leafs: any[];
    };
    /**
     * Returns the specified number of clusters.
     * @param {number} number Number of clusters
     * @returns {ROCKNode[]} Cluster nodes
     */
    getClusters(number: number): ROCKNode[];
    /**
     * Returns predicted categories.
     * @returns {number[]} Predicted values
     */
    predict(): number[];
}
export type ROCKNode = {
    /**
     * Data point of leaf node
     */
    point?: number[];
    /**
     * Data index of leaf node
     */
    index?: number;
    /**
     * Number of leaf nodes
     */
    g: number;
    /**
     * Distance between children nodes
     */
    distance?: number;
    /**
     * Children nodes
     */
    children?: ROCKNode[];
    /**
     * Leaf nodes
     */
    leafs: ROCKNode[];
};
declare class Link {
    _link: any[];
    at(i: any, j: any): any;
    set(i: any, j: any, value: any): void;
}
export {};
