如何从与另一个集合成比例的集合中随机选择定义的数字元素



简介

S1 = {e11, e12, e13,...,e1n} S2={e21, e22, e23,...,e2i}S3={e31, e32, e33,...,e3j}S4 ={e41, e42, e43,...,e4k}是维度为 n, i, jk浮点元素的集合。

对于集合S1,我们希望从S2S3S4中选择元素 E 的随机子集。子集的维度应等于 10 x |S1|

<小时 />

问题

由于我从S2S3S4随机选择元素的子集。子集的所有元素都可能或概率仅从S4或仅从S2S3或仅从S2中选择。

我们可以使用什么公式来满足以下约束:

  • 子集的元素选自S2S3S4
  • 子集的维度等于 S1 的 10 x 维度
  • 我们从每组中至少选择1个元素

我们还必须考虑到集合具有不同的维度。

<小时 />

S1 = {1.0, 2.0}
S2 = {4.0, 5.0, 6.0}
S3 = {7.0, 8.0, 9.0, 23.0, 24.0, 25.0, 26.0, 30.0, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0}
S4 = {10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0}

随机子集的大小为 10 x |S1| = 20 。我们必须从S2, S3S4中随机选择20元素。

<小时 />

联盟

S2 ∪ S3 ∪ S4 = {4.0, 5.0, 6.0, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 7.0, 8.0, 9.0, 23.0, 24.0, 25.0, 26.0, 30.0, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0}
|S2 ∪ S3 ∪ S4| = 30

如果我们从|S2 ∪ S3 ∪ S4|中随机选择 20 个元素,我们可能有机会选择 {4.0, 5.0, 6.0} .

你来了:

        Random random = new Random(DateTime.Now.Millisecond);
        HashSet<float> set1 = new HashSet<float>(...);
        HashSet<float> set2 = new HashSet<float>(...);
        HashSet<float> set3 = new HashSet<float>(...);
        HashSet<float> set4 = new HashSet<float>(...);
        set2.UnionWith(set3);
        set2.UnionWith(set4);
        IEnumerable<float> resultSet = set2.OrderBy(x => random.Next()).Take(set1.Count*10);

最新更新