我正在实施一个聚类算法。我有vector of Node
个对象来保留原始副本和另外vector of Cluster
个对象:每个Cluster object
对其包含的所有节点都保留vector of pointers
。
在每次迭代中,两个集群应根据其加入成本连接在一起。
现在我使用priority queue
来保存包含连接成本和指向两个集群的指针的结构。在每次迭代中,我以最小的成本弹出一个并加入引用的集群。我想使用一个队列,因为我有很多数据和循环遍历所有对象以找到最低成本是不切实际的。
我已经通过将数据从一个集群复制到另一个集群然后删除其中一个集群来实现合并。问题是我的队列现在包含许多引用已删除群集的条目。
你会如何实现它?也许有一些更聪明的方式加入集群?我正在为实施寻找一个真实的想法。
答案 0 :(得分:0)
我有以下想法。我们在[{1}}课程中添加一个字段bool _isRemoved
。您将为每个已删除的群集将其设置为Cluster
。当您从队列中弹出某些内容时,首先要检查两个群集中是否有true
设置为_isRemoved
。如果是,您应该从队列中弹出下一对并继续处理。
我不是C ++专家,但下一个问题可能是删除并被引用的群集仍会占用内存。如果要避免此问题而不是将指针存储到队列中的集群,则可以存储集群的标识符。可以使用地图(字典)将标识符快速映射到集群。