查找最大尺寸圆形映射的算法

时间:2012-12-06 09:24:25

标签: algorithm

我每组有九组500个对象。虽然这些集是独立的,但我认为这些集共享一个共同对象的核心。但是,根据集合,同一个对象可能具有不同的名称(索引)。但我可以测量两个物体之间的成对距离。

基于成对距离,我已经为所有成对的对计算了两组对象之间的最佳映射。因此,对于每对集合,我可以说任何两个对象之间的对应关系。

现在我想检测封闭的映射圈,例如{5(第1组) - > 13(第2组) - > 24(第3组) - > 5(集合1)},即集合1的对象5映射到集合2的对象13,其映射到集合3中的24,然后映射回集合1的对象5.我需要这种形式的圆形映射来争论对象基本相同。

当然,在一个理想的世界中,我可以识别出涵盖所有九组的大多数圈子。但是,3-9集之间的常见对象也很有趣。因此,我想要一个详尽的列表。

您是否知道执行此任务的算法,或者在组合数学中如何将此问题称为“?”

作为一种启发式方法,我首先要确定3组所有组合中的圆,然后将这些结果组合成更大的组合组合。

1 个答案:

答案 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(密钥),您将返回列表。通过将最后一个元素链接到第一个元素,您将获得所寻找的循环。

我希望这会有所帮助。