import { Cluster } from "./cluster";
export declare class Clusterer<T> {
    Elements: T[];
    K: number;
    DistanceFn: (t1: T, t2: T) => number;
    static clusterElements: <T extends {}>(elements: T[], k: number, distanceFn?: (t1: T, t2: T) => number) => T[][];
    static getInstance: <T extends {}>(elements: T[], k: number, distanceFn?: (t1: T, t2: T) => number) => Clusterer<T>;
    Medoids: T[];
    Clusters: Array<Cluster<T>>;
    IterationCount: number;
    readonly OptimisationStarted: boolean;
    OptimisationCompleted: boolean;
    private constructor();
    iterate: () => boolean;
    getClusteredData: () => T[][];
    runToCompletion: () => void;
    allocateToClustersAroundCurrentMedoids: () => void;
    calculateCurrentCost: () => number;
    private findDistances;
    private selectInitialMedoids;
}
