@graphty/algorithms
Version:
Graph algorithms library for browser environments implemented in TypeScript
49 lines • 1.75 kB
TypeScript
/**
* Hierarchical Clustering Algorithm
*
* Builds a hierarchy of clusters through agglomeration (bottom-up)
* or division (top-down). Useful for understanding multi-scale
* structure in graphs.
*/
import type { Graph } from "../core/graph.js";
export interface ClusterNode<T> {
id: string;
members: Set<T>;
left?: ClusterNode<T> | undefined;
right?: ClusterNode<T> | undefined;
distance: number;
height: number;
trees?: ClusterNode<T>[] | undefined;
}
export interface HierarchicalClusteringResult<T> {
root: ClusterNode<T>;
dendrogram: ClusterNode<T>[];
clusters: Map<number, Set<T>[]>;
}
export type LinkageMethod = "single" | "complete" | "average" | "ward";
/**
* Cut dendrogram at specific height to get clusters
*/
export declare function cutDendrogram<T>(root: ClusterNode<T>, height: number): Set<T>[];
/**
* Cut dendrogram to get exactly k clusters
*/
export declare function cutDendrogramKClusters<T>(root: ClusterNode<T>, k: number): Set<T>[];
/**
* Compute modularity-based hierarchical clustering
* Uses modularity gain to decide merges
*/
export declare function modularityHierarchicalClustering(graph: Graph): HierarchicalClusteringResult<string>;
/**
* Agglomerative hierarchical clustering
* Builds clusters bottom-up by merging closest pairs
*
* @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
* @param linkage - Linkage method for cluster distance
* @returns Hierarchical clustering result
*
* Time Complexity: O(n³) naive, O(n² log n) with heap
* Space Complexity: O(n²)
*/
export declare function hierarchicalClustering(graph: Graph, linkage?: LinkageMethod): HierarchicalClusteringResult<string>;
//# sourceMappingURL=hierarchical.d.ts.map