Che cos’è un algoritmo?

Nel suo senso più generale, un algoritmo è un qualsiasi insieme di istruzioni dettagliate che risulta in uno stato finale prevedibile da un inizio noto. Gli algoritmi sono validi solo quanto le istruzioni fornite, tuttavia, e il risultato non sarà corretto se l’algoritmo non è definito correttamente.

Esempi di algoritmi

Un esempio comune di algoritmo sono le istruzioni per assemblare un modello di aeroplano. Dato l’insieme iniziale di un numero di pezzi contrassegnati, si possono seguire le istruzioni fornite per ottenere uno stato finale prevedibile: l’aereo completato. Errori di stampa nelle istruzioni o la mancata osservanza di un passaggio corretto si tradurranno in un prodotto finale difettoso.

Un programma per computer è un altro esempio pervasivo. Ogni programma per computer è semplicemente una serie di istruzioni, che possono variare in complessità, ed è elencato in un ordine specifico, progettato per eseguire un compito specifico. La matematica utilizza anche algoritmi per risolvere equazioni a mano, senza l’uso di una calcolatrice. Un ultimo esempio è il cervello umano: la maggior parte delle concezioni del cervello umano definisce tutti i comportamenti, dall’acquisizione del cibo all’innamoramento, come il risultato di un algoritmo complesso.

Classi di algoritmi
Sebbene non esista una suddivisione universalmente accettata per i vari tipi di algoritmi, esistono classi comuni a cui gli algoritmi sono spesso convenuti di appartenere. Tra questi ci sono:

Algoritmi di programmazione dinamica: questa classe ricorda i risultati precedenti e tenta di utilizzarli per accelerare il processo di ricerca di nuovi risultati.

Algoritmi Greedy: Gli algoritmi Greedy tentano non solo di trovare una soluzione, ma anche di trovare la soluzione ideale a un dato problema.

Algoritmi di forza bruta: l’approccio della forza bruta inizia in un punto casuale e scorre attraverso ogni possibilità finché non trova la soluzione.

Algoritmi randomizzati: questa classe include qualsiasi algoritmo che utilizza un numero casuale in qualsiasi momento durante il suo processo.

Algoritmi Branch and Bound: Gli algoritmi Branch and Bound formano un albero di sottoproblemi al problema primario, seguendo ogni ramo fino a quando non viene risolto o raggruppato con un altro ramo.

Algoritmi ricorsivi semplici: questo tipo va per una soluzione diretta immediatamente, quindi torna indietro per trovare una soluzione più semplice.

Algoritmi di backtracking: test di algoritmi di backtracking per una soluzione; se viene trovata una soluzione l’algoritmo ha risolto, in caso contrario si ripresenta una volta e riprova, continuando fino a trovare una soluzione.

Algoritmi divide et impera: un algoritmo divide et impera è simile a un algoritmo branch and bound, tranne per il fatto che utilizza il metodo backtracking di ricorrenza durante la divisione di un problema in sottoproblemi.

Algoritmi seriali e paralleli
Oltre a queste classi generali, gli algoritmi possono anche essere suddivisi in due gruppi primari: algoritmi seriali, progettati per l’esecuzione seriale, in cui ogni operazione viene eseguita in un ordine lineare; e algoritmi paralleli, utilizzati con computer che eseguono processori paralleli, in cui un certo numero di operazioni vengono eseguite parallelamente l’una all’altra. Algoritmi paralleli esistono anche nel mondo naturale nel caso, ad esempio, di mutazioni genetiche su una specie.