具有最大重叠和大小限制的群集列表
Clustering lists having maximum overlap with size restriction
我有以下一组数字:
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,因此我不能将group4包括在cluster1中。去除重复重叠元素后,各个集群中的元素为:
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等编程语言库中,有没有现有的算法可以帮助我有效地实现这一点。如果没有,那么有没有任何现有的算法可以实现同样的效果。
如果可能的话,如果算法也是最优的,那就太好了。
没有简单的最优解决方案。一个近似值如下:
- 选择大小最大的组。让它的大小为x
- 选择最大的组,使其大小小于90-x
- 继续重复步骤2,直到找不到这样的组为止
- 删除选定的组,然后从步骤1开始重复该过程
例如。您将首先选择组1(或组4或组N)是步骤1。在步骤2中,您将选择组4。现在大小是80,并且没有小于90-80=10的组。因此,停止并删除这两组。在下一次迭代中,您将选择groupN,然后选择group2,最后选择group3。在上一次迭代中,您只有一个组,即group5。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 具有最大重叠和大小限制的群集列表