Programmazione · concetti · fondamentali
Cos’è un algoritmo?
È una delle parole più usate nel mondo tech — « l’algoritmo decide », « un algoritmo più veloce », « il feed algoritmico » — e una delle meno spiegate con precisione. Un algoritmo è un’idea semplice e fondamentale che sta sotto tutta l’informatica. Questa guida spiega cos’è un algoritmo, le sue proprietà chiave, esempi tratti dalla vita quotidiana e dal codice, perché l’efficienza conta e in cosa differisce da un programma.
La definizione breve
Un algoritmo è una procedura finita, passo dopo passo, per risolvere un problema o produrre un output a partire da un input. Dagli lo stesso input e segui i passi esattamente, e produce lo stesso risultato ogni volta. È una ricetta precisa — indipendente da qualsiasi linguaggio di programmazione particolare.
Un’analogia quotidiana
Una ricetta di cucina è un algoritmo: una lista definita di passi (« tritare le cipolle, scaldare l’olio, aggiungere e mescolare per 5 minuti ») che trasforma input (gli ingredienti) in un output (un piatto). Proprio come le istruzioni della divisione in colonna imparata a scuola, o i passi per montare un mobile in kit. L’idea precede di gran lunga i computer — la parola viene dal matematico del IX secolo al-Khwarizmi.
Le proprietà chiave
- Passi ben definiti — ogni istruzione è chiara e priva di ambiguità.
- Finito — deve terminare dopo un numero limitato di passi, e non girare all’infinito.
- Input e output definiti — prende zero o più input e produce un risultato.
- Effettivo — ogni passo è abbastanza elementare da poter essere realmente eseguito.
Un algoritmo è anche indipendente dal linguaggio: lo stesso algoritmo di ordinamento può essere scritto in Python, Haskell, Rust o a mano su carta. L’algoritmo è l’idea; il codice ne è un’espressione.
Un esempio concreto
Per trovare il numero più grande in una lista, l’algoritmo è:
1. Assume the first number is the largest so far.
2. Look at each remaining number in turn.
3. If it is bigger than the largest so far, make it the new largest.
4. After the last number, the largest so far is the answer. È un algoritmo completo — scritto in chiaro, senza bisogno di codice. Tradurlo in un linguaggio è un passo separato e meccanico.
Perché l’efficienza conta: Big-O
Algoritmi diversi possono risolvere lo stesso problema con quantità di lavoro molto diverse. La notazione Big-O descrive come il costo di un algoritmo cresce man mano che l’input aumenta. Scorrere una lista una volta per trovare il valore più grande è O(n) — il lavoro cresce proporzionalmente al numero di elementi. Un approccio ingenuo che confronti ogni coppia sarebbe O(n²) — molto più lento per input grandi. Scegliere un algoritmo migliore conta spesso più di un computer più veloce: un ordinamento in O(n log n) batterà un ordinamento in O(n²) su una lista grande ogni volta.
Algoritmo vs programma
Sono collegati ma non sono la stessa cosa. Un algoritmo è il metodo astratto — i passi. Un programma è un’implementazione concreta di uno o più algoritmi in un linguaggio preciso, con tutti i dettagli del mondo reale (gestione degli input, errori, memoria) compilati. Si progetta prima l’algoritmo, poi lo si implementa. Lo stesso algoritmo può alimentare molti programmi.
FAQ
Un algoritmo è la stessa cosa del codice? No. L’algoritmo è l’insieme di passi indipendente dal linguaggio; il codice ne è un’implementazione. Lo stesso algoritmo può essere scritto in molti linguaggi.
Cosa rende un algoritmo « buono »? Prima la correttezza (produce l’output giusto per ogni input valido), poi l’efficienza (usa una quantità accettabile di tempo e memoria, descritta dal Big-O), poi la chiarezza.
Cos’è la notazione Big-O? Un modo di descrivere come il tempo di esecuzione o la memoria di un algoritmo crescono con la dimensione dell’input — ad es. O(n) lineare, O(n log n), O(n²) quadratico. Confronta gli algoritmi indipendentemente dalla macchina esatta.
Serve la matematica per capire gli algoritmi? Una logica di base basta per iniziare. Quelli quotidiani — ricerca, ordinamento, conteggio — sono intuitivi; la matematica diventa utile quando si analizza e si confronta la loro efficienza.
Gli algoritmi sono il « cosa fare »; un linguaggio come Haskell o i dati trasportati da un’API sono il « come » e il « con cosa ». Sfoglia altre spiegazioni chiare nel nostro indice delle guide.