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

时间:2016-03-10 14:58:10

标签: algorithm random random-sample

简介

S1 = {e11, e12, e13,...,e1n} S2={e21, e22, e23,...,e2i}S3={e31, e32, e33,...,e3j}S4 ={e41, e42, e43,...,e4k}为维度n, i, j和{{1}的 float 元素集}。

对于集合k,我们要从S1S2S3中选择 E 的随机子集。子集的维度应该等于S4

问题

由于我随机10 x |S1|S2S3中选择元素的子集。只有S4 才能从S4S2 或中选择子集的所有元素的可能性或概率strong>来自S3

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

  • 子集的元素选自S2S2S3
  • 子集的维度等于 X x维度
  • 我们从每个集合中选择至少 1 元素

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

实施例

S4

随机子集的大小为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| = 2020中随机选择S2, S3个元素。

联盟

S4

如果我们从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 中随机选择 20 元素,我们可能会选择|S2 ∪ S3 ∪ S4|

1 个答案:

答案 0 :(得分:1)

你走了:

        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);