Некоторые алгоритмы кластеризации могут использовать структуры пространственного индекса. Это позволяет, например, DBSCAN и OPTICS запускаться за время (если индекс разрешает запросы ).O ( n log )O(nlogn)O(logn)
Очевидно, что алгоритм, который работает с такой сложностью, не строит матрицу расстояний .O(n2)
Для некоторых алгоритмов, таких как иерархическая кластеризация с одиночной и полной связью, существуют оптимизированные алгоритмы (SLINK, CLINK). Просто большинство людей используют то, что они могут получить, и то, что легко реализовать. И иерархическую кластеризацию легко реализовать наивно, используя итераций по матрице расстояний (что приводит к алгоритму ...).n 2 O ( n 3 )nn2O(n3)
Я не знаю полного списка, сравнивающего алгоритмы кластеризации. В конце концов, вероятно, существует более 100 алгоритмов кластеризации. Например, существует как минимум дюжина вариантов k-средних. Плюс, есть сложность во время выполнения так же как сложность памяти; есть средний случай и худший случай. Существуют огромные различия в реализации (например, упомянутая выше одиночная ссылка; и реализации DBSCAN, которые не используют индекс и, следовательно, находятся в , и при этом им не нужно хранить полную матрицу расстояний , тогда им еще нужно вычислить все попарные расстояния). Плюс есть множество параметров. Для k-средних,n × n k O ( n 2 ) O ( n ) O ( n log n ) O ( n )O(n2)n×nkимеет решающее значение. Практически для любого алгоритма функция расстояния имеет огромное значение (во многих реализациях допускается только евклидово расстояние ...). И как только вы доберетесь до дорогих функций расстояния (помимо таких простых вещей, как евклидовы), число вычислений расстояния может быстро стать основной частью. Таким образом, вам нужно будет различать общее количество операций и количество необходимых вычислений расстояния. Таким образом, алгоритм, который находится в операциях, но только вычислений расстояния, может легко превзойти алгоритм, который в обоих случаях, когда функции расстояния действительно дороги (скажем, расстояние сама функция ).O(n2)O(n)O(nlogn)O(n)