注意:我编辑了原始问题以便更准确地解释。
当我为我的新方法进行模拟时,我需要生成一个由多个子集组成的特殊类型的数据集。问题是子集中存在一些“共享”变量,共享变量的数量在这里称为“重叠”。由于给出了重叠比例的分布,我需要生成一个适当的变量列表,它们的重叠遵循给定的分布。但是我没有实现这样的算法...
我不确定是否有针对此类问题的特定算法, 但经过长时间的搜索,我找不到这样的东西。
我更喜欢R解决方案,但其他任何人也会非常感激。请帮我解决这个问题!非常感谢你!
以下是我的问题的标准化解释。我试着尽可能地解释一下,但如果还不够,请给我任何建议。
目的:从给定的元素重叠矩阵生成 n 集。每组包含 k 元素。
输入:有一个n * n矩阵,其第(i,j)个单元格值表示从第(i)组到第(j)组的重叠元素的数量。
输出 n 设置的 k 元素标识符列表(可以使用的任何内容,如数字)。
假设:每组的元素数量为 k ,并且在所有 n 集合中的元素数量相同。因此,输入矩阵是对称的。
示例(假设k = 3且n = 3)
输入
3 1 0
1 3 1
0 1 3
输出
Set 1: A B C
Set 2: A D E
Set 3: D F G
在上面的示例输入中,(1,2)和(2,1)个单元格为1,因为集合1和2共享“A”元素而反之亦然,对角线单元格是3(= k)因为每个集合都与自己共享所有元素。
答案 0 :(得分:0)
我会重复以下过程,直到我考虑了所有矩阵条目:
1)将矩阵视为图的邻接矩阵,并找到其中最大的团。也就是说,找到索引的最大可能集合S,使得对于集合S M(i,j)中的所有i,j> 0
2)创建一个与S中索引对应的所有集合中的项目 - 实际上,如果M(i,j)= v的最小值,则创建v这样的项目。
3)从M(i,j)中减去集合S中所有i,j的v,计算刚刚创建的项目生成的计数。