Quante volte capita di leggere un problema di probabilità o calcolo combinatorio e non sapere letteralmente da che parte iniziare?
La teoria sembra chiara finché non ci si scontra con la realtà: vincoli, eccezioni, condizioni sull’ordine e casi particolari.
A quel punto la tentazione è cercare nel libro la formula che “assomiglia” di più al problema.
Ma spesso è proprio questo il modo più rapido per sbagliare.
In questo articolo vediamo tre problemi concreti e apparentemente diversi. In tutti e tre, però, la soluzione nasce dallo stesso approccio:
- capire se l’ordine conta;
- individuare i vincoli;
- cercare un modo più semplice di rappresentarli;
- valutare se il complemento è più facile da contare;
- scomporre il problema in fasi;
- solo alla fine scegliere la formula.
La domanda fondamentale, quindi, non è:
“Quale formula devo usare?”
ma:
“Che cosa sto realmente contando?”
Esercizio 1 – Il codice di accesso dinamico
Il problema
Un’azienda di cybersecurity sta sviluppando un sistema di autenticazione a due fattori.
La prima fase prevede la generazione di un codice PIN di 6 cifre, da 0 a 9, con queste restrizioni:
- la prima cifra non può essere 0;
- le cifre non possono ripetersi.
La seconda fase prevede l’inserimento di una password composta da 3 lettere minuscole, da a a z, tutte diverse tra loro e in ordine alfabetico.
Quanti accoppiamenti (PIN, password) sono possibili?
1. Contiamo il PIN
Dobbiamo costruire una sequenza ordinata di 6 cifre distinte.
La prima posizione è particolare: non può contenere 0.
Perciò partiamo proprio dal vincolo più forte.
Prima cifra
Abbiamo 9 possibilità:
[math]\displaystyle 1,2,3,\ldots,9[/math]
Seconda cifra
A questo punto rimangono 9 cifre disponibili, compreso lo 0.
Terza cifra
Ne rimangono 8.
E così via.
Otteniamo:
[math]\displaystyle 9\cdot9\cdot8\cdot7\cdot6\cdot5[/math]
quindi:
[math]\boxed{136080}[/math]
PIN validi.
Il punto importante non è soltanto il risultato.
Abbiamo riconosciuto che:
- l’ordine conta;
- non sono ammesse ripetizioni;
- la prima posizione ha un vincolo particolare.
Non serve quindi cercare una formula a memoria: possiamo costruire il conteggio posizione per posizione.
2. Contiamo la password
Ora dobbiamo scegliere 3 lettere diverse tra 26.
Ma c’è un vincolo particolare:
devono essere in ordine alfabetico.
Supponiamo di scegliere:
[math]\displaystyle a, m, z[/math]
La password valida è necessariamente:
[math]\displaystyle amz[/math]
Non possiamo avere:
[math]\displaystyle zam[/math]
oppure:
[math]\displaystyle maz[/math]
perché l’ordine alfabetico è già imposto.
Quindi non dobbiamo contare tutti gli ordinamenti delle tre lettere.
Dobbiamo semplicemente scegliere quali 3 lettere utilizzare:
[math]\displaystyle \binom{26}{3} = \frac{26\cdot25\cdot24}{3\cdot2\cdot1} = 2600[/math]
Le password possibili sono quindi:
[math]\boxed{2600}[/math]
3. Uniamo le due fasi
Abbiamo:
[math]\displaystyle 136080[/math]
PIN possibili e, per ciascun PIN, possiamo associare una delle:
[math]\displaystyle 2600[/math]
password.
Il principio fondamentale del conteggio ci permette quindi di moltiplicare:
[math]\displaystyle 136080\cdot2600 = 353808000[/math]
Pertanto gli accoppiamenti possibili sono:
[math]\boxed{353808000}[/math]
Verifica con Python
Possiamo verificare il risultato generando esplicitamente tutte le configurazioni.
from itertools import permutations, combinations
from math import comb
# ============================================================
# FASE 1 – PIN
# 6 cifre distinte, prima cifra diversa da 0
# ============================================================
cifre = list(range(10))
pin_validi = [
pin
for pin in permutations(cifre, 6)
if pin[0] != 0
]
n_pin = len(pin_validi)
n_pin_analitico = 9 * 9 * 8 * 7 * 6 * 5
print(f"PIN validi (verifica esaustiva): {n_pin:,}")
print(f"PIN analitici: {n_pin_analitico:,}")
assert n_pin == n_pin_analitico
print("OK: conteggio verificato\n")
# ============================================================
# FASE 2 – Password
# 3 lettere diverse, in ordine alfabetico
# ============================================================
lettere = [
chr(c)
for c in range(ord('a'), ord('z') + 1)
]
password_valide = list(combinations(lettere, 3))
n_pwd = len(password_valide)
n_pwd_analitico = comb(26, 3)
print(f"Password valide (verifica esaustiva): {n_pwd:,}")
print(f"Password analitiche: {n_pwd_analitico:,}")
assert n_pwd == n_pwd_analitico
print("OK: conteggio verificato\n")
# ============================================================
# FASE 3 – Principio di moltiplicazione
# ============================================================
totale = n_pin * n_pwd
print(f"Accoppiamenti totali: {totale:,}")
Output:
PIN validi (verifica esaustiva): 136,080
PIN analitici: 136,080
OK: conteggio verificato
Password valide (verifica esaustiva): 2,600
Password analitiche: 2,600
OK: conteggio verificato
Accoppiamenti totali: 353,808,000
Qui permutations() rappresenta correttamente il PIN, perché l’ordine delle cifre conta.
combinations() rappresenta invece la password, perché una volta scelte le tre lettere, l’ordine alfabetico determina automaticamente la sequenza.
Generare tutto non significa necessariamente calcolare meglio
Possiamo modificare il programma evitando di generare PIN che iniziano con 0.
from itertools import permutations
pin_validi = []
for prima in range(1, 10):
cifre_rimanenti = [
c for c in range(10)
if c != prima
]
for resto in permutations(cifre_rimanenti, 5):
pin_validi.append((prima,) + resto)
print(f"PIN validi: {len(pin_validi):,}")
Il risultato è ancora:
PIN validi: 136,080
Questa versione genera soltanto configurazioni valide.
La prima strategia, invece, genera tutte le:
[math]\displaystyle 10P6 = 10\cdot9\cdot8\cdot7\cdot6\cdot5 = 151200[/math]
permutazioni e poi elimina quelle che iniziano con 0.
In termini matematici, la seconda strategia sembra quindi più efficiente.
Ma c’è una lezione interessante da imparare.
Meno configurazioni non significa automaticamente meno tempo
In Python, il tempo di esecuzione dipende anche da come vengono generate ed elaborate le configurazioni.
itertools.permutations() è implementato in codice altamente ottimizzato, mentre un ciclo Python con più operazioni esplicite introduce un certo overhead.
Perciò un benchmark può mostrare, in una particolare versione di Python e su una particolare macchina, che un algoritmo che genera meno candidati sia addirittura più lento.
Questo non contraddice la matematica.
Significa semplicemente che dobbiamo distinguere due livelli:
livello matematico
Qual è lo spazio delle soluzioni?
livello algoritmico
Come esploro quello spazio con il minor costo computazionale?
E c’è una lezione ancora più importante:
Se il problema matematico ci permette di calcolare direttamente il risultato, spesso è inutile generare tutte le configurazioni.
Per il PIN, infatti, possiamo ottenere direttamente:
[math]\displaystyle 9\cdot9\cdot8\cdot7\cdot6\cdot5[/math]
senza costruire neppure una lista.
Una nota sulla sicurezza
L’esempio della password è utile per il conteggio combinatorio, ma dal punto di vista della cybersecurity il vincolo “ordine alfabetico” avrebbe conseguenze negative.
Riducendo fortemente lo spazio delle configurazioni possibili, renderebbe il sistema più prevedibile.
Quindi è importante distinguere:
uno spazio combinatorio valido matematicamente
da
uno schema di autenticazione realmente sicuro.
La combinatoria ci dice quante configurazioni esistono; non ci dice automaticamente quanto sia sicuro il sistema che le utilizza.
Esercizio 2 – La squadra progetto
Il problema
Un’azienda deve formare una squadra di 5 persone per un progetto.
I candidati sono:
- 8 senior;
- 7 junior.
La squadra deve contenere almeno un senior e almeno un junior.
Inoltre, all’interno della squadra verranno assegnati tre ruoli:
- Project Manager;
- Analista;
- Sviluppatore.
Gli altri due componenti saranno semplicemente membri del gruppo.
Quante sono le squadre possibili?
E quante sono le configurazioni complessive se consideriamo anche l’assegnazione dei tre ruoli?
1. Formare la squadra
Abbiamo 15 candidati complessivi:
[math]\displaystyle 8+7=15[/math]
Dobbiamo sceglierne 5.
Se non ci fossero vincoli, avremmo:
[math]\displaystyle \binom{15}{5}=3003[/math]
squadre.
Ma alcune non sono ammesse.
Sono vietate:
- le squadre composte da 5 senior;
- le squadre composte da 5 junior.
Quindi possiamo usare il principio del complemento.
[math]\displaystyle N(\text{valide}) = N(\text{totali}) – N(\text{vietate})[/math]
Otteniamo:
[math]\displaystyle \binom{15}{5} – \binom{8}{5} – \binom{7}{5}[/math]
cioè:
[math]\displaystyle 3003-56-21=2926[/math]
Pertanto:
[math]\boxed{2926}[/math]
squadre sono valide.
2. Possiamo verificare anche per casi
Un altro modo consiste nel distinguere il numero di senior.
| Senior | Junior | Conteggio |
|---|---|---|
| 1 | 4 | [math]\binom{8}{1}\binom{7}{4}=280[/math] |
| 2 | 3 | [math]\binom{8}{2}\binom{7}{3}=980[/math] |
| 3 | 2 | [math]\binom{8}{3}\binom{7}{2}=1176[/math] |
| 4 | 1 | [math]\binom{8}{4}\binom{7}{1}=490[/math] |
Sommiamo:
[math]\displaystyle 280+980+1176+490=2926[/math]
Otteniamo lo stesso risultato.
Questo è un buon esempio di una strategia importante:
Quando più metodi indipendenti portano allo stesso risultato, abbiamo anche una forma di controllo del nostro ragionamento.
3. Ora entrano in gioco i ruoli
Abbiamo scelto una squadra di 5 persone.
Ora dobbiamo assegnare tre ruoli distinti:
- Project Manager;
- Analista;
- Sviluppatore.
Qui l’ordine conta.
Se abbiamo:
[math]\displaystyle A,B,C,D,E[/math]
e assegniamo:
- A → Project Manager
- B → Analista
- C → Sviluppatore
abbiamo una configurazione diversa da:
- B → Project Manager
- A → Analista
- C → Sviluppatore.
Le persone sono le stesse, ma i ruoli sono diversi.
4. Assegnare i ruoli
Per il Project Manager abbiamo 5 possibilità.
Dopo averlo scelto, rimangono 4 persone per l’Analista.
Infine rimangono 3 possibilità per lo Sviluppatore.
Quindi:
[math]\displaystyle 5\cdot4\cdot3=60[/math]
oppure:
[math]\displaystyle P(5,3) = \frac{5!}{(5-3)!} = \frac{5!}{2!} = 60[/math]
Ogni squadra può quindi avere:
[math]\boxed{60}[/math]
diverse assegnazioni dei tre ruoli.
5. Risultato complessivo
Abbiamo:
[math]\displaystyle 2926[/math]
squadre possibili.
Per ciascuna squadra abbiamo:
[math]\displaystyle 60[/math]
assegnazioni dei ruoli.
Possiamo quindi applicare il principio di moltiplicazione:
[math]\displaystyle 2926\cdot60=175560[/math]
Il risultato complessivo è:
[math]\boxed{175560}[/math]
Perché qui possiamo moltiplicare?
Questo passaggio merita attenzione.
Non è necessario parlare di “indipendenza” nel senso della probabilità.
La ragione è più semplice:
ogni squadra di 5 persone ha esattamente 60 possibili assegnazioni dei tre ruoli.
Quindi:
[math]\displaystyle \text{numero squadre} \times \text{ruoli per squadra}[/math]
fornisce il numero totale delle configurazioni.
È questo il principio fondamentale del conteggio.
Prima combinazione, poi permutazione
L’esercizio contiene quindi due strutture diverse.
Scelta della squadra
L’ordine non conta:
[math]\displaystyle \binom{15}{5}[/math]
Assegnazione dei ruoli
L’ordine delle assegnazioni conta:
[math]\displaystyle P(5,3)[/math]
Possiamo sintetizzare il procedimento così:
[math]\displaystyle \boxed{ \left[ \binom{15}{5} – \binom{8}{5} – \binom{7}{5} \right] \cdot P(5,3) }[/math]
e quindi:
[math]\displaystyle \boxed{ (3003-56-21)\cdot60 = 175560 }[/math]
La domanda da porsi è sempre la stessa:
Sto scegliendo persone oppure sto assegnando loro posizioni o ruoli?
Nel primo caso l’ordine non conta.
Nel secondo sì.
Esercizio 3 – Il percorso di consegna
Il problema
Un corriere deve consegnare pacchi in 5 città:
[math]\displaystyle A,B,C,D,E[/math]
Può partire da una città qualsiasi e deve visitare tutte le altre esattamente una volta.
A causa del traffico, però, B non può essere visitata immediatamente dopo A.
Quanti percorsi sono possibili?
1. Prima ignoriamo il vincolo
Dobbiamo semplicemente ordinare 5 città.
Quindi:
[math]\displaystyle 5!=120[/math]
percorsi possibili.
2. Contiamo i percorsi vietati
Ora dobbiamo individuare quelli in cui compare:
[math]\displaystyle A\rightarrow B[/math]
come sequenza consecutiva.
La chiave è trasformare A e B in un unico blocco:
[math]\displaystyle [AB][/math]
In questo modo gli elementi da ordinare diventano:
[math]\displaystyle [AB],C,D,E[/math]
Abbiamo quindi 4 elementi.
Possiamo ordinarli in:
[math]\displaystyle 4!=24[/math]
modi.
I percorsi vietati sono dunque:
[math]\boxed{24}[/math]
3. Usiamo il complemento
Il numero di percorsi validi è:
[math]\displaystyle 5!-4![/math]
cioè:
[math]\displaystyle 120-24=96[/math]
Quindi:
[math]\boxed{96}[/math]
percorsi validi.
Perché il metodo del blocco funziona?
Consideriamo:
[math]\displaystyle C\rightarrow A\rightarrow B\rightarrow E\rightarrow D[/math]
Poiché A deve essere immediatamente seguita da B, possiamo trattare la coppia come:
[math]\displaystyle C\rightarrow[AB]\rightarrow E\rightarrow D[/math]
Il blocco deve rimanere unito.
Il problema originario con 5 elementi diventa quindi un problema con 4 elementi:
[math]\displaystyle [AB],C,D,E[/math]
e per questo compare:
[math]\displaystyle 4![/math]
Attenzione: “prima” non significa “subito dopo”
Questa è una delle distinzioni più importanti dell’esercizio.
Il vincolo:
B non può essere subito dopo A
vieterebbe:
[math]\displaystyle A\rightarrow B[/math]
ma permetterebbe:
[math]\displaystyle A\rightarrow C\rightarrow B[/math]
e anche:
[math]\displaystyle B\rightarrow A\rightarrow C[/math]
Invece il vincolo:
A non può comparire prima di B
è molto più forte.
Sarebbero vietati anche:
[math]\displaystyle A\rightarrow C\rightarrow D\rightarrow B[/math]
oppure:
[math]\displaystyle A\rightarrow E\rightarrow B\rightarrow C\rightarrow D[/math]
In questo secondo caso il metodo del blocco non è appropriato.
Possiamo utilizzare invece la simmetria.
In ogni permutazione di A e B, esattamente una delle due situazioni è vera:
- A viene prima di B;
- B viene prima di A.
Per simmetria, metà delle permutazioni presenta A prima di B.
Quindi:
[math]\displaystyle \frac{5!}{2} = 60[/math]
Se chiedessimo invece che A non venga prima di B, avremmo quindi:
[math]\boxed{60}[/math]
Confrontiamo i due vincoli
| Vincolo | Tecnica | Risultato |
|---|---|---|
| Nessun vincolo | Permutazioni | [math]5!=120[/math] |
| B non subito dopo A | Blocco + complemento | [math]5!-4!=96[/math] |
| A non può precedere B | Simmetria | [math]5!/2=60[/math] |
Tre frasi apparentemente simili producono tre problemi diversi.
Ecco perché, nel calcolo combinatorio, interpretare correttamente il testo viene prima della formula.
Una generalizzazione interessante
Il ragionamento del blocco non vale soltanto per 5 città.
Supponiamo di avere [math]n[/math] elementi e di vietare una specifica adiacenza orientata:
[math]\displaystyle A\rightarrow B[/math]
Le configurazioni totali sono:
[math]\displaystyle n![/math]
Quelle contenenti il blocco ([AB]) sono:
[math]\displaystyle (n-1)![/math]
Quindi le configurazioni valide sono:
[math]\boxed{n!-(n-1)!}[/math]
Per [math]n=5[/math]:
[math]\displaystyle 5!-4!=96[/math]
La cosa importante è che non abbiamo imparato soltanto il risultato di un esercizio.
Abbiamo individuato una struttura generale.
Il metodo: quattro domande prima della formula
I tre esercizi sembrano molto diversi.
Uno parla di autenticazione, uno di una squadra aziendale e uno di consegne.
Ma dal punto di vista combinatorio condividono la stessa logica.
Prima di scrivere una formula, possiamo porci quattro domande.
1. L’ordine conta?
Se sto semplicemente scegliendo persone, oggetti o lettere e l’ordine non modifica il risultato, siamo nel territorio delle combinazioni.
[math]\displaystyle \binom{n}{k}[/math]
Se invece le posizioni o i ruoli sono diversi, l’ordine conta.
Possiamo avere permutazioni o disposizioni:
[math]\displaystyle P(n,k)=\frac{n!}{(n-k)!}[/math]
2. Il complemento è più facile?
Se il problema chiede:
“Quanti casi rispettano il vincolo?”
possiamo chiederci:
“Quanti casi violano il vincolo?”
Se questi ultimi sono più semplici da contare:
[math]\displaystyle N(\text{validi}) = N(\text{totali}) – N(\text{vietati})[/math]
È esattamente ciò che abbiamo fatto con:
- le squadre senza senior o senza junior;
- i percorsi contenenti A→B.
3. Esiste un blocco?
Se alcuni elementi devono comparire consecutivamente, possiamo spesso trasformarli in un’unica unità.
Per esempio:
[math]\displaystyle A,B\rightarrow[AB][/math]
In questo modo il numero di elementi da ordinare diminuisce.
È una tecnica particolarmente utile quando il testo contiene espressioni come:
- “immediatamente seguito da”;
- “uno accanto all’altro”;
- “consecutivamente”;
- “sempre insieme”.
4. Il problema è composto da più fasi?
Se prima dobbiamo scegliere gli elementi e poi assegnare loro ruoli, colori, posizioni o altre caratteristiche, possiamo scomporre il problema.
Se ogni risultato della prima fase ammette lo stesso numero di completamenti nella seconda, possiamo moltiplicare:
[math]\displaystyle N_{\text{totale}} = N_1\cdot N_2[/math]
È ciò che abbiamo fatto nella squadra:
[math]\displaystyle 2926\cdot60[/math]
e nel codice:
[math]\displaystyle 136080\cdot2600[/math]
Il vero errore: partire dalla formula
Quando incontrano un problema combinatorio, molti studenti procedono così:
problema → formula → calcolo
Il procedimento più affidabile è invece:
problema → struttura → strategia → formula → calcolo
La differenza sembra piccola, ma cambia completamente il modo di affrontare l’esercizio.
Prima dobbiamo capire:
- che cosa stiamo contando;
- quali configurazioni sono ammesse;
- quali sono vietate;
- se l’ordine conta;
- se esistono elementi vincolati;
- se il complemento è più semplice;
- se il problema può essere scomposto in più fasi.
Solo dopo scegliamo la formula.
Un piccolo schema mentale
Possiamo condensare tutto in questo percorso:
[math]\displaystyle \boxed{ \text{Leggi} \rightarrow \text{interpreta} \rightarrow \text{scomponi} \rightarrow \text{scegli la strategia} \rightarrow \text{calcola} }[/math]
E, più concretamente:
| Domanda | Strategia possibile |
|---|---|
| L’ordine non conta? | Combinazione |
| L’ordine conta? | Permutazione o disposizione |
| Il caso vietato è più semplice? | Complemento |
| Alcuni elementi devono stare insieme? | Metodo del blocco |
| Due elementi hanno un ordine relativo ma non devono essere consecutivi? | Simmetria |
| Il problema ha più fasi? | Principio di moltiplicazione |
Dalla matematica al codice
Il rapporto tra combinatoria e programmazione è particolarmente interessante.
Python permette di generare esplicitamente configurazioni con strumenti come:
from itertools import permutations, combinations
Questo è utile per verificare un ragionamento.
Ma bisogna distinguere due attività:
Conteggio analitico
Cerchiamo direttamente il numero delle configurazioni.
Verifica esaustiva
Generiamo le configurazioni e le contiamo.
Per problemi piccoli, la seconda strada è un ottimo strumento didattico.
Per problemi grandi, però, può diventare rapidamente impraticabile.
Se abbiamo [math]n[/math] elementi, il numero delle permutazioni cresce come:
[math]\displaystyle n![/math]
e il fattoriale cresce molto rapidamente.
Per esempio:
[math]\displaystyle 5!=120[/math]
ma:
[math]\displaystyle 10!=3628800[/math]
e:
[math]\displaystyle 20!\approx2,43\cdot10^{18}[/math]
A quel punto generare tutte le configurazioni non è più una strategia ragionevole.
La matematica combinatoria diventa quindi anche uno strumento per capire quando non conviene esplorare esplicitamente lo spazio delle soluzioni.
Tre esercizi, una sola idea
Possiamo ora rileggere i tre problemi.
Il codice
Abbiamo separato due fasi:
[math]\displaystyle \text{PIN}\times\text{password}[/math]
e abbiamo riconosciuto che il vincolo sull’ordine alfabetico rende la password una combinazione.
La squadra
Abbiamo utilizzato:
[math]\displaystyle \text{complemento} + \text{combinazione} + \text{permutazione}[/math]
per arrivare a:
[math]\displaystyle 175560[/math]
configurazioni.
Il percorso
Abbiamo trasformato:
[math]\displaystyle A\rightarrow B[/math]
in un blocco:
[math]\displaystyle [AB][/math]
e poi utilizzato il complemento:
[math]\displaystyle 5!-4!=96[/math]
In tutti e tre i casi, la formula arriva dopo aver capito la struttura.
Dietro le quinte degli esercizi: perché sono interessanti?
Sul PIN e la Password (Cybersecurity):
Il paradosso del vincolo: Dal punto di vista matematico, questo esercizio è affascinante perché dimostra come un vincolo che sembra “aggiungere complessità” (l’ordine alfabetico) in realtà collassi drasticamente lo spazio campionario. In ambito reale di data security, forzare l’ordine alfabetico di una password riduce le combinazioni da [math]15600[/math] (disposizioni) a sole [math]2600[/math]. È un’ottima dimostrazione di come una regola apparentemente sofisticata renda un sistema immensamente più vulnerabile agli attacchi di forza bruta.
Sulla Squadra Progetto (HR Analytics / Ricerca Operativa):
Gerarchia vs Appartenenza: Questo è un classico problema di modellizzazione organizzativa. La sua peculiarità sta nel fondere due anime della combinatoria: la scelta non ordinata (chi entra nel team) e l’assegnazione ordinata (chi fa cosa). Nel machine learning e nella resource allocation, distinguere matematicamente tra “appartenenza a un cluster” (combinazioni) e “ranking all’interno del cluster” (disposizioni) è un passaggio logico fondamentale.
Sul Percorso di Consegna (Logistica / TSP):
L’origine del Commesso Viaggiatore: L’esercizio del corriere è una versione in miniatura del Traveling Salesperson Problem (TSP). La distinzione tra “subito dopo” (metodo del blocco) e “prima di” (simmetria) non è una pignoleria teorica, ma la differenza esatta che passa tra due vincoli operativi reali: “il pacco B deve essere caricato nello stesso furgone del pacco A” rispetto a “il cliente B non può ricevere la merce prima che il magazzino A l’abbia spedita”.
Conclusione: contare significa scegliere il punto di vista giusto
Il calcolo combinatorio non è una collezione di formule da applicare meccanicamente.
È soprattutto un modo per rappresentare un problema.
A volte la soluzione consiste nel contare direttamente.
A volte è più facile contare ciò che vogliamo evitare.
A volte due elementi possono essere trasformati in un unico blocco.
A volte bisogna distinguere tra una semplice scelta e un’assegnazione di ruoli.
E a volte il problema diventa immediatamente più semplice quando ci accorgiamo che una condizione riguarda l’ordine relativo degli elementi e possiamo usare la simmetria.
La domanda più utile, quindi, non è:
“Quale formula devo usare?”
ma:
“Come posso rappresentare questo problema in modo che il conteggio diventi semplice?”
Una volta trovata la rappresentazione giusta, spesso la formula non è più il problema.
È soltanto l’ultimo passaggio.
La formula giusta è la conseguenza di un ragionamento, non il suo punto di partenza.
Il filo conduttore è sempre lo stesso: non cercare subito la formula. Cerca prima la struttura del problema.
📚 Calcolo Combinatorio, Strategie di Conteggio e Logica
Il calcolo combinatorio non consiste soltanto nell’applicare formule: il passaggio più importante è riconoscere la struttura del problema e capire se l’ordine conta, se sono ammesse ripetizioni e quale strategia di conteggio utilizzare. Questi approfondimenti raccolgono guide, esercizi progressivi e problemi di logica per costruire un metodo di risoluzione solido.
👉Calcolo combinatorio: come riconoscere la formula da usare
👉Calcolo combinatorio: guida pratica con 12 esercizi svolti e strategie di logica
👉Altri esercizi svolti riepilogativi di calcolo combinatorio – I parte
👉Altri esercizi svolti riepilogativi di calcolo combinatorio – II parte
👉Altri esercizi svolti riepilogativi di calcolo combinatorio – III parte
👉Altri esercizi svolti riepilogativi di calcolo combinatorio – IV parte
👉Esercizi svolti di calcolo combinatorio e delle probabilità al Lunapark
👉Cos’è il principio dei cassetti o di Dirichlet? Spiegazione ed esercizi svolti
(18)
Altri articoli nella categoria "Esercizi svolti di Calcolo delle probabilità"
- Funzioni Suriettive: Definizione, Calcolo Combinatorio ed Esercizi Svolti
- Test d’Ipotesi nel Marketing: Quando la Significatività Statistica Non Basta (Esercizi Svolti)
- Esercizi di Calcolo Combinatorio Applicato al Nudging di Richard Thaler: 6 Casi Aziendali Svolti per l’Architettura delle Scelte
- Test sulla Distribuzione Binomiale: 10 Esercizi Svolti (con Soluzioni e Valutazione)
- Legge di Benford e Data Quality nel Marketing: Guida, Formule ed Esercizi Python
- Il Principio dei Cassetti: la tecnica olimpica che risolve problemi apparentemente impossibili
- Semplificare i Fattoriali: Proprietà, Formule ed Esercizi Risolti
- Coefficiente Multinomiale: Formule, Calcolo e Applicazioni Pratiche con Esercizi Risolti
- Probabilità Geometrica: Calcolare l’Angolo Ottuso in un Quadrato (con il Teorema di Talete) 🎓
- Come calcolare la Varianza e applicare il Delta Method: Esercizi risolti su Covarianza e Campionamento Stratificato