Если бы я реализовал алгоритм иерархической кластеризации, скажем, на C/C++ или Java, учитывая функции для вычисления расстояния между кластерами и внутри кластеров,
1. каким был бы мой выбор (наряду с другими вариантами) реализовать структуры данных при сохранении результатов вычисленных кластеров в каждом «проходе» из метрики близости, которая определяется как n ^ 2 ниже.
Corresponding Proximity matrix p1 p2 p3 p4 .... and hence n*n p1 d11 d12 d13 d14 p2 ... p3... p4 ...
2. Будет ли выбор структур данных отличаться, если я буду использовать построение соответствующих дендограмм сверху вниз, а не снизу вверх?
Пример дендограммы снизу вверх (источник, Wiki)
3. Поскольку задача вычисления кластеров и их центроидов требует больших вычислительных ресурсов (жадный алгоритм?) — улучшится ли это при выборе структур данных — каковы абстрактные варианты, которые вы можете придумать?
4. Неужели существует такое понятие, как разреженная матрица [пост посчитав близость 2-х точек, которые потом нарастут, чтобы ассимилировать больше соседних точек, точек будет меньше , если бы мы сохранили наши «новые» расстояния в новой матрице] в этом контексте? Будет ли структура данных сокращаться/расти в соответствии с этой потребностью?
5. Может ли эта матрица существовать в памяти или части ее кластера - Если нет, то что мы должны перезагружать в память перед вычислением каждого следующего кластера (агломеративный кластеризация или что-то другое)
+1, если вы придерживаетесь концептуального (и, надеюсь, интуитивно понятного) ответа/или перенаправляете меня в этом направлении
PPS: мне не НУЖНА функция, которая поможет мне реализовать это - просто хочу понять это с точки зрения управления памятью и концептуальной точки зрения в отношении больших наборов данных. У меня очень мало знаний по этому вопросу, так что не обращайте внимания, если это звучит слишком примитивно.