Oggi la parola "algoritmo" è sulla bocca di tutti: sentiamo parlare dell’algoritmo di Instagram o TikTok che decide quali video mostrarci, dell’algoritmo di Google che ordina le ricerche sul web, o degli algoritmi bancari che approvano un pagamento in un millisecondo.
Spesso questo termine viene avvolto da un’aura di mistero, quasi fosse un’entità magica e segreta.
In realtà, l’idea alla base di un algoritmo è una delle cose più antiche, umane e affascinanti della storia. Il termine deriva dal nome del grande matematico e astronomo persiano del nono secolo, Muḥammad ibn Mūsā al-Khwārizmī, considerato uno dei padri dell’algebra.
Un algoritmo non è altro che una ricetta logica perfetta: una sequenza ordinata, chiarissima e finita di istruzioni che riceve dei dati di partenza e li elabora per raggiungere un risultato certo.
In questa guida scopriremo come si progetta un algoritmo prima ancora di toccare la tastiera, come disegnarlo graficamente con i Diagrammi di Flusso (Flowchart) e come scriverlo in Pseudocodice, il linguaggio ponte universale tra la mente umana e il computer.
1. La Ricetta della Torta: Perché il Computer Non Capisce "Quanto Basta"
Per capire la differenza tra come ragiona un essere umano e come ragiona un calcolatore, possiamo confrontare una comune ricetta di cucina con un algoritmo informatico:
2. Le 5 Proprietà Obbligatorie di un Vero Algoritmo
Perché una sequenza di istruzioni possa essere definita formalmente un "algoritmo" in matematica e informatica, deve rispettare cinque regole ferree:
- Finitezza: Il procedimento non può continuare all’infinito; deve terminare prima o poi dopo un numero preciso di passaggi.
- Determinatezza (Zero Ambiguità): Ogni singolo passaggio deve essere chiarissimo e ammettere una sola interpretazione. Dati gli stessi ingressi, l’algoritmo deve compiere sempre gli stessi identici passi.
- Effettività (Fattibilità Reale): Ogni comando deve essere materialmente realizzabile dall’esecutore in un tempo umano ragionevole (non puoi ordinare al computer di "calcolare tutti i decimali infiniti di Pi Greco").
- Dati in Ingresso (Input): L’algoritmo riceve dei dati di partenza su cui lavorare (ad esempio i voti di uno studente o il saldo del conto).
- Risultato in Uscita (Output): Deve produrre almeno un risultato concreto che risolva il problema iniziale (ad esempio la media finale o la ricevuta del pagamento).
3. I Diagrammi di Flusso (Flowchart): Disegnare i Pensieri
Prima di scrivere il codice in linguaggi complessi come C++ o Java, il modo migliore per verificare se un ragionamento fila liscio è disegnarlo graficamente.
Questo disegno prende il nome di Diagramma di Flusso (o Flowchart). Lo standard internazionale ISO 5807 ha codificato forme geometriche precise per ciascun tipo di azione:
somma = a + b) o una modifica di memoria.4. Il Teorema di Böhm-Jacopini: I Tre Mattoni di Tutto il Software
Nel 1966 due brillanti informatici italiani, Corrado Böhm e Giuseppe Jacopini, formularono un teorema storico che ha cambiato per sempre l’ingegneria del software.
Il loro teorema dimostrò matematicamente che qualsiasi programma informatico dell’universo — dal più piccolo script scolastico fino al sistema di guida autonoma di una navetta spaziale — può essere scritto combinando soltanto TRE strutture elementari:
- La Sequenza: Esegui l’azione 1, poi subito l’azione 2, poi l’azione 3 in ordine dritto.
- La Selezione (La Decisione):
SEuna condizione è vera fai l’azione A,ALTRIMENTIfai l’azione B. - L’Iterazione (Il Ciclo):
MENTREuna condizione resta vera, continua a ripetere l’azione C.
Non serve inventarsi nient’altro! Tutta la complessità del mondo digitale non è altro che un sapiente intreccio di sequenze, decisioni e ripetizioni.
5. Lo Pseudocodice: Il Ponte tra l’Umano e la Macchina
I diagrammi di flusso sono ideali per visualizzare a colpo d’occhio bivi e ripetizioni, ma per algoritmi composti da decine o centinaia di passaggi diventano ingombranti da disegnare.
Per questo l’informatica adotta lo Pseudocodice: un linguaggio ponte formale che impiega vocaboli naturali (italiano o inglese), organizzati con la rigida disciplina logica di un vero linguaggio di programmazione (INIZIO, LEGGI, SE... ALLORA, ALTRIMENTI, MENTRE, SCRIVI, FINE).
💡 La Scala Lineare dell’Informatica in 3 Livelli:
- Livello 1 · Pensiero Umano (Linguaggio Naturale): "Prendi due numeri e stabilisci qual è il maggiore."
- Livello 2 · Pseudocodice (Ponte Logico Lineare):
INIZIO➔LEGGI➔SE...ALLORA➔SCRIVI➔FINE(indipendente dalla macchina).- Livello 3 · Codice Eseguibile (Macchina):
if/else,input(),print()in Python o C++ (eseguito dal processore).
1. Il Flusso Logico Lineare dell’Algoritmo
Prima di scrivere il codice, schematizziamo la decisione con un diagramma di flusso rigorosamente lineare dall’inizio alla fine:
2. Confronto Diretto a Specchio: Pseudocodice vs Codice Reale
Ecco come ogni singola riga di logica umana trova la sua esatta traduzione nell’istruzione eseguibile per il calcolatore:
Lo pseudocodice consente di collaudare e validare al 100% la linearità logica del ragionamento prima di occuparsi della sintassi, delle parentesi o dei dettagli operativi del compilatore!
6. Quadro sinottico comparativo degli Strumenti di Progettazione
| Strumento | A Cosa Serve | Linguaggio Usato | Vantaggio Principale | Limite Principale |
|---|---|---|---|---|
| Descrizione a Parole | Prima bozza discorsiva dell’idea. | Italiano comune informale. | Immediata da spiegare a chiunque. | Troppo vaga e piena di ambiguità. |
| Diagramma di Flusso (Flowchart) | Mappa geometrica visiva dei bivi e dei cicli. | Simboli geometrici standard ISO 5807 con frecce. | Chiarissimo e visivo a colpo d’occhio. | Diventa ingombrante e gigante per programmi lunghi. |
| Pseudocodice | Bozza strutturata dell’algoritmo indipendente dal PC. | Italiano strutturato con parole chiave formali. | Veloce da scrivere, ordinato e universale. | Non può essere eseguito direttamente dal computer. |
| Codice Sorgente Reale | Il programma finale consegnato alla macchina. | Python, C++, Java, JavaScript, Rust. | Direttamente eseguibile e funzionante al 100%. | Rigido: un solo errore di battitura blocca l’esecuzione. |
7. Domande Frequenti sugli Algoritmi (FAQ)
Qual è la differenza tra un Algoritmo e un Programma?
- L’Algoritmo è l’idea teorica, la ricetta logica e la strategia matematica astratta per risolvere un problema (può essere scritto anche su un tovagliolo di carta).
- Il Programma è la traduzione concreta e tangibile di quell’algoritmo in un preciso linguaggio di programmazione (come Python o C++), registrato in un file eseguibile dal computer.
Perché il Teorema di Böhm-Jacopini ha eliminato il comando "GOTO"?
Nei primissimi linguaggi degli anni ’60 esisteva il comando GOTO (vai a), che permetteva al programma di saltare liberamente da una riga qualsiasi a un’altra in modo selvaggio. Questo creava programmi caotici e impossibili da comprendere e riparare, soprannominati ironicamente "Spaghetti Code". Il teorema dimostrò che il salto GOTO era totalmente inutile: bastavano sequenza, selezione e cicli per fare tutto in modo pulito e strutturato!
Cosa significa che un algoritmo è "Deterministico"?
Significa che non lascia nulla al caso o alla fortuna: ogni volta che inserisci gli stessi dati in ingresso, l’algoritmo compirà sempre gli stessi identici passaggi e produrrà sempre lo stesso identico risultato, sia che venga eseguito oggi, domani o tra cinquant’anni.
Chi progetta gli algoritmi nei grandi motori di ricerca?
Vengono progettati da squadre di ingegneri del software, matematici e data scientist. Algoritmi celebri come il PageRank di Google analizzano miliardi di pagine web incrociando parole chiave, autorevolezza delle fonti e link reciproci per restituire i risultati più utili in pochi millesimi di secondo.
8. Glossario essenziale
- Algoritmo: Sequenza finita, ordinata e non ambigua di istruzioni volta a risolvere un problema determinato.
- Flowchart (Diagramma di Flusso): Rappresentazione schematica bidimensionale delle istruzioni di un algoritmo tramite blocchi geometrici convenzionali.
- Pseudocodice: Linguaggio informale strutturato a metà strada tra il linguaggio naturale umano e la sintassi formale di programmazione.
- Böhm-Jacopini: Il teorema fondamentale dell’informatica che sancisce la sufficienza di sequenza, selezione e iterazione per esprimere qualsiasi algoritmo computabile.
- Variabile Accumulatore: Una variabile utilizzata all’interno di un ciclo per sommare progressivamente una serie di valori numerici (es.
somma = somma + voto).
Fonti e Riferimenti Accademici Ufficiali
- Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C.: Introduction to Algorithms (4th Edition), MIT Press. Capitolo 1: "The Role of Algorithms in Computing – Algorithms as a Technology".
- Knuth, Donald E.: The Art of Computer Programming, Volume 1: Fundamental Algorithms, Addison-Wesley. Sezione 1.1: "Algorithms – Definition and Properties".
- Böhm, Corrado, & Jacopini, Giuseppe (1966): Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules. Communications of the ACM, Vol. 9, No. 5. L’articolo accademico fondativo della programmazione strutturata.
- International Organization for Standardization (ISO 5807:1985): Information processing – Documentation symbols and conventions for data, program and system flowcharts, program network charts and system resources charts: ISO Standards Catalogue