SUPERCAT.DEV

Benvenut* sul mio blog

MATH

04 - 52! mazzi diversi: capire fattoriale e permutazioni

15-08-2026

Probabilità e combinatoria nei giochi

Prendiamo un mazzo di carte e immaginiamo di mescolarlo perfettamente.

Quanti ordinamenti diversi può assumere?

La risposta è:

$$ 52! $$

che si legge "52 fattoriale".

Scritta così, però, la formula non spiega quasi nulla. Per capire perché compare un fattoriale conviene dimenticare per un momento il mazzo completo e iniziare con qualcosa che possiamo ancora contare a mano.

Tre carte sul tavolo

Prendiamo tre carte distinte:

A♠
K♥
7♣

Vogliamo disporle tutte in fila.

Per la prima posizione possiamo scegliere una qualsiasi delle tre carte:

3 possibilità

Dopo averne scelta una ne rimangono due per la seconda posizione:

2 possibilità

Scelta anche la seconda, l'ultima posizione è obbligata:

1 possibilità

Per il principio del prodotto introdotto con i due dadi:

$$ 3 \cdot 2 \cdot 1 = 6 $$

Gli ordinamenti sono infatti:

A♠ K♥ 7♣
A♠ 7♣ K♥
K♥ A♠ 7♣
K♥ 7♣ A♠
7♣ A♠ K♥
7♣ K♥ A♠

Abbiamo appena calcolato una permutazione.

In questa serie useremo il termine nel senso classico della combinatoria italiana: una permutazione è un ordinamento di tutti gli elementi disponibili.

Da dove nasce il fattoriale

Con quattro carte distinte avremmo:

$$ 4 \cdot 3 \cdot 2 \cdot 1 = 24 $$

Con cinque:

$$ 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 120 $$

Questa moltiplicazione ricorre così spesso che possiede una notazione specifica.

Per un intero positivo n:

$$ n! = n \cdot (n-1) \cdot (n-2) \cdot ... \cdot 2 \cdot 1 $$

Quindi:

$$ \begin{gathered} 3! = 6 \ 4! = 24 \ 5! = 120 \end{gathered} $$

Il fattoriale non è una formula arrivata dall'esterno. È semplicemente il principio del prodotto applicato a una sequenza di scelte nella quale, a ogni posizione occupata, rimane un elemento in meno.

Per questo compare naturalmente quando dobbiamo ordinare tutti gli elementi distinti senza ripetizione.

Perché l'ordine conta

Supponiamo di avere le stesse cinque carte.

Queste due sequenze:

A♠ K♥ Q♦ J♣ 10♠

e:

10♠ J♣ Q♦ K♥ A♠

contengono esattamente le stesse carte, ma come ordinamenti del mazzo sono due risultati diversi.

La parola importante è proprio ordinamento.

Se invece ci interessasse soltanto sapere quali cinque carte abbiamo ricevuto in una mano di poker, senza considerarne l'ordine, non dovremmo contare tutte queste permutazioni come risultati differenti.

Quello sarà il problema delle combinazioni, che incontreremo più avanti.

Per ora stiamo rispondendo a una domanda precisa:

In quanti modi posso ordinare tutti gli elementi distinti che possiedo?

La risposta è:

$$ n! $$

Arriviamo a un mazzo vero

Un mazzo standard senza jolly contiene 52 carte distinte.

Per scegliere la carta in prima posizione abbiamo:

52 possibilità

Per la seconda:

51

Per la terza:

50

e così via fino all'ultima.

Il numero totale di ordinamenti è quindi:

$$ 52 \cdot 51 \cdot 50 \cdot ... \cdot 2 \cdot 1 $$

ossia:

$$ 52! $$

Il valore esatto è:

80658175170943878571660636856403766975289505440883277824000000000000

circa:

$$ 8,07 \cdot 10^{67} $$

È un numero di 68 cifre.

La crescita è così rapida perché ogni nuova carta non aggiunge semplicemente qualche possibilità: moltiplica tutti gli ordinamenti precedenti per il numero di posizioni nelle quali può essere inserita.

Cinque carte fanno già 120 ordinamenti

La crescita del fattoriale si vede anche senza arrivare a 52:

1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
10! = 3.628.800

Aggiungere una sesta carta a cinque carte già ordinabili in 120 modi significa poter inserire quella nuova carta in sei posizioni differenti per ciascun ordinamento:

$$ 6! = 6 \cdot 5! = 720 $$

In generale:

$$ n! = n \cdot (n-1)! $$

Questa relazione ricorsiva è una conseguenza diretta del significato combinatorio del fattoriale.

Un caso particolare importante: 0!

Per convenzione matematica:

$$ 0! = 1 $$

A prima vista può sembrare strano, perché non c'è nulla da moltiplicare.

