简介
设S1 = {e11, e12, e13,...,e1n}
S2={e21, e22, e23,...,e2i}
、S3={e31, e32, e33,...,e3j}
、S4 ={e41, e42, e43,...,e4k}
是维度为 n, i, j
和 k
的浮点元素的集合。
对于集合S1
,我们希望从S2
、S3
和S4
中选择元素 E 的随机子集。子集的维度应等于 10 x |S1|
。
问题
由于我从S2
、S3
和S4
中随机选择元素的子集。子集的所有元素都可能或概率仅从S4
或仅从S2
和S3
或仅从S2
中选择。
我们可以使用什么公式来满足以下约束:
- 子集的元素选自
S2
、S3
和S4
- 子集的维度等于 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, S3
和S4
中随机选择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);