Come gli algoritmi modellano la tua vita digitale: una guida per non programmatori

9

Tocchi uno schermo. Viene visualizzato il contenuto. Non l’hai visto accadere, ma qualcuno, o qualcosa, ha deciso cosa mostrarti.

Gli algoritmi sono gli architetti invisibili della moderna Internet. Dettano le classifiche di ricerca, curano i feed social e instradano il tuo traffico. Ma cos’è un algoritmo nel mondo reale, al di là del gergo tecnologico?

Nella sua forma più semplice, un algoritmo è una ricetta passo dopo passo. È un insieme di istruzioni per risolvere un problema o completare un’attività. Potrebbe essere semplice come aggiungere due numeri o complesso come una rete neurale che riconosce il tuo volto. Queste regole sono la spina dorsale di ogni applicazione software e garantiscono che le attività vengano eseguite in modo efficiente. Sono il “come” dietro il “cosa”.

Per capire perché questo è importante, dobbiamo guardare come funzionano effettivamente i computer.

La logica passo passo del codice

I computer sono obbedienti ma letterali. Non indovinano. Se vuoi che un computer faccia qualcosa, devi scrivere un programma che gli dica esattamente cosa fare, passo dopo passo. Il computer esegue queste istruzioni meccanicamente.

Quando scrivi quel programma, devi scegliere il metodo. Questo metodo è l’algoritmo. È la tecnica utilizzata per portare a termine il lavoro.

Considera questo: un amico sta arrivando all’aeroporto. Devono arrivare a casa tua. Hai quattro diversi algoritmi da seguire. Ognuno li porta alla stessa destinazione, ma il percorso è completamente diverso.

L’algoritmo dei taxi
* Vai al posteggio dei taxi.
* Sali su un taxi.
* Dai all’autista il tuo indirizzo.

L’algoritmo Chiamami
* Chiama il tuo cellulare quando l’aereo atterra.
* Incontro ritiro bagagli esterno.

L’algoritmo del noleggio auto
* Prendi la navetta fino al banco di noleggio.
* Noleggia un veicolo.
* Guida utilizzando il GPS fino a casa tua.

L’algoritmo del bus
* Prendi l’autobus numero 70 fuori dal ritiro bagagli.
* Trasferimento all’autobus 14 su Main Street.
* Scendere su Elm Street.
* Cammina per due isolati verso nord.

Funzionano tutti e quattro. Nessuno è “sbagliato”. Ma differiscono notevolmente in termini di costi e tempi. Il taxi è veloce ma costoso. L’autobus è economico ma lento. Scegli l’algoritmo in base alle circostanze.

Nel software, facciamo la stessa cosa. Scegliamo la tecnica adatta ai dati, al tempo e al budget.

Perché l’ordinamento è più importante di quanto pensi

Nella programmazione, spesso esistono molti modi per risolvere un singolo problema. Ogni modo ha dei compromessi. Da nessuna parte questo è più evidente che nell’ordinamento.

I computer trascorrono moltissimo tempo a ordinare elenchi. Nomi. Prezzi. Date. Risultati della ricerca. Se lo smistamento è inefficiente, l’intero sistema rallenta.

I ricercatori studiano gli algoritmi di ordinamento da decenni. Ecco cinque approcci comuni:

  • Ordinamento contenitore
  • Unisci ordinamento
  • Ordinamento bolle
  • Ordinamento della shell
  • Ordinamento rapido

Quale usi?

Se hai un milione di numeri interi compresi tra 1 e 10, il bin sort è il vincitore. È veloce e semplice per piccoli intervalli. Se hai un milione di titoli di libri, Quicksort è probabilmente la scelta migliore. Gestisce meglio i dati non strutturati. Conoscere i punti di forza e di debolezza consente agli sviluppatori di scegliere lo strumento giusto. Scegli quello sbagliato e la tua app sembrerà lenta.

I principali tipi di algoritmi

Gli algoritmi non riguardano solo l’ordinamento. Rientrano in ampie categorie in base a ciò che stanno cercando di ottenere. Dalla crittografia all’apprendimento automatico, il tipo di algoritmo definisce il modo in cui i dati vengono elaborati.