Dal punto di vista combinatorio, però, ha perfettamente senso.

In quanti modi possiamo ordinare zero elementi?

C'è un solo ordinamento possibile: non mettere nulla.

Questa scelta rende inoltre coerente la relazione:

$$ 1! = 1 \cdot 0! $$

dato che:

$$ 1 = 1 \cdot 1 $$

0! = 1 tornerà utile quando le formule combinatorie diventeranno più generali.

Dalle permutazioni alla probabilità

Ora colleghiamo il conteggio alla probabilità.

Supponiamo di mescolare idealmente tre carte in modo che tutti i loro ordinamenti siano equiprobabili.

Abbiamo visto che esistono:

$$ 3! = 6 $$

permutazioni.

La probabilità di ottenere un particolare ordine deciso in anticipo, per esempio:

A♠ K♥ 7♣

è quindi:

$$ 1/6 $$

Con cinque carte:

P(un particolare ordine)
=
1/5!
=
1/120

Con un mazzo completo, assumendo un mescolamento ideale nel quale tutte le permutazioni siano equiprobabili:

P(un particolare ordine)
=
1/52!

cioè circa:

$$ 1,24 \cdot 10^{-68} $$

Questa è esattamente la connessione che useremo per tutta la serie:

conteggio degli esiti possibili
        ↓
probabilità

Il fattoriale non serve quindi soltanto a dire che il numero di mazzi possibili è enorme. Ci fornisce direttamente il denominatore dello spazio campionario quando ogni ordinamento completo è equiprobabile.

"Un particolare ordine" deve essere deciso prima

Qui serve una precisazione importante.

Dopo aver mescolato un mazzo possiamo guardare la sequenza ottenuta e dire:

Che incredibile coincidenza: è uscita proprio questa!

Ma qualunque ordinamento sarebbe stato altrettanto specifico dopo averlo osservato.

La probabilità:

$$ 1/52! $$

ha senso quando l'evento è definito prima del mescolamento, per esempio:

il mazzo finirà esattamente
nell'ordine che ho scritto su questo foglio

Non è sorprendente che dopo il mescolamento esista un ordinamento preciso: il mazzo deve pur assumere uno dei 52! ordinamenti.

Sarebbe sorprendente prevedere in anticipo proprio quello corretto.

Questa distinzione tra un evento definito prima dell'esperimento e una proprietà notata dopo l'osservazione è importante ben oltre le carte.

Un mescolamento reale è davvero uniforme?

Nel modello matematico appena usato abbiamo assunto che ogni permutazione del mazzo abbia la stessa probabilità:

$$ 1/52! $$

Questa è un'ipotesi del modello.

Un mescolamento fisico mal eseguito può lasciare correlazioni tra le posizioni delle carte e quindi non produrre tutte le permutazioni con la stessa probabilità.

Anche un algoritmo software può essere sbagliato e favorire alcuni ordinamenti.

Quando in probabilità diciamo "mazzo ben mescolato", stiamo quindi assumendo idealmente una distribuzione uniforme sulle permutazioni, oppure un'approssimazione sufficientemente buona per il problema che stiamo studiando.

È lo stesso principio incontrato con il dado equo: prima di usare:

casi favorevoli / casi possibili

dobbiamo giustificare l'equiprobabilità degli esiti che stiamo contando.

Calcoliamo il fattoriale in C#

Lo standalone C# associato a questo articolo è:

PermutazioniMazzo.cs

Per valori piccoli possiamo scrivere:

static long Fattoriale(int n)
{
    if (n < 0)
        throw new ArgumentOutOfRangeException(nameof(n));

    long risultato = 1;

    for (int i = 2; i <= n; i++)
        risultato *= i;

    return risultato;
}

Questo funziona soltanto fino a un certo punto.

Un long C# può contenere al massimo:

9.223.372.036.854.775.807

e:

$$ 20! = 2.432.902.008.176.640.000 $$

rientra ancora nel limite.

Ma:

$$ 21! = 51.090.942.171.709.440.000 $$

è già troppo grande.

Per 52! serve quindi un tipo intero a precisione arbitraria.

BigInteger per i conteggi esatti

.NET mette a disposizione:

System.Numerics.BigInteger

che può rappresentare interi molto più grandi dei tipi primitivi, limitati essenzialmente dalla memoria disponibile.

using System.Numerics;

static BigInteger Fattoriale(int n)
{
    if (n < 0)
        throw new ArgumentOutOfRangeException(nameof(n));

    BigInteger risultato = BigInteger.One;

    for (int i = 2; i <= n; i++)
        risultato *= i;

    return risultato;
}

BigInteger ordinamenti = Fattoriale(52);

Console.WriteLine(ordinamenti);

Il risultato è esatto:

