這個工具的用途
「隨機撲克牌抽牌產生器」會從一副剛洗好的虛擬標準撲克牌中抽出一張或多張牌。你可以自行決定要抽幾張、是否自訂牌堆,以及每抽一張後是否將牌放回(放回抽樣)或抽出後擱在一旁(不放回抽樣)。無論是玩牌、課堂上的機率教學、變魔術、做決定,或任何需要公平、無偏隨機抽牌的場合,這個工具都很實用。
使用方式
輸入想抽的張數、選擇抽牌模式,並設定每列要顯示幾張牌。在「牌堆設定」中,你可以個別開關各種花色(梅花、方塊、紅心、黑桃)與點數(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。第 1 張牌的索引 $$\lfloor 0.0769 \times 52 \rfloor = 3$$ 第 2 張牌的索引 $$\lfloor 0.6442 \times 52 \rfloor = 33$$ 結果會是一組有順序的牌,例如「梅花 5」與「黑桃 9」,並以每列兩張的方式呈現。
常見問題
「放回」和「移除」有什麼差別?「放回」是放回抽樣(可能出現重複牌);「移除」則是不放回抽樣(每張牌都不重複,就像發一手牌一樣)。
我可以抽得比牌堆張數還多嗎?只有在「放回」模式下可以。在「移除」模式下,抽牌張數會被限制在牌堆大小以內,因為你不可能發出比實際存在更多的不重複牌。
鬼牌是怎麼處理的?鬼牌沒有花色,名稱就只是「鬼牌」。在「移除」模式下放入兩張鬼牌時,雖然兩張同名,但仍會被視為兩次不同的抽牌。