01. Gli algoritmi

Questo termine deriva dal nome del matematico persiano Abu Ja'far Mohammed ibn Mâsâ al-Khowârizmî (825 d.C.). Esercitò la professione nella città di Baghdad, dove insegnava, e introdusse nel mondo arabo i numeri indiani. Compose il trattato Al-giabr wa'l mu kabala (Del modo di assestare cose opposte) da cui deriva la parola algebra. La sua opera "Il calcolo degli indiani" venne successivamente tradotta in latino da un monaco europeo, con il titolo Liberalgarismi (Il libro di al-Khwarizmi). Da algarismi ad algoritmi il passo è breve.

 
In informatica, con il termine algoritmo si intende un metodo per la risoluzione di un problema adatto a essere implementato sotto forma di programma.
Dunque, più dettagliatamente esso è una sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione di un problema in un numero finito di passaggi.
 
Da questa definizione si evincono le quattro proprietà fondamentali dell'algoritmo:
  1. la sequenza di istruzioni deve essere finita;
  2. essa deve portare ad un risultato;
  3. le istruzioni devono essere eseguibili materialmente;
  4. le istruzioni devono essere espresse in modo non ambiguo.
Facciamo un esempio e supponiamo di voler calcolare sul computer la somma di due numeri digitati dall’utente. Per prima cosa ci dobbiamo procurare gli “ingredienti”, cioè i due numeri interi, poi dobbiamo dirgli di acquisire da tastiera il primo numero, poi il secondo numero e infine deve effettuare la somma dei due e mostrarla a video. Questa “ricetta” la possiamo così schematizzare:
 
INIZIO
 
a) Ci vogliono due numeri interi (ingredienti);
b) Acquisisci il primo numero dalla tastiera;
c) Acquisisci il secondo numero dalla tastiera;
d) Somma i due numeri;
e) Mostra il risultato sullo schermo.
 
FINE
 
Questa è una schematizzazione molto semplificata, ma serve solo per dare un’idea di cosa potrebbe essere un algoritmo. La cosa interessante è che tutti gli algoritmi possono essere paragonabili a quello dell’esempio, anche se potrebbero essere enormemente più lunghi e complicati.
 
Volendo fare un successivo esempio di algoritmo pensiamo come si preparano delle uova fritte.
Prima di tutto vengono indicati tutti gli ingredienti, poi vengono descritti tutti i vari procedimenti per arrivare al risultato finale. I vari “passi” da eseguire devono essere eseguiti secondo l’ordine indicato nella ricetta, altrimenti viene fuori un pasticcio.
 
Quando si crea un algoritmo, prima di passare al codice ovverosia prima di scrivere un programma utilizzando un linguaggio di programmazione, si usa utilizzare un diagramma di flusso o diagramma a blocchi o flow-chart. Questo potrebbe essere paragonato al disegno di progetto per un ingegnere. Di seguito ecco l’esempio relativo al primo algoritmo su esplicato.
 
 A sinistra il diagramma di flusso, mentre, nell’immagine sotto sono illustrati i principali "simboli" ed il loro relativo significato utilizzati all'interno dei diagrammi di flusso per identificare i vari tipi di azione.
 
 
Naturalmente la teoria dei diagrammi di flusso è più complessa rispetto all'esempio a lato e la sua rappresentazione grafica comprende altri simboli, ma le informazioni qui fornite sono comunque più che sufficienti per avere un'idea di come uno strumento apparentemente semplice, possa essere usato per formalizzare anche concetti di grande entità e complessità.