这个工具能做什么
随机扑克牌生成器会从一副刚洗好的虚拟标准扑克牌中,为你抽取一张或多张牌。你可以自行决定抽几张牌、是否自定义牌堆,以及每抽一张牌后是放回牌堆(放回抽样)还是抽出后置于一旁(不放回抽样)。无论是玩牌、课堂上讲解概率、表演魔术、辅助做决定,还是任何需要公平、无偏随机抽牌的场合,它都能派上用场。
使用方法
输入要抽取的牌数,选择抽牌模式,并设定每行显示几张牌。在「牌堆设置」中,你可以单独开关各个花色(梅花、方块、红心、黑桃)和点数(2 到 A),还能加入 0、1 或 2 张大小王。最终参与抽牌的牌堆,由所有被同时勾选了点数和花色的牌组成,再加上选中的大小王。默认情况下,牌堆为完整的 52 张牌。
公式详解
牌堆是一个包含 \(N\) 张牌的列表。抽一张牌时,我们计算一个均匀分布的随机索引 $$i = \lfloor \text{random()} \times N \rfloor$$ 其中 \(\text{random()}\) 返回 \([0, 1)\) 区间内的一个实数。在「放回」模式下,每次抽牌都独立地从完整牌堆中进行,因此同一张牌可能被抽中多次。在「移除」模式下,我们运行 Fisher-Yates 洗牌算法——对于 \(k\) 从 \(N-1\) 递减到 \(1\),取 $$j = \lfloor \text{random()} \times (k+1) \rfloor,\quad D[k] \leftrightarrow D[j]$$ 并交换位置 \(k\) 与 \(j\)——然后取出最前面的若干张牌,从而保证不会出现重复。
实例演算
以默认的 52 张牌堆为例,在「放回」模式下抽 2 张牌:假设 \(\text{random()}\) 先后返回 \(0.0769\) 和 \(0.6442\)。第一张牌的索引 $$\lfloor 0.0769 \times 52 \rfloor = 3$$ 第二张牌的索引 $$\lfloor 0.6442 \times 52 \rfloor = 33$$ 结果是一对有序的牌,例如「梅花 5」和「黑桃 9」,并以每行两张的形式显示。
常见问题
「放回」和「移除」有什么区别?「放回」是放回抽样(可能抽到重复的牌);「移除」是不放回抽样(每张牌都不相同,就像发一手牌一样)。
能抽出比牌堆总数还多的牌吗?只有在「放回」模式下可以。在「移除」模式下,抽牌数量会被限制为牌堆大小,因为你无法发出比实际存在的牌更多的不同牌。
大小王是怎么处理的?大小王没有花色,名称就叫「Joker」。在「移除」模式下,如果有两张大小王,即便名称相同,它们也算作两次不同的抽牌。