Algunos algoritmos de agrupamiento pueden usar estructuras de índice espacial. Esto permite, por ejemplo, que DBSCAN y OPTICS se ejecuten en tiempo (siempre que el índice permita consultas ).O(nlogn)O(logn)
Obviamente, un algoritmo que se ejecuta en esta complejidad no construye una matriz de distancia .O(n2)
Para algunos algoritmos, como la agrupación jerárquica con enlace único y enlace completo, existen algoritmos optimizados disponibles (SLINK, CLINK). Es solo que la mayoría de las personas usan lo que pueden obtener y lo que sea fácil de implementar. Y la agrupación jerárquica es fácil de implementar ingenuamente, usando iteraciones sobre una matriz de distancia (lo que resulta en un algoritmo ...).nn2O(n3)
No conozco una lista completa que compare algoritmos de agrupamiento. Probablemente hay más de 100 algoritmos de agrupación, después de todo. Hay al menos una docena de variantes de k-medias, por ejemplo. Además, hay complejidad en el tiempo de ejecución, así como la complejidad de la memoria; hay el caso promedio y el peor de los casos. Existen enormes diferencias de implementación (por ejemplo, enlace único mencionado anteriormente; e implementaciones de DBSCAN que no usan un índice, y por lo tanto están en , y aunque no necesitan almacenar la matriz de distancia , entonces todavía necesitan calcular todas las distancias por pares). Además, hay toneladas de parámetros. Para k significa,O(n2)n×nkes critico. Para casi cualquier algoritmo, la función de distancia hace una gran diferencia (muchas implementaciones solo permiten la distancia euclidiana ...). Y una vez que llegue a costosas funciones de distancia (más allá de cosas triviales como Euclidean), el número de cálculos de distancia puede ser rápidamente la parte principal. Entonces, necesitaría diferenciar entre el número total de operaciones y el número de cálculos de distancia necesarios. Entonces, un algoritmo que está en operaciones pero solo los cálculos de distancia pueden superar fácilmente un algoritmo que es en ambos, cuando las funciones de distancia son realmente caras (por ejemplo, la distancia la función en sí es ).O(n2)O(n)O(nlogn)O(n)