【发布时间】:2021-12-20 14:51:33
【问题描述】:
我的目标是为编程练习实施测试。该练习需要一种方法来生成两个大写字母和三个数字的随机组合(按此顺序,例如:QF354)。组合必须是随机且不重复的。
如何测试方法是否正确实现?
我正在考虑生成一组样本并检查是否有任何重复值,但排列的数量太大(p = 26*26*10*10*10 = 676000),无法进行快速测试。
我不知道我的样本组应该有多大才能确认(至少有很高的信心)这些值是不重复的。也欢迎替代品。
【问题讨论】:
-
您可以应用与此处相同的技术stackoverflow.com/questions/2130621/…
-
@ArthurKlezovich 这似乎没有测试不重复?
-
您需要确定多少?查看Birthday problem 并自行计算样本量和概率之间的关系。
-
@OleV.V.我在 1980 年代与人合着了一篇论文,应用该概念来构建一个简单的 PRNG 独立性测试,该测试输出其整个状态(几乎是 1980 年代的所有 PRNG)。如果有
poolsize可能的值并且您没有看到3*sqrt(poolsize)的任何重复值,则非独立概率> 0.99。但是,这不能翻转以检查是否不会重复,因为cycle_length > 3*sqrt(poolsize)可能存在循环。您提到的计算假设独立且均匀分布的结果。 -
在 676000 种可能性中,您实际上要生成多少种?
标签: java testing random sample