具有最大重叠和大小限制的聚类列表

2024-04-24 19:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下一组数字:

group1: 12 56 57 58 59 60 61 62 63 64 75 89 91 100 105 107 108 Group Size: 40
group2: 56 57 60 71 72 73 74 91 92 93 94 100 105 107 108 110 111 Group Size: 30
group3: 57 58 91 107 108 110 112 114 117 118 120 127 129 139 184 Group Size: 15
group4: 1 2 4 6 7 8 9 10 17 18 20 41 42 43 45 47 Group Size: 40
group5: 57 58 91 201 205 207 210 212 214 216 217 218 219 220 221 225 Group Size: 30
.
groupN: 50 51 52 53 54 210 214 216 219 225 700 701 702 705 706 708 Group Size: 40

现在,我想将具有最大重叠的组聚集在一起,这样在聚集之后,集群中的最大大小不会超过90。例如,这里的集群是:(group1,group2,group3),(group5,groupN)和group4。3组中的重叠元素如下所示:

Cluster1: (group1,group2,group3): 57 91 107 108 Cluster Size: (Group1_size+group2_size+group3_size =85 <90) 
Cluster2: group4: 1 2 4 6 7 8 9 10 17 18 20 41 42 43 45 47 Cluster Size: (group4_size < 40)
Cluster3: (group5,groupN): 201 214 216 219 225 Cluster Size: (group5_size + groupN_size 70 <90)

如果我在cluster1中包含group5,那么它的大小将是85+30=115,并且我希望返回一个大小<;90,因此我不能在cluster1中包含group4。 删除重复重叠元素后,各个簇中的元素为:

Cluster1: (group1, group2, group3): 12 56 57 58 59 60 61 62 63 64 71 72 73 74 75 89 91 92 93 94 100 105 107 108 110 111 112 114 117 118 120 127 129 139 184
Cluster2: group4: 1 2 4 6 7 8 9 10 17 18 20 41 42 43 45 47
Cluster3: (group5,groupN): 50 51 52 53 54 57 58 91 201 205 207 210 212 214 216 217 218 219 220 221 225 700 701 702 705 706 708

是否有一些现有的算法或技术,可以帮助我实现这种规模约束聚类。你知道吗

我试图通过找到任意两个组之间的公共元素来形成簇,如果包含后的簇大小为<;90,则将其包含在组中。但是,在任何编程语言库中,是否存在任何现有的算法,如C++、Python、java,它们可以帮助我高效地实现这一目标。如果没有,那么是否有任何现有的算法可以实现同样的效果。你知道吗

如果可能的话,如果算法也是最优的,那就太好了。你知道吗


Tags: 算法元素sizegroup集群clustergroup1group3
1条回答
网友
1楼 · 发布于 2024-04-24 19:27:17

没有简单的最优解。一个近似值如下:

  1. 选择最大的组。让它的大小为x
  2. 选择最大的组,使其大小小于90-x
  3. 不断重复步骤2,直到找不到这样的组为止
  4. 删除选定的组,然后从步骤1开始重复此过程

您可以选择group1(或group4或groupN)作为第一步。在第2步中,您将选择第4组。现在大小是80,没有小于90-80=10的组。所以停下来,把这两组人移走。在下一次迭代中,您将选择groupN,然后选择group2,最后选择group3。在上一次迭代中,只有一个组,即group5。你知道吗

相关问题 更多 >