Algoritmi di ricerca

Questi sono progettati per recuperare informazioni da una struttura dati. Pensa alla ricerca lineare (controllando ogni elemento) o alla ricerca binaria (tagliando ripetutamente l’elenco a metà). I motori di ricerca e le query sui database fanno molto affidamento su questi per trovare ciò che hai digitato in millisecondi.

Algoritmi di programmazione dinamica

Questo approccio ottimizza i problemi complessi suddividendoli in sottoproblemi più semplici. Evita di ricalcolare più e più volte gli stessi dati. Gli esempi includono la generazione della serie di Fibonacci, la risoluzione del problema dello zaino (massimizzazione del valore in una borsa limitata) o la ricerca del percorso più breve in un grafico, come con gli algoritmi Bellman-Ford o Floyd-Warshall.

Algoritmi golosi

Gli algoritmi golosi prendono la migliore opzione locale in ogni passaggio. Non guardano il quadro generale. Presumono che la migliore scelta immediata porti al miglior risultato complessivo. Questo funziona bene per problemi come trovare l’albero di copertura minimo in una rete (algoritmi di Kruskal e Prim). Ma a volte essere avidi ti porta in un vicolo cieco.

Algoritmi di backtracking

Utilizzati per la soddisfazione dei vincoli, questi algoritmi costruiscono i candidati passo dopo passo. Se un candidato fallisce un controllo, “torna indietro” e tenta un percorso diverso. I risolutori di Sudoku e il problema N-Queens sono esempi classici. È essenzialmente prova ed errore con un ricordo degli errori passati.

Algoritmi di apprendimento automatico

Ciò consente ai computer di apprendere dai dati anziché seguire regole codificate. Prevedono risultati o prendono decisioni. Sono suddivisi in apprendimento supervisionato (addestrato su dati etichettati), apprendimento non supervisionato (individuazione di modelli in dati non etichettati), apprendimento per rinforzo (apprendimento attraverso ricompensa/punizione) e apprendimento profondo (utilizzo di reti neurali).

Algoritmi randomizzati

A volte il determinismo è troppo lento. Gli algoritmi randomizzati introducono la casualità nella loro logica. Usano approcci probabilistici per risolvere problemi in cui un metodo rigoroso e graduale è inefficiente. Il metodo Monte Carlo e il Quicksort randomizzato sono ottimi esempi.

Algoritmi di forza bruta

Questo è l’approccio “provare tutto”. La forza bruta esplora sistematicamente tutte le possibili soluzioni. È semplice. Garantisce una soluzione se ne esiste una. Ma per problemi grandi o complessi, è dolorosamente inefficiente. È l’equivalente digitale di provare ogni chiave su un anello finché non ne entra una.

Queste categorie si sovrappongono. Un algoritmo può essere sia di programmazione dinamica che greedy in diversi contesti. La chiave è comprendere i compromessi.

L’impatto umano

Spesso pensiamo agli algoritmi come a una logica fredda. Sono. Ma sono anche specchi delle nostre scelte. Quando diamo priorità alla velocità, prendiamo i taxi. Quando diamo priorità ai costi, otteniamo gli autobus. Quando diamo priorità all’accuratezza, potremmo accettare la lentezza.

Nella tua vita digitale, raramente vedi il codice. Vedi solo il risultato. Il feed che capisce il tuo umore. La mappa che evita il traffico. Il risultato della ricerca che risponde alla tua domanda prima che tu finisca di digitare.

Non è magia. Sono solo passi.

Ma chi decide i passaggi? E chi decide il peso di ogni passo?

Questa è la vera domanda.

La prossima volta che scorri, chiediti: quale algoritmo sta guidando lo spettacolo? E perché ha scelto quel contenuto per te?

La risposta potrebbe cambiare il modo in cui guardi lo schermo.

Come gli algoritmi traducono gli input in risultati reali

Un algoritmo è semplicemente un insieme di istruzioni. Richiede input. Elabora quei dati. Sputa output. Il linguaggio in cui lo scrivi (Python, C++, Java) non cambia la meccanica di base. È la logica che conta. E questa logica è sempre alla ricerca di una soluzione ottimale, anche se “ottimale” significa qualcosa di diverso a seconda del compito.

