Идеи для реализации кластеризации

0

Я реализую алгоритм кластеризации. У меня есть vector of Node объектов vector of Node для хранения оригинальных копий и другого vector of Cluster объектов vector of Cluster. Каждый Cluster object содержит vector of pointers на все содержащиеся в нем узлы.

На каждой итерации предполагается, что две кластеры будут объединены в соответствии со стоимостью соединения.

Прямо сейчас я использую priority queue для хранения структур, которые содержат стоимость соединения и указатели на оба кластера. На каждой итерации я вывожу одну из них с минимальными затратами и присоединяюсь к ссылочным кластерам. Я хочу использовать очередность, потому что у меня много данных, и цикл по всем объектам, чтобы найти минимальную стоимость, непрактичен.

Я реализовал слияние, скопировав данные из одного кластера в другой, а затем удалив один из кластеров. Проблема в том, что моя очередь теперь содержит много записей, которые ссылаются на удаленный кластер.

Как вы его реализуете? Может быть, есть еще более умный способ присоединиться к кластерам? Я ищу генетическую идею для реализации.

Теги:
algorithm

1 ответ

0

У меня есть следующая идея. Пусть добавьте поле bool _isRemoved в класс Cluster. Вы установите значение true для каждого удаленного кластера. Когда вы выталкиваете что-то из очереди, вы сначала проверите, имеет ли какой-либо из двух кластеров _isRemoved значение true. Если да, вы должны просто вывести следующую пару из очереди и продолжить обработку.

Я не эксперт C++, но следующая проблема может заключаться в том, что кластеры, которые были удалены и на которые ссылаются, все еще занимают память. Если вы хотите избежать этой проблемы вместо хранения указателей на кластеры в очереди, вы можете хранить идентификаторы кластеров. Идентификаторы могут быть быстро сопоставлены с кластерами с помощью карты (словаря).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню