15 - Calcolare davvero le probabilità delle mani di poker
26-08-2026
Probabilità e combinatoria nei giochi
MATH
26-08-2026
Probabilità e combinatoria nei giochi
Una delle applicazioni più note della combinatoria è il calcolo delle probabilità delle mani di poker.
Spesso si trovano percentuali già pronte:
coppia
doppia coppia
tris
scala
colore
full
poker
scala colore
ma limitarsi a memorizzarle significa perdere la parte più interessante.
Con gli strumenti costruiti negli articoli precedenti possiamo derivarle tutte, capire perché i conteggi funzionano e poi verificarli con un programma C# che enumera ogni possibile mano di cinque carte.
Useremo un mazzo standard da 52 carte senza jolly e mani di cinque carte nelle quali l'ordine non conta.
Il numero totale di mani di cinque carte è:
C(52,5)
=
2.598.960
Questo sarà il denominatore di tutte le probabilità.
Ogni categoria richiederà quindi la stessa struttura:
P(categoria)
=
numero di mani della categoria
-------------------------------
2.598.960
Il vero lavoro consiste nel costruire correttamente il numeratore.
Per evitare doppi conteggi useremo categorie standard che non si sovrappongono.
In particolare:
scala colore
comprende anche le quattro scale reali.
La categoria:
colore
indicherà un colore che non sia anche scala colore.
La categoria:
scala
indicherà una scala che non sia anche colore.
La scala reale verrà comunque calcolata separatamente come sottoinsieme interessante, ma non sarà sommata una seconda volta nel totale.
Con questa convenzione ogni mano appartiene a una e una sola categoria.
Una scala di cinque carte può avere dieci sequenze di valori:
A 2 3 4 5
2 3 4 5 6
3 4 5 6 7
...
9 10 J Q K
10 J Q K A
L'asso può quindi essere basso nella sequenza:
A 2 3 4 5
oppure alto nella:
10 J Q K A
Per ogni sequenza possiamo scegliere uno dei quattro semi.
Quindi:
10 · 4
=
40
mani di scala colore.
La probabilità è:
40 / 2.598.960
≈
0,001539%
Dentro queste 40 mani ci sono le quattro scale reali:
10 J Q K A
una per seme.
Quindi:
P(scala reale)
=
4 / 2.598.960
=
1 / 649.740
≈
0,0001539%
La scala reale è una sotto-categoria della scala colore, non una categoria aggiuntiva da sommare al totale.
Per un poker dobbiamo scegliere il valore delle quattro carte uguali.
Abbiamo:
13
possibili valori.
Una volta scelto il valore del poker, tutte e quattro le carte di quel valore sono obbligatorie.
Per la quinta carta, il kicker, possiamo scegliere una qualunque delle altre:
52 - 4
=
48
carte.
Quindi:
13 · 48
=
624
mani di poker.
La probabilità è:
624 / 2.598.960
≈
0,024010%
Un full contiene:
un tris
+
una coppia
Prima scegliamo il valore del tris:
13 modi
Poi scegliamo tre dei quattro semi disponibili per quel valore:
C(4,3)
=
4
Per la coppia dobbiamo scegliere un valore diverso:
12 modi
e due dei suoi quattro semi:
C(4,2)
=
6
Quindi:
13
·
C(4,3)
·
12
·
C(4,2)
ossia:
13 · 4 · 12 · 6
=
3.744
full.
La probabilità è:
3.744 / 2.598.960
≈
0,144058%
Un colore contiene cinque carte dello stesso seme.
Scegliamo il seme:
4 modi
e poi cinque valori tra i tredici disponibili:
C(13,5)
=
1.287
Questo produce:
4 · 1.287
=
5.148
mani dello stesso seme.
Ma tra queste sono comprese anche le:
40
scale colore.
Se vogliamo una categoria "colore" mutuamente esclusiva dalla scala colore dobbiamo sottrarle:
5.148 - 40
=
5.108
Quindi:
P(colore)
=
5.108 / 2.598.960
≈
0,196540%
Questo è un esempio diretto di inclusione-esclusione applicata alla classificazione delle mani.
Una scala può avere dieci sequenze di valori.
Per ciascuno dei cinque valori possiamo scegliere liberamente uno dei quattro semi:
4^5
=
1.024
Quindi inizialmente abbiamo:
10 · 4^5
=
10.240
mani con valori consecutivi.
Ma tra queste ci sono le 40 scale colore, che devono appartenere alla categoria superiore.
Quindi:
10.240 - 40
=
10.200
scale non colore.
La probabilità è:
10.200 / 2.598.960
≈
0,392465%
Per un tris scegliamo il valore triplo:
13 modi
Poi tre dei quattro semi:
C(4,3)
=
4
Le altre due carte devono avere valori:
diversi dal tris
e:
diversi tra loro
altrimenti produrremmo un full.
Scegliamo quindi due valori tra i dodici rimanenti:
C(12,2)
=
66
Per ciascuno dei due valori scegliamo uno dei quattro semi:
4^2
=
16
Quindi:
13
·
C(4,3)
·
C(12,2)
·
4^2
ossia:
13 · 4 · 66 · 16
=
54.912
mani di tris.
La probabilità è:
54.912 / 2.598.960
≈
2,112845%
Per una doppia coppia dobbiamo prima scegliere i due valori che formeranno le coppie:
C(13,2)
=
78
Per ciascun valore scegliamo due semi tra quattro:
$$ \binom{4}{2} $$
quindi:
C(4,2)^2
=
36
possibilità per costruire le due coppie.
Rimane il kicker.
Il suo valore deve essere diverso dai due già usati:
11
possibili valori.
Per quel valore possiamo scegliere uno dei quattro semi:
4
Quindi:
C(13,2)
·
C(4,2)^2
·
11
·
4
ossia:
78 · 36 · 44
=
123.552
mani di doppia coppia.
La probabilità è:
123.552 / 2.598.960
≈
4,753902%
Per una sola coppia scegliamo il valore della coppia:
13 modi
e due dei quattro semi:
C(4,2)
=
6
Le altre tre carte devono avere tre valori:
diversi dal valore della coppia
e:
tutti diversi tra loro
altrimenti avremmo doppia coppia, tris, full o poker.
Scegliamo quindi tre valori tra i dodici rimasti:
C(12,3)
=
220
Per ciascuno scegliamo uno dei quattro semi:
4^3
=
64
Il conteggio è:
13
·
C(4,2)
·
C(12,3)
·
4^3
ossia:
13 · 6 · 220 · 64
=
1.098.240
mani con una coppia.
La probabilità è:
1.098.240 / 2.598.960
≈
42,256903%
La categoria "carta alta" richiede più attenzione.
Dobbiamo avere:
cinque valori distinti
che non formino una scala e i semi non devono formare un colore.
Prima scegliamo cinque valori tra tredici:
C(13,5)
=
1.287
Ma dieci insiemi di valori formano una scala.
Quindi gli insiemi di valori ammessi sono:
1.287 - 10
=
1.277
Per ciascun insieme di cinque valori possiamo assegnare i semi in:
4^5
=
1.024
modi.
Tra questi, quattro assegnazioni mettono tutte le carte nello stesso seme:
tutti cuori
tutti quadri
tutti fiori
tutti picche
e sarebbero colori.
Quindi le assegnazioni di semi ammesse sono:
4^5 - 4
=
1.020
Il conteggio finale è:
$$ \begin{gathered} (\binom{13}{5}-10) \ \cdot \ (4^5-4) \end{gathered} $$
ossia:
1.277 · 1.020
=
1.302.540
mani di carta alta.
La probabilità è:
1.302.540 / 2.598.960
≈
50,117739%
È quindi la singola categoria più frequente.
Le categorie mutuamente esclusive che abbiamo contato sono:
| Categoria | Mani | Probabilità |
|---|---|---|
| Scala colore | 40 | $\approx 0{,}001539%$ |
| Poker | 624 | $\approx 0{,}024010%$ |
| Full | 3.744 | $\approx 0{,}144058%$ |
| Colore | 5.108 | $\approx 0{,}196540%$ |
| Scala | 10.200 | $\approx 0{,}392465%$ |
| Tris | 54.912 | $\approx 2{,}112845%$ |
| Doppia coppia | 123.552 | $\approx 4{,}753902%$ |
| Coppia | 1.098.240 | $\approx 42{,}256903%$ |
| Carta alta | 1.302.540 | $\approx 50{,}117739%$ |
| Totale | 2.598.960 | $100%$ |
Sommandole:
40
+ 624
+ 3.744
+ 5.108
+ 10.200
+ 54.912
+ 123.552
+ 1.098.240
+ 1.302.540
=
2.598.960
esattamente:
$$ \binom{52}{5} $$
Questo controllo è essenziale.
Se la somma fosse diversa, significherebbe che abbiamo:
dimenticato alcune mani
oppure:
contato due volte alcune categorie
Dividendo ogni conteggio per:
2.598.960
otteniamo:
Le probabilità sono già riportate nella tabella precedente insieme ai conteggi, così il confronto tra frequenza assoluta e probabilità resta nello stesso punto.
La scala reale, ricordiamolo, è un sottoinsieme della scala colore:
4 mani
≈
0,0001539%
Quando programmeremo il classificatore dovremo considerare:
A 2 3 4 5
come scala.
Se rappresentiamo l'asso soltanto come valore:
14
la sequenza numerica:
14, 2, 3, 4, 5
non appare consecutiva.
Il classificatore deve quindi gestire esplicitamente il caso "wheel":
A 2 3 4 5
oltre alle normali sequenze consecutive.
È un esempio utile di differenza tra la semplicità di una formula matematica e i dettagli necessari in un'implementazione corretta.
Lo standalone C# associato a questo articolo è:
ProbabilitaManiPoker.cs
Il numero totale:
2.598.960
è abbastanza piccolo da permettere un'enumerazione completa.
Non abbiamo bisogno di Monte Carlo.
Possiamo costruire un mazzo di 52 carte e generare tutte le combinazioni:
$$ a < b < c < d < e $$
In questo modo ogni mano viene visitata una sola volta.
Il classificatore assegna poi la mano a una delle nove categorie.
readonly record struct Carta(
int Valore,
int Seme);
Useremo:
Valore:
2 ... 14
con:
14 = Asso
e:
Seme:
0 ... 3
Il seme non ha bisogno di un significato particolare per il classificatore: ci basta sapere se cinque carte hanno lo stesso valore di Seme.
Possiamo contare quante volte compare ogni valore e ogni seme.
Una mano è:
scala colore
se è contemporaneamente scala e colore.
Poi controlliamo, in ordine:
poker
full
colore
scala
tris
doppia coppia
coppia
carta alta
L'ordine è importante.
Se controllassimo prima:
colore
una scala colore verrebbe classificata troppo presto come semplice colore.
Se controllassimo:
tris
prima del full, una mano con 3+2 potrebbe essere etichettata soltanto come tris.
La classificazione deve quindi rispettare la gerarchia delle categorie.
Il file di esempio allegato contiene il classificatore completo.
La logica centrale può essere riassunta così:
if (scala && colore)
return CategoriaMano.ScalaColore;
if (poker)
return CategoriaMano.Poker;
if (tris && coppia)
return CategoriaMano.Full;
if (colore)
return CategoriaMano.Colore;
if (scala)
return CategoriaMano.Scala;
if (tris)
return CategoriaMano.Tris;
if (numeroCoppie == 2)
return CategoriaMano.DoppiaCoppia;
if (numeroCoppie == 1)
return CategoriaMano.Coppia;
return CategoriaMano.CartaAlta;
Generiamo il mazzo:
var mazzo = new List<Carta>();
for (int valore = 2; valore <= 14; valore++)
{
for (int seme = 0; seme < 4; seme++)
{
mazzo.Add(
new Carta(
valore,
seme));
}
}
Poi enumeriamo ogni combinazione di cinque indici:
for (int a = 0; a < 48; a++)
for (int b = a + 1; b < 49; b++)
for (int c = b + 1; c < 50; c++)
for (int d = c + 1; d < 51; d++)
for (int e = d + 1; e < 52; e++)
{
// classifica la mano
}
Il totale deve essere:
2.598.960
Se il classificatore è corretto, l'enumerazione deve produrre esattamente:
ScalaColore = 40
Poker = 624
Full = 3.744
Colore = 5.108
Scala = 10.200
Tris = 54.912
DoppiaCoppia = 123.552
Coppia = 1.098.240
CartaAlta = 1.302.540
e:
Totale
=
2.598.960
Possiamo contare anche le scale reali separatamente come controllo:
Scala reale
=
4
ma senza sottrarle o aggiungerle di nuovo alle categorie principali.
A questo punto abbiamo due percorsi completamente indipendenti.
Il primo usa formule combinatorie:
C(13,2)
C(4,2)
4^3
...
Il secondo visita realmente tutte le mani e le classifica.
Se entrambi producono gli stessi nove conteggi e la somma vale C(52,5), abbiamo una verifica molto forte.
Non stiamo usando una simulazione statistica.
Stiamo confrontando:
calcolo esatto
con:
enumerazione esatta
Potremmo simulare milioni di mani casuali e stimare le frequenze.
Per categorie comuni come:
coppia
la stima convergerebbe abbastanza rapidamente.
Ma per una scala colore, che compare soltanto in:
40
mani su oltre 2,5 milioni, la stima sarebbe molto più rumorosa.
E soprattutto non ne abbiamo bisogno.
Lo spazio completo è abbastanza piccolo da poter essere contato direttamente.
Monte Carlo diventa interessante quando l'enumerazione esatta è troppo costosa o quando il modello diventa più complesso.
Questo sarà particolarmente rilevante quando passeremo a giochi con carte comuni, decisioni e stati intermedi.
Le probabilità delle mani di poker non sono una lista di numeri da memorizzare.
Derivano tutte dalla stessa struttura:
P(categoria)
=
mani favorevoli
---------------
C(52,5)
Il denominatore è sempre:
C(52,5)
=
2.598.960
e il numeratore nasce traducendo con precisione la definizione della categoria in scelte combinatorie.
Il controllo finale:
40
+ 624
+ 3.744
+ 5.108
+ 10.200
+ 54.912
+ 123.552
+ 1.098.240
+ 1.302.540
=
2.598.960
dimostra che le categorie utilizzate coprono tutto lo spazio senza sovrapporsi.
Il programma C# può poi enumerare tutte le mani e verificare gli stessi conteggi uno per uno.
Nel prossimo articolo passeremo al Texas Hold'em.
Lì il problema non sarà più classificare una mano completa già nota, ma aggiornare le probabilità quando conosciamo alcune carte e ne devono ancora arrivare altre.
Partiremo dal concetto pratico di out, distinguendo il calcolo esatto della probabilità al turn, al river e entro il river dalle scorciatoie approssimate usate spesso al tavolo.