我每组有九组500个对象。虽然这些集是独立的,但我认为这些集共享一个共同对象的核心。但是,根据集合,同一个对象可能具有不同的名称(索引)。但我可以测量两个物体之间的成对距离。
基于成对距离,我已经为所有成对的对计算了两组对象之间的最佳映射。因此,对于每对集合,我可以说任何两个对象之间的对应关系。
现在我想检测封闭的映射圈,例如{5(第1组) - > 13(第2组) - > 24(第3组) - > 5(集合1)},即集合1的对象5映射到集合2的对象13,其映射到集合3中的24,然后映射回集合1的对象5.我需要这种形式的圆形映射来争论对象基本相同。
当然,在一个理想的世界中,我可以识别出涵盖所有九组的大多数圈子。但是,3-9集之间的常见对象也很有趣。因此,我想要一个详尽的列表。
您是否知道执行此任务的算法,或者在组合数学中如何将此问题称为“?”
作为一种启发式方法,我首先要确定3组所有组合中的圆,然后将这些结果组合成更大的组合组合。
答案 0 :(得分:0)
如果我正确地按照您的描述,您似乎希望找到各组之间的对应关系。这个算法是否适合你。
1. Intialize a hashmap H
2. Initialize key frequency map U = {}
3. for each set i
4. for each element e in set i
5. H.insert {e.key, {i, ...}}
6. if U.contain(e.key)
7. c = U.get(e.key)
8. U.update(e.key, c + 1)
9. else
10. U.insert(e.key, 1)
11. endif
12. endfor
13. endfor
第5行将元素插入到地图中H.具有相同键的元素存储在链接列表中。您可以通过在U中找到频率最高的密钥来找到最长的链。然后通过执行H.get(密钥),您将返回列表。通过将最后一个元素链接到第一个元素,您将获得所寻找的循环。
我希望这会有所帮助。