【问题标题】:Generate sets from given overlap matrix从给定的重叠矩阵生成集合
【发布时间】:2017-05-12 02:23:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 闻起来像作业,到目前为止你尝试过什么代码?
  • 对我来说毫无意义。也许你应该解释一下形容词“重叠”对你意味着什么以及为什么对角线元素是3
  • @NateDay 我自己编写了上述所有解释示例。首先我认为有一些算法可以解决这类问题,但我找不到任何类似的算法/方法,但相反。我之所以尝试这样做是因为我需要做的模拟需要生成多个相互共享一些变量的子集,并且引用了该重叠的分布。
  • @42- 为我的简短解释道歉。简单地说,这里的“重叠”是指彼此共享的元素数量。由于我在示例中假设 k=3 和 n=3,因此对角单元格都是 3,因为第 i 个组与其自身共享所有元素(因为 k=3)。
  • 到目前为止你尝试过什么代码?

标签: r algorithm matrix set overlap


【解决方案1】:

我将重复以下过程,直到计算完所有矩阵条目:

1) 把矩阵当作图的邻接矩阵,找出其中最大的团。也就是说,找到最大可能的索引集合 S 使得对于集合 S 中的所有 i, j M(i,j) > 0

2) 在所有与 S 中的索引对应的集合中创建一个项目 - 实际上,如果 M(i,j) = v 的最小值,则创建 v 个这样的项目。

3) 对集合 S 中的所有 i, j 从 M(i,j) 中减去 v,考虑到您刚刚创建的项目产生的计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2018-08-01
    相关资源
    最近更新 更多