80658175170943878571660636856403766975289505440883277824000000000000

Questo è il motivo per cui nella serie useremo BigInteger per i conteggi combinatori: non abbiamo bisogno di approssimare il numero di casi possibili prima ancora di calcolare la probabilità.

Separare conteggio esatto e probabilità approssimata

Il numero di permutazioni può rimanere un intero esatto:

BigInteger ordinamenti = Fattoriale(52);

Quando vogliamo rappresentare la probabilità in forma decimale possiamo invece convertirla in un tipo floating-point:

double probabilita =
    1.0 / (double)ordinamenti;

Console.WriteLine($"{probabilita:E6}");

Otteniamo circa:

1,239800E-068

La distinzione è utile.

Il conteggio:

$$ 52! $$

è matematicamente esatto.

La scrittura:

$$ 1,239800 \cdot 10^{-68} $$

è una rappresentazione numerica approssimata della probabilità:

$$ 1/52! $$

Quando possibile conserveremo quindi frazioni e conteggi esatti fino all'ultimo passaggio.

Possiamo verificare il ragionamento enumerando un piccolo mazzo

Per 52 carte non avrebbe senso generare tutte le permutazioni.

Con tre carte, invece, possiamo farlo facilmente.

static void Permuta(
    string[] carte,
    int posizione)
{
    if (posizione == carte.Length)
    {
        Console.WriteLine(
            string.Join(" ", carte));

        return;
    }

    for (int i = posizione; i < carte.Length; i++)
    {
        (carte[posizione], carte[i]) =
            (carte[i], carte[posizione]);

        Permuta(carte, posizione + 1);

        (carte[posizione], carte[i]) =
            (carte[i], carte[posizione]);
    }
}

string[] carte =
{
    "A♠",
    "K♥",
    "7♣"
};

Permuta(carte, 0);

Il programma stampa esattamente:

6

ordinamenti differenti.

Per quattro carte ne produrrebbe:

24

e per cinque:

120

Questo permette di verificare sperimentalmente la formula sui casi piccoli.

Ma provare lo stesso metodo con 52 carte sarebbe completamente impraticabile: sapere che esistono 52! permutazioni non significa doverle materializzare per contarle.

La formula combinatoria serve proprio a evitare l'enumerazione quando lo spazio diventa enorme.

Formula ed enumerazione sono due strategie diverse

Nei primi articoli abbiamo enumerato 6 esiti di un dado e 36 coppie di due dadi.

Lì era naturale visitare tutto lo spazio campionario.

Con le permutazioni compare invece una nuova situazione: il numero degli esiti cresce così velocemente che l'enumerazione completa smette presto di essere uno strumento pratico.

Per cinque elementi:

120

è ancora poco.

Per dieci:

3.628.800

è già molto di più.

Per 52:

circa 8 · 10^67

l'enumerazione non è una strategia realistica.

Il salto importante della combinatoria è proprio questo: contare senza generare.

Non tutte le domande sulle carte richiedono 52!

Supponiamo che non ci interessi l'ordine completo del mazzo, ma soltanto le prime tre carte.

In quel caso usare:

$$ 52! $$

come numero dei risultati direttamente rilevanti sarebbe possibile soltanto costruendo un modello molto più grande del necessario.

Dopo aver scelto la prima carta restano 51 possibilità, e dopo la seconda ne restano 50.

Quindi il conteggio naturale inizierà con:

$$ 52 \cdot 51 \cdot 50 $$

Non stiamo più permutando tutte le 52 carte: stiamo scegliendo e ordinando soltanto una parte degli elementi.

Questo sarà esattamente il problema del prossimo articolo e ci porterà alle disposizioni.

Il punto pratico

Il fattoriale nasce da una domanda semplicissima:

In quanti modi posso ordinare tutti i miei elementi distinti?

Per n elementi, la prima posizione offre n scelte, la seconda n-1, poi n-2 e così via:

$$ n! = n \cdot (n-1) \cdot ... \cdot 2 \cdot 1 $$

Per un mazzo standard:

52!
=
80658175170943878571660636856403766975289505440883277824000000000000

permutazioni.

Se assumiamo un mescolamento ideale uniforme, ciascun ordinamento completo ha probabilità:

$$ 1/52! $$

Quindi abbiamo fatto il primo vero passo dalla combinatoria alla probabilità delle carte: contare gli ordinamenti ci permette di costruire lo spazio campionario senza enumerarlo.

Ma non sempre vogliamo ordinare tutto il mazzo.

Nel prossimo articolo prenderemo soltanto tre carte dalle 52 e manterremo conto dell'ordine. Il fattoriale resterà sullo sfondo, ma il conteggio diventerà:

$$ 52 \cdot 51 \cdot 50 $$

e da lì nascerà il concetto di disposizione.