import type { SymbolRecord } from '../types.js';
/** Bucket a list of symbols by a hash extractor (skipping symbols whose hash is empty). */
export declare function bucketBy(symbols: SymbolRecord[], hashFn: (s: SymbolRecord) => string | undefined): Map<string, SymbolRecord[]>;
/** First non-empty hash from a cluster, picked by the layer that matched. */
export declare function representativeHash<MatchedBy extends string>(group: SymbolRecord[], matchedBy: MatchedBy, pickers: Record<MatchedBy, (s: SymbolRecord) => string | undefined>): string;
/** Flat-array union-find with path compression + rank balancing. */
export declare class UnionFind {
    private readonly parent;
    private readonly rank;
    constructor(n: number);
    find(x: number): number;
    union(a: number, b: number): void;
}
//# sourceMappingURL=clustering.d.ts.map