繁体   English   中英

从未知集中进行采样而不进行替换

[英]Sampling without replacement from an unknown set

我必须从我称为S的一组DFA中统一提取DFA(确定性有限自动机)。 这似乎是一个简单的问题,但我没有设置S。 S包含维度n的所有DFA,因此我知道S的维度,我可以构建S,但由于非常大而不能。 我也知道集合Sm的维数,例如S3S的子集,S3包含具有3个状态的所有DFA, Sm包含具有m个状态的所有DFA,其中m <n。

我没有集合S ,因此必须模拟均匀采样。 此外,我必须进行采样而无需更换。 我创建一个集合D = {1,2,3 ........ n},对于每个值,我称i ,在D中将值| Si | / | S |关联起来 在哪里 | 指示作为参数的集合中元素的数量。 即我创建了一个发行版。 现在,我可以根据这种分布从D中提取一个值。 这样,我找到了从中提取单个DFA的集合。 例如,如果从DI提取4中提取,则必须从S4中均匀提取DFA。

但是我的问题是,如何在不更换的情况下从Si (上例中为S4 )采样DFA? 也就是说,如果我之前已经提取了特定的DFA,则在下一次采样中,我必须避免使用该特定的DFA。 请注意,DFA是矩阵,表格(二维数组)。 还请注意,提取特定的DFA意味着对上述表格的每个单元格统一提取{1,.....,k}中的一个值,其中k是字母表中元素的数量(对于每个州是否接受或拒绝)。

(我必须在C ++ 11中实现,但这是无关紧要的)

如果我正确理解您的问题,那么简单的解决方案是保留每个采样的DFA,并在生成新的随机DFA时-检查它是否之前已生成。 我想您的问题是将它们全部存储所需的大量内存。

如果是这样,则可以只保留每个DFA的哈希(例如128位MurmurHash3),然后将新生成的DFA的哈希与存储的哈希进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM