从给定的重叠矩阵生成集合

时间:2017-05-12 02:23:10

标签: r algorithm matrix set overlap

注意:我编辑了原始问题以便更准确地解释。

当我为我的新方法进行模拟时,我需要生成一个由多个子集组成的特殊类型的数据集。问题是子集中存在一些“共享”变量,共享变量的数量在这里称为“重叠”。由于给出了重叠比例的分布,我需要生成一个适当的变量列表,它们的重叠遵循给定的分布。但是我没有实现这样的算法...

我不确定是否有针对此类问题的特定算法, 但经过长时间的搜索,我找不到这样的东西。

我更喜欢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)因为每个集合都与自己共享所有元素。

1 个答案:

答案 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,计算刚刚创建的项目生成的计数。