Un algoritmo è un procedimento che, attraverso una serie di passaggi logici, porta ad un risultato. In informatica e nella programmazione, l’algoritmo è costituito da una sequenza di istruzioni che l’elaboratore deve eseguire secondo l’ordine e le istruzioni impartite dallo sviluppatore.
Attraverso gli algoritmi i programmi sanno come affrontare certe situazioni, come risolvere i problemi o ottenere certi risultati partendo da dei dati certi.
Un esempio di algoritmo
Volendo semplificare, potremmo descrivere un algoritmo facendo riferimento ad azioni quotidiane come uscire per fare la spesa. Il nostro algoritmo potrebbe essere questo:
- uscire di casa
- fuori piove?
- sì => prendi l’ombrello
- no
- muoviti verso la destinazione
- fai la spesa
- ritorna a casa
Questa sequenza di operazioni quotidiane è un algoritmo: a fronte di un’esigenza (uscire e fare la spesa) abbiamo descritto una serie di passaggi logici per il raggiungimento dell’obiettivo.
In informatica gli algoritmi funzionano allo stesso modo. Facciamo un esempio e supponiamo di dover realizzare un algoritmo in grado di mostrare l’età di un utente:
- chiedo all’utente di inserire la data di nascita
- l’utente inserisce una data valida?
- sì
- no => emetto un errore e stoppo il processo
- faccio un confronto tra la data odierna e la data di nascita
- mostro l’età dell’utente
Come rappresentare un algoritmo
L’algoritmo può essere rappresentato in due modi diversi:
- attraverso una lista di operazioni;
- mediante un diagramma di flusso (o flow chart).
La prima modalità può andare bene per gli algoritmi più semplici, mentre per quelli più complessi, ricchi di istruzioni condizionali, è preferibile utilizzare una rappresentazione grafica mediante un diagramma di flusso (esistono diversi servizi online per creare diagrammi di flusso anche complessi).
Le proprietà degli algoritmi
Ogni algoritmo, per essere definito tale, deve possedere alcune proprietà, tra cui:
- (atomicità) – i passaggi logici che compongono l’algoritmo devono essere "elementari", cioè non ulteriormente scomponibili in altri passaggi;
- (non ambiguità) – i passaggi logici devono essere chiari e assolutamente non ambigui;
- (finitezza) – i dati in ingresso ed i passaggi logici devono essere in numero finito;
- (terminazione) – il processo deve terminare entro un tempo prestabilito;
- (effettività) – il processo deve portare ad un risultato univoco.