【问题标题】:Clustering lists having maximum overlap with size restriction具有最大重叠与大小限制的聚类列表
【发布时间】:2015-04-18 02:48:39
【问题描述】:

我有以下一组数字:

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) 和组4。 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

是否有一些现有的算法或技术可以帮助我实现这种具有大小约束的聚类。

如果包含后的集群大小

如果可能的话,最好算法也是最优的。

【问题讨论】:

  • 好吧,如果你想天真,你可以创建集群,直到它们达到你想要的大小: 1. 遍历现有集群; 2.如果有足够的空间,在其中添加组;否则创建一个新集群。如果你想达到最佳状态,也许你可以从这里获得:en.wikipedia.org/wiki/Knapsack_problem 祝你好运!
  • @Alegnem 非常感谢您的回复。是的,我确实想做到最好。

标签: java python c++ algorithm machine-learning


【解决方案1】:

没有简单的最佳解决方案。一个近似值如下:

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

例如。您将首先选择 group1(或 group4 或 groupN)是第 1 步。在第 2 步中,您将选择 group4。现在大小为 80,并且没有小于 90-80=10 的组。所以停止并删除这两组。在下一次迭代中,您将选择 groupN,然后选择 group2,最后选择 group3。在最后一次迭代中,您只有一个组,即 group5。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2018-10-15
    • 2018-06-24
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多