che cosa sono e come funzionano gli algoritmi?

algoritmo

La parola algoritmo viene dall’arabo, come molte altre parole che iniziano con il prefisso al- , tipo alcool, alambicco, almanacco, algebra , ecc.
Deriva dal nome del matematico arabo al-Khwarizmi, conosciuto tra l’altro come il padre dell’algebra (dall’arabo al-gabr, sì vabbè ci siamo capiti), vissuto nel IX secolo.
Al-Khwarizmi, che a sua volta prende forse il nome dalla regione dell’Asia Centrale di cui era originario, visse a Baghdad come responsabile della biblioteca del califfo dell’epoca, e fu responsabile della traduzione all’arabo di numerose opere matematiche del mondo antico, nonché autore di opere originali.
Una fra queste è il “Libro di al-Khwarizmi sui numeri indiani’ che introdusse in Europa il concetto di notazione numerica indiana posizionale (in cui cioè il primo numero a sinistra della virgola sono le unità, il secondo le decine e così via).

inventore degli algoritmi

Fino a quel momento, ed in effetti per qualche altro secoletto, tranne qualche caso singolo di illuminazione personale, guardato con alquanto sospetto, in Europa si era andati avanti a numeri romani e pallottolieri.

Il medioevo e gli algoritmi

Il Medioevo fu teatro, fra le altre cose, della poco nota ma non per questo meno agguerrita tenzone tra abacisti e algoritmisti, ovvero tra sassolinari e frazionari dodicesimali da un lato, e sostenitori di penne e numeri posizionali dall’altro.
Vinsero questi ultimi grazie al cielo, pensate che inferno continuare a fare i conti co’ sassetti e pallette, ma l’uso dei numeri arabi divenne effettivamente comune soltanto niente popo’ di meno che nel Rinascimento.
Tornando ai nostri algoritmi, nel Medioevo questo termine fu inizialmente usato per indicare i procedimenti di calcolo basati appunto sull’uso dei numeri arabi, per poi passare ad indicare qualsiasi sequenza o lista di istruzioni di calcolo, ed approdare infine più recentemente ad assumere anche la connotazione inerente ad istruzioni informatiche: la programmazione è sostanzialmente la codifica di algoritmi in speciali linguaggi che la macchina è in grado di capire (in vari modi) ed eseguire.

 

algoritmi e medioevoI requisiti di finitezza ed effettività

Ma non è che qualsiasi sequenza di operazioni a caso possa essere definita un algoritmo, affinché ciò sia possibile, occorre soddisfare due principali requisiti: la finitezza e l’effettività.
La prima ci dice che il numero di operazioni da eseguire non può essere infinito, la seconda che ogni volta che eseguiamo il nostro algoritmo, dobbiamo ottenere lo stesso risultato.
Controesempio classico, quando uno impara a programmare e lancia con orgoglio varie volte per prova il proprio codicino, core de mamma, ce fossero du’ volte in cui esce lo stesso risultato.
In questo caso non è che il computer vi odia, è che il vostro programma è scritto male – qualcuno doveva dirvelo, sorry. Dai programmini per calcolare 2+2 o scrivere ‘hello world!’ al machine learning, sempre di algoritmi si tratta.
In questo senso, le istruzioni per montare un mobile IKEA sono un algoritmo. Non numerico, ma comunque algoritmo. Dovete mettervi lì, fare un bel respiro, mente in bianco pace cosmica & spirito zen, e seguire fiduciosi ogni passo alla lettera. Ecco, se sapete fare questo, già siete un pezzo avanti per imparare a programmare.

Alcuni esempi di Algoritmo

Facciamo un esempio di algoritmo nella vita pratica. Io ho girato il mondo, preso un dottorato, imparato 2 lingue e 4 linguaggi di programmazione, insomma sono, ne converrete, proprio fichissima, ma non c’è verso che riesca a ricordarmi a memoria le istruzioni per fare una lavatrice.

Niente, gna faccio. Ergo il fidanzato mi ha incorniciato un bel post-it in bagno:

  1. mettere i vestiti nel cestello
  2. mettere il sapone e l’ammorbidente negli appositi cosi per mettere il sapone e l’ammorbidente
  3. accendere lavatrice
  4. selezionare il programma
  5. avviare la lavatrice

Ecco, questo è un algoritmo. A meno che io non avvii i vestiti e metta il programma nel cestello per il sapone, il risultato è deterministico: bucato pulito.

Facciamo ora un esempio numerico: supponiamo che siate stati birichini in classe e il maestro per punirvi vi abbia detto di sommare tutti i numeri da 1 a 100, così ve ne state buoni per un po’.

Avete 3 modi per risolvere il problema:

  1. siete molto pazienti, quindi vi mettete lì e fate 1+1=2, poi ci sommiamo 2 e quindi 2+2=4, poi è la volta del 3 e siamo a 7, e così via fino a perdere il conto.
  2. sapete formulare un algoritmo e programmarlo al computer, e allora dite al vostro calcolatore qualcosa del genere:
  • definisci una variabile somma, il cui valore sia =0
  • per ogni numero n tra 1 e 100, aggiungi n a somma (una istruzione di questo genere si chiama loop, un blocco di operazioni – nel nostro caso una sola – ripetuta ciclicamente finché sia vera una certa condizione di controllo, nel nostro caso ‘da 1 a 100’). I valori che assumerà il contatore somma saranno quindi volta per volta 1, 3, 6, 10, e via sommando fino al risultato finale.
  1. Siete il matematico, astronomo e fisico tedesco Carl Gauss all’età di 9-10 anni (ciao, piccolo Carl Gauss!), a cui secondo l’aneddoto il maestro pose questo problema, e lui notò che se prendo il primo e l’ultimo numero della sequenza proposta e li sommo, ho 1+100=101, se prendo il secondo e il penultimo ho 2+99=101, terzo e terz’ultimo 3+98=101 e direi che anche qui è arrivato il momento di fermarci al ‘ci siamo capiti’. Ho quindi 50 accoppiate di centouni, il che generalizzando a n invece che a 100 ci porta alla mirabile formula

n(n+1)

——–

2

e a quel punto avete risolto il problema. Sì ma quanto fa il risultato? Seeee troppo facile, aspetto la risposta da voi.

 

Autrice: Benedetta Cerruti