L’output non è sempre un singolo numero o una risposta sì/no. Varia notevolmente in base al problema che il codice sta cercando di risolvere.

Risoluzione dei problemi e classificazione

Alcuni algoritmi sono creati per trovare risposte specifiche. Pensa a Google Maps che calcola il percorso più breve tra due punti. O un semplice script che ordina un elenco disordinato di numeri. Questi sono i classici risultati della risoluzione dei problemi.

Ma nell’apprendimento automatico, l’output è spesso una decisione. Un filtro antispam non si limita a ordinare le e-mail; li classifica. Questa e-mail è spazzatura? Sì o no. Un motore di raccomandazione non si limita a elencare gli elementi. Decide quali prodotti è più probabile che acquisti in questo momento. Sta facendo una scelta per te.

Numeri, strutture e immagini

A volte il risultato è solo un numero grezzo. Gli algoritmi elaborano le equazioni per trovare le radici. Calcolano le medie statistiche da enormi set di dati. Altre volte, producono strutture di dati. Un algoritmo di ordinamento riorganizza un array. Un algoritmo grafico identifica i componenti connessi, essenzialmente mappando le relazioni all’interno di una rete.

Poi c’è il lato visivo. Gli algoritmi di computer grafica prendono dati numerici grezzi e li trasformano in immagini. I motori di rendering nei videogiochi generano immagini 2D da modelli 3D. Senza questi algoritmi, i mondi in cui giochiamo sarebbero solo linee su uno schermo.

Testo, segnali e azioni fisiche

Gli algoritmi di elaborazione del linguaggio naturale producono testo. Generano risposte simili a quelle umane, traducono lingue o riassumono lunghi articoli. Non è più solo codice; è conversazione.

Nella robotica e nei sistemi integrati, l’output è fisico. Gli algoritmi inviano segnali a motori e attuatori. Potrebbero accendere una luce. Oppure potrebbero coordinare i movimenti complessi di un braccio robotico su una catena di montaggio. L’istruzione digitale diventa un’azione fisica.

Il quadro generale

Che tu stia identificando modelli, esaminando i dati iniziali o trovando un processo matematico, algoritmi efficienti automatizzano il lavoro pesante. Gestiscono gli input e le variabili in modo da non doverlo fare tu.

La domanda non è proprio come funzionano. E’ quello che saranno capaci di fare dopo.

Gli algoritmi sono parte integrante del modo in cui i sistemi informatici elaborano i dati. La maggior parte dei programmi per computer sono costituiti da algoritmi che seguono istruzioni specifiche per svolgere un compito semplice.

Questo articolo è stato aggiornato insieme alla tecnologia AI, quindi verificato e modificato da un editor di HowStuffWorks.

Ecco alcuni link interessanti:

  • Come l’intelligenza artificiale sta cambiando totalmente tutto
  • whatis.com: algoritmo
  • Come funziona Java
  • Come funziona la programmazione in C
  • Come funzionano i PC
  • Come funziona la crittografia
  • Come funziona la compressione dei file

Domande frequenti sugli algoritmi

Cos’è un algoritmo in termini semplici?
Quando dici a un computer cosa fare, scegli anche come lo fa. Questo è l’algoritmo. È la tecnica di base o un insieme di istruzioni utilizzate per portare a termine il lavoro.

Qual è un esempio di algoritmo?
Una ricetta è un classico esempio. È un elenco finito di istruzioni. Un algoritmo può essere più specifico, ma il concetto è lo stesso.

Quali sono le tre parti di un algoritmo?
Inserimento dati. Elaborazione dei dati. Uscite di dati. Metti qualcosa, la macchina fa qualcosa e ottieni qualcosa.

Qual è l’uso dell’algoritmo nella programmazione dei computer?
Gli algoritmi sono la spina dorsale dell’elaborazione dei dati. La maggior parte dei programmi per computer sono semplicemente raccolte di algoritmi che seguono istruzioni specifiche per svolgere compiti semplici. Senza di loro non c’è automazione. Nessuna logica. Solo hardware grezzo in attesa di indicazioni.