La parola algoritmo compare ormai ovunque.
La incontriamo quando parliamo di motori di ricerca, social network, intelligenza artificiale, applicazioni, sicurezza informatica e perfino quando qualcuno dice che “l’algoritmo di Instagram ha deciso cosa mostrarci”.
A forza di sentirla nominare, però, rischiamo di darle un significato quasi misterioso, come se un algoritmo fosse una specie di entità invisibile che decide autonomamente cosa fare.
In realtà il concetto di algoritmo è molto più semplice.
Un algoritmo è una sequenza ordinata e finita di istruzioni che permette di risolvere un problema o raggiungere un determinato risultato.
Detto ancora più semplicemente:
un algoritmo è un procedimento.
Riceve delle informazioni, esegue una serie di operazioni secondo regole precise e produce un risultato.
E, cosa forse sorprendente, gli algoritmi non appartengono soltanto al mondo dei computer.
Li utilizziamo continuamente anche nella vita quotidiana.
Un esempio semplicissimo: preparare una tazza di tè
Immaginiamo di dover spiegare a qualcuno come preparare una tazza di tè.
Potremmo scrivere:
Prendi una tazza.
Metti dell’acqua in un bollitore.
Scalda l’acqua.
Inserisci una bustina di tè nella tazza.
Versa l’acqua calda.
Aspetta alcuni minuti.
Rimuovi la bustina.
Aggiungi eventualmente zucchero o miele.
Bevi il tè.
Abbiamo appena costruito qualcosa che assomiglia moltissimo a un algoritmo.
Abbiamo un obiettivo: preparare il tè.
Abbiamo una serie di istruzioni.
Le istruzioni devono essere eseguite in un certo ordine.
E alla fine otteniamo un risultato.
Se cambiassimo completamente l’ordine delle operazioni, potremmo avere qualche problema.
Per esempio, tentare di versare l’acqua prima di aver preso la tazza non sarebbe particolarmente efficace.
Questo piccolo esempio ci fa capire una caratteristica fondamentale: in un algoritmo, l’ordine delle operazioni può essere importante.
Dal tè al computer
Un computer funziona in modo molto simile, anche se naturalmente le istruzioni che riceve sono molto più precise.
Il computer non interpreta le nostre intenzioni come farebbe una persona.
Se diciamo a qualcuno:
“Ordina questi numeri dal più piccolo al più grande”
una persona comprende abbastanza facilmente cosa intendiamo.
Un computer, invece, ha bisogno di sapere come deve effettuare quell’ordinamento.
Deve ricevere un procedimento.
Potremmo, per esempio, dirgli di confrontare due numeri alla volta, verificare quale sia il più piccolo, spostarlo nella posizione corretta e ripetere l’operazione fino a quando l’intero elenco non risulta ordinato.
Quel procedimento è un algoritmo.
Input, elaborazione e output
Molti algoritmi possono essere rappresentati attraverso un modello molto semplice:
Input → Elaborazione → Output
L’input rappresenta i dati che forniamo all’algoritmo.
L’elaborazione è l’insieme delle operazioni che vengono eseguite.
L’output è il risultato ottenuto.
Facciamo un esempio.
Supponiamo di avere questi numeri:
12 – 7 – 20 – 4
Vogliamo ordinarli dal più piccolo al più grande.
L’input sarà:
12 – 7 – 20 – 4
L’algoritmo eseguirà una serie di confronti e spostamenti.
L’output sarà:
4 – 7 – 12 – 20
Questa struttura, apparentemente semplice, è alla base di una quantità enorme di operazioni informatiche.
Un secondo esempio: trovare il numero più grande
Immaginiamo di avere una lista di numeri:
15 – 8 – 42 – 23 – 17
Vogliamo trovare il più grande.
Una possibile procedura potrebbe essere questa.
Prendiamo il primo numero, 15, e lo consideriamo momentaneamente il più grande.
Poi lo confrontiamo con il numero successivo.
15 è maggiore di 8, quindi manteniamo 15.
Confrontiamo 15 con 42.
42 è maggiore, quindi adesso consideriamo 42 il numero più grande.
Confrontiamo 42 con 23.
42 rimane il più grande.
Infine confrontiamo 42 con 17.
Anche in questo caso 42 è maggiore.
Il risultato finale sarà quindi:
42
Il computer potrebbe utilizzare una procedura simile.
In forma semplificata potremmo scriverla così:
considera il primo numero come il maggiore;
confrontalo con il successivo;
se il nuovo numero è maggiore, sostituiscilo;
continua fino alla fine della lista;
restituisci il valore maggiore.
Questo è un algoritmo.
Un algoritmo deve essere preciso
Qui compare una delle differenze più importanti tra il modo di ragionare umano e quello di un computer.
Noi possiamo comprendere istruzioni relativamente vaghe.
Se qualcuno ci dice:
“Metti un po’ d’acqua nella pentola”
riusciamo normalmente a interpretare il significato di “un po’”.
Un computer non possiede automaticamente questa capacità.
Un algoritmo destinato a essere eseguito da una macchina deve quindi utilizzare istruzioni sufficientemente precise.
Dire:
“Prendi qualche numero e sistemali bene”
non è una buona istruzione informatica.
Bisogna specificare quali numeri prendere, come confrontarli, secondo quale criterio ordinarli e quando considerare conclusa l’operazione.
Un algoritmo deve anche terminare
Un’altra caratteristica importante è che un algoritmo deve essere finito.
Deve cioè arrivare, prima o poi, a una conclusione.
Immaginiamo una procedura del tipo:
Aggiungi 1 a un numero.
Torna al punto 1.
Il procedimento continuerebbe indefinitamente.
Saremmo di fronte a un ciclo che non termina.
In programmazione situazioni simili possono realmente verificarsi e vengono spesso chiamate loop infiniti.
Un algoritmo ben progettato dovrebbe invece avere una condizione che stabilisce quando fermarsi.
Per esempio:
“Continua ad aggiungere 1 fino a quando il numero raggiunge 100.”
Ora il procedimento possiede una condizione di arresto.
Algoritmo e programma non sono la stessa cosa
I due termini vengono spesso utilizzati come sinonimi, ma indicano concetti differenti.
Un algoritmo è il procedimento logico utilizzato per risolvere un problema.
Un programma è invece la traduzione di uno o più algoritmi in un linguaggio che il computer può eseguire.
Potremmo quindi pensare all’algoritmo come alla ricetta e al programma come alla ricetta scritta in una lingua comprensibile alla macchina.
Lo stesso algoritmo può inoltre essere implementato utilizzando linguaggi di programmazione diversi.
Per esempio, un algoritmo per trovare il valore massimo all’interno di una lista potrebbe essere scritto in Python, Java, C++, JavaScript o molti altri linguaggi.
La logica rimane la stessa.
Cambia il modo in cui quella logica viene descritta al computer.
Esiste sempre un solo algoritmo per ogni problema?
No.
Ed è proprio qui che le cose diventano interessanti.
Lo stesso problema può spesso essere risolto utilizzando algoritmi differenti.
Immaginiamo di voler trovare un nome all’interno di un elenco telefonico ordinato alfabeticamente.
Potremmo iniziare dalla prima pagina e controllare tutti i nomi uno dopo l’altro.
Funzionerebbe.
Ma se l’elenco contiene migliaia di nomi potrebbe essere un metodo molto lento.
Potremmo invece aprire il libro circa a metà.
Se il cognome che cerchiamo viene alfabeticamente prima dei nomi presenti in quella pagina, continueremo a cercare nella prima metà.
Altrimenti cercheremo nella seconda.
Ripetendo il procedimento possiamo restringere rapidamente l’area di ricerca.
Abbiamo quindi due algoritmi differenti che risolvono lo stesso problema, ma uno può essere molto più efficiente dell’altro.
Che cosa significa “algoritmo efficiente”?
Quando valutiamo un algoritmo non ci interessa soltanto sapere se funziona.
Ci interessa anche sapere quanto bene funziona.
Un algoritmo può richiedere più o meno tempo, memoria o risorse del computer.
Immaginiamo due metodi che permettono entrambi di trovare una determinata informazione.
Il primo richiede cento operazioni.
Il secondo ne richiede dieci.
Entrambi producono il risultato corretto, ma il secondo potrebbe essere considerato più efficiente.
Quando la quantità di dati diventa enorme, questa differenza può diventare fondamentale.
Un algoritmo leggermente più efficiente su dieci elementi può sembrare irrilevante.
Su milioni o miliardi di elementi può invece fare una differenza enorme.
E gli algoritmi dei social network?
Quando sentiamo dire:
“È colpa dell’algoritmo”
stiamo spesso semplificando un sistema molto più complesso.
Una piattaforma social può utilizzare numerosi algoritmi per decidere quali contenuti suggerire.
Il sistema potrebbe tenere conto, per esempio, dei contenuti con cui abbiamo interagito, delle persone che seguiamo, del tempo trascorso su determinati post, dei nostri interessi apparenti e di molti altri segnali.
Il risultato potrebbe essere una classifica dei contenuti considerati più interessanti per noi.
In questo caso possiamo immaginare qualcosa del genere:
Input: informazioni disponibili sulle interazioni.
Elaborazione: applicazione di regole, modelli e calcoli.
Output: elenco dei contenuti da mostrarci.
Naturalmente i sistemi reali sono molto più complessi, ma la struttura generale rimane quella.
Algoritmi e intelligenza artificiale
Anche l’intelligenza artificiale utilizza algoritmi.
Qui però è importante evitare una semplificazione.
Un moderno sistema di IA non funziona necessariamente come una lunga lista di istruzioni scritte manualmente del tipo:
“Se l’utente scrive questa parola, rispondi in questo modo.”
Sistemi come quelli basati sul machine learning utilizzano algoritmi per apprendere modelli e relazioni partendo da grandi quantità di dati.
L’algoritmo rimane quindi fondamentale, ma il comportamento finale può essere il risultato di un processo di apprendimento molto più complesso rispetto a un normale programma basato su regole fisse.
L’algoritmo non pensa
Un ultimo punto merita attenzione.
Tendiamo spesso ad attribuire agli algoritmi caratteristiche umane.
Diciamo che:
- “l’algoritmo vuole”,
- “l’algoritmo preferisce”,
- “l’algoritmo ha deciso”.
Sono espressioni comode, ma non dobbiamo dimenticare che dietro un algoritmo esistono regole, obiettivi, dati e scelte progettuali.
Un algoritmo tradizionale non prova preferenze e non possiede intenzioni.
Esegue un procedimento.
Questo non significa che i suoi risultati siano sempre neutrali o perfetti.
Se i dati utilizzati sono sbagliati, le regole sono progettate male oppure l’obiettivo scelto è discutibile, anche il risultato può esserlo.
Per questo capire almeno a grandi linee che cosa sia un algoritmo è importante non soltanto per chi programma.
È una piccola forma di cittadinanza digitale.
In fondo utilizziamo algoritmi da sempre
L’informatica ha reso gli algoritmi estremamente potenti, veloci e complessi, ma l’idea di fondo è antichissima.
Ogni volta che descriviamo una procedura precisa per ottenere un risultato stiamo ragionando in modo algoritmico.
- Preparare una ricetta.
- Seguire una strada.
- Calcolare una percentuale.
- Ordinare una serie di documenti.
- Cercare un nome in un elenco.
Il computer ha semplicemente portato questo concetto a una scala completamente diversa.
Per questo, la prossima volta che sentiremo pronunciare la misteriosa frase:
“Lo ha deciso l’algoritmo”
potremmo tradurla mentalmente in qualcosa di meno inquietante:
“Un sistema ha applicato una serie di regole e calcoli a determinati dati, producendo quel risultato.”
Forse è meno affascinante.
Ma è decisamente più vicino alla realtà.
Piccolo vocabolario dell’algoritmo
Le immagini e i testi presenti possono essere realizzati con il supporto di strumenti di Intelligenza Artificiale generativa, nell'ambito di una cooperazione consapevole tra intelligenza umana e artificiale. I contenuti sono selezionati, verificati e revisionati con responsabilità editoriale umana.
Seguimi anche sul canale WhatsApp per non perderti nessuna novità!

Commenti
Posta un commento