Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Vai al contenuto

Che cos’è un algoritmo?

Cosa significa algoritmo? Un algoritmo, secondo la definizione classica, è una sequenza finita e ben definita di istruzioni o passi che guida l’esecuzione di un compito o risolve un problema.

La parola algoritmo deriva dal nome di un matematico persiano del IX secolo, Muhammad ibn Musa al-Khwarizmi, il cui nome è stato reso come “algoritmo”. La parola “algoritmo” è stata pertanto coniata per descrivere i metodi sistematici di risoluzione dei problemi matematici che egli ha sviluppato, in particolare in relazione allo sviluppo dell’algebra.

Esempio facile di algoritmo: cucinare la carbonara


Cerchi un hosting economico per il tuo sito o blog? Tophost ti aspetta (clicca qui)

Facciamo finta, tanto per capirci, di scrivere l’algoritmo della carbonara in Python. Se dovessimo ipoteticamente programmare qualcosa del genere, potremmo scrivere come segue.

Ogni riga rappresenta un passo, con il significato specificato:

  • import “prende in considerazione” quello che ci serve;
  • le variabili uova, pecorino sono quelle che vengono istanziate all’interno dell’algoritmo per fare la ricetta (uova, pecorino, ecc.)
  • gli ingredienti sono quelli che “consultiamo” dalla ricetta e che inseriamo nelle variabili del punto precedente;
  • idem per pentola, padella e via dicendo
  • funzioni come spaghetti.cuoci() hanno significato di azioni da eseguire nel nostro algoritmo della ricetta :-)
# Importa le "librerie" necessarie
import ingredienti
import utensili

# Prepara gli ingredienti
uova      = ingredienti.uova(2)
pecorino  = ingredienti.formaggio("pecorino romano", 50, "grammi")
guanciale = ingredienti.carne("guanciale", 100, "grammi")
spaghetti = ingredienti.pasta("spaghetti", 200, "grammi")
sale      = ingredienti.spezia("sale", "q.b.")
pepe      = ingredienti.spezia("pepe nero", "q.b.")

# Prepara gli utensili
pentola   = utensili.pentola()
padella   = utensili.padella()
ciotola   = utensili.ciotola()

# Fase di cottura
pentola.riempi(d'acqua)
pentola.porta_a_ebullizione()
pentola.salare_acqua(sale)

spaghetti.aggiungi_in_acqua(pentola)
spaghetti.cuoci(10)  # Tempo di cottura specifico per gli spaghetti

guanciale.taglia_a_cubetti()
padella.scalda(guanciale)
padella.rosseggia(guanciale)

# Fase di preparazione delle uova
uova.rompi_in_ciotola()
uova.mescola(pecorino)
uova.pepata(pepe)

# Combinazione degli ingredienti
ciotola.unisci(spaghetti)
ciotola.unisci(guanciale)
ciotola.unisci(uova)

# Servi la Carbonara
ciotola.servi()

Possono esistere esempi di algoritmi più complicati, ovviamente, e non ci sono limiti alla lunghezza della procedura in sè. Non tutti si possono formalizzare come “lista della spesa” (perchè, ad esempio, devono gestire degli imprevisti: pensiamo all’algoritmo di previsione del tempo di domani), anche se in molti casi sono considerati algoritmi anche le “procedure”, ovvero le sequenze di operazioni necessarie a raggiungere uno scopo ben specifico. Quelle seguenti sono tratte dal libro Spaghetti Hacker di Ciccarelli, Monti. In questo caso ogni riga rappresenta una specifica operazione, sia esplicita “cerca X” che implicita (un numero che, ad esempio, potrebbe coincidere con una password che è stata incautamente annotata nella procedura).

IMG 1635 scaled

Studio e classificazione degli algoritmi

Gli algoritmi sono fondamentali nell’informatica e nella programmazione, in quanto forniscono un metodo sistematico per risolvere problemi e compiere operazioni. Possono essere pensati come “ricette” dettagliate che specificano come raggiungere un obiettivo attraverso una serie di passi logici. Vengono usati, in modo analogo ma contestuale al mondo dei numeri e delle variabili, anche nella matematica.

Più formalmente, un algoritmo è una sequenza finita di passi ben definiti, non ambigui e eseguibili in un ordine preciso, che trasforma un insieme di input in un insieme di output, risolvendo così un problema specifico o compiendo una specifica operazione.

Questa definizione, ad ogni modo, rischia di rimanere incompleta e di non tenere conto dei recenti sviluppi in ambito di intelligenza artificiale, ad esempio. Per quanto non esista ad oggi una classificazione degli algoritmi universalmente accettata, anche perchè l’informatica non ha nemmeno 100 anni da oggi (se consideriamo il primo algoritmo della storia come quello di Turing, che formalizzò una macchina per stampare 0 e 1 all’infinito già nel 1936!): motivo per cui ci accontentiamo

Il primo algoritmo della storia

Per quanto non esistano classificazioni certe nell’ambito, e vengano riportati come primo algoritmo ad esempio quello di Ada Lovelace nel 1843, a cui si deve di aver eseguito un compito passo-passo su macchina automatica (il calcolatore elettromeccanico inventato anni prima da Charles Babbage). Secondo altre fonti come la matematica Hannah Fry nel best seller Hello world, gli algoritmi possono essere suddivisi in base al tipo di operazione effettuata.

Algoritmi basati su regole

Sono gli algoritmi più semplici e lineari, e vengono studiati nei corsi di informatica: si esplicano come sequenze di passi e rispondono alle definizioni che abbiamo ribadito in precedenza. Un esempio di regole sono i passi, per cui ad esempio per mettere in modo la macchina:

  • passo 1: apri la macchina col telecomando
  • passo 2: apri lo sportello
  • passo 3: entra in macchina
  • passo 4: inserisci la chiave nel cruscotto
  • passo 5: metti in moto

Sono algoritmi deterministici, spesso usati per imparare a programmare a livello medio-base.

Ordinamento

Si parte dall’ordinamento nel senso più generale possibile: ordinare numeri, lettere, nomi, liste di utenti, risultati di ricerca, … A partire dai classici algoritmi di ordinamento come selection sort, insertion sort e così via, si è arrivati alle SERP di Google, che propongono un criterio per ordinare dei risultati web prelevati dalla rete, ma anche i film suggeriti da Amazon Video e il percorso da effettuare per tornare a casa.

Anche un algoritmo di scacchi come Deep Blue – il cervellone elettronico che riuscì a battere il campione di scacchi Kasparov nel 1997 – effettuava la generazione dei “percorsi” del giocatore ovvero di tutte le mosse possibili, selezionando il percorso migliore (in termini probabilistici di vittoria per il computer). In informatica teorica, per inciso, è stato visto che ci sono problemi che si possono ricondurre formalmente a problemi di altro tipo (di più agevole risoluzione), la cui soluzione è valida anche per il problema originale.

Sono algoritmi deterministici e a volte di natura probabilistica.

Classificazione

Gli algoritmi di questa categoria, di base, servono a clusterizzare o raggruppare dati eterogenei: i video su Youtube, ad esempio, che vengono mostrati sulla base delle ricerche precedenti degli utenti, oppure le ads che ci assillano sul web per cui vediamo pubblicità di scarpe su blog a tema (o probabilmente per cui vedete annunci contestuali a computer e cellulari su questa pagina :-) ).

Sono algoritmi deterministici e spesso di natura probabilistica.

Associazione

Questo tipo di algoritmi creano relazioni, come potrebbero esserlo i match che escono su Tinder o Facebook dating, ma sono anche tipici dei criteri di raccomandazione. Anche in questo caso siamo di fronte ad algoritmi che possono approssimare la soluzione per difetto: è il caso dell’utente Reddit che si accorse, ad un certo punto, che aver acquistato una mazza da baseball su Amazon inducesse, nel 2013, l’algoritmo a suggerire la sezione “ti potrebbero interessare” articoli come passamontagna e tirapugni.

Sono algoritmi deterministici o spesso di natura probabilistica.

Filtro

Sono algoritmi ad esempio adibiti a filtrare il rumore dal segnale di interesse, ad esempio, e che sono in grado di agire su file audio, video e multimediali in genere. Sono algoritmi che, il più delle volte, si basano su fondamenti teorici di matematica molto complessi. I filtri, in senso lato, inducono anche le “bolle” in cui gli utenti dei social tendono a leggere e interagire solo con altri utenti simili.

Sono algoritmi deterministici o spesso di natura probabilistica.

Machine learning

Sono algoritmi differenti da quelli tradizionali, nel senso che non c’è una sequenza di regole da seguire prefissata: come nella vita reale, la macchina apprende dal mondo esterno il comportamento migliore, premiando i comportamenti corretti (score +1) e punendo “virtualmente” quelli scorretti (score -1), sulla falsariga dell’idea del rinforzo e del comportamentismo da tempo noto in psicologia. L’apprendimento macchina si basa su questi concetti e li applica per fare in modo di realizzare algoritmi che usino criteri di imitazione (della scrittura, ad esempio), della generazione di linguaggio naturale, di deepfake e così via.

Proprietà degli algoritmi

le proprietà interessanti degli algoritmi sono essenzialmente legate agli algoritmi deterministici (cioè quelli che restituiscono sempre lo stesso risultato) e in parte a quelli probabilistici (che danno risultati con margine di errore variabile e che non danno soluzioni esatte), senza contare i non deterministici che sono per loro natura imprevedibili (l’algoritmo per le previsioni meteo, ad esempio).

La definizione classica di algoritmo sottolinea l’importanza della finitezza (un numero finito di passi), della precisione (i passi devono essere chiari e non ambigui) e dell’eseguibilità (i passi devono poter essere eseguiti in pratica) degli algoritmi. Gli input sono i dati di ingresso su cui l’algoritmo opera, mentre gli output sono i risultati prodotti dall’algoritmo dopo aver elaborato gli input.

Gli algoritmi possono essere scritti in diversi linguaggi di programmazione o espressi in modo più generale, indipendentemente da un linguaggio specifico. Possono variare in complessità, dalla risoluzione di problemi semplici come ordinare una lista di numeri, fino a compiti più complessi come il riconoscimento vocale, la crittografia o l’elaborazione delle immagini.

Un buon algoritmo dovrebbe essere corretto (risolve il problema in modo accurato), efficiente (impiega risorse come tempo e memoria in modo ottimale) e chiaro (facilmente comprensibile da chiunque lo legga). Gli algoritmi sono essenziali in una vasta gamma di applicazioni, tra cui l’informatica, l’ingegneria, la matematica, la biologia computazionale e molte altre discipline in cui è necessario risolvere problemi complessi.

Algoritmi in pseudo-codice

Il pseudocodice è un modo informale di descrivere l’implementazione di un algoritmo utilizzando una combinazione di linguaggio naturale e costrutti di programmazione semplificati. Non è legato a un linguaggio di programmazione specifico e viene utilizzato per descrivere logicamente e in modo chiaro l’approccio di risoluzione di un problema senza preoccuparsi dei dettagli sintattici di un linguaggio di programmazione reale.

L’obiettivo del pseudocodice è rendere più comprensibile l’approccio algoritmico a chiunque legga il codice, senza richiedere una conoscenza specifica del linguaggio di programmazione utilizzato per l’implementazione finale. Spesso il pseudocodice utilizza costrutti come “se”, “altrimenti”, “per”, “mentre” per descrivere cicli e decisioni, ma questi costrutti possono variare a seconda dello stile e delle convenzioni dell’autore.

Ecco un esempio semplificato di pseudocodice per l’algoritmo di ordinamento “Bubblesort”:

procedure Bubblesort(A: array of integers)
n := length(A)
for i from 0 to n-1
for j from 0 to n-1-i
if A[j] > A[j+1]
swap A[j] and A[j+1]
end if
end for
end for
end procedure

Come puoi vedere, l’esempio sopra utilizza una sintassi simile a un linguaggio di programmazione, ma senza essere vincolato da regole specifiche di formattazione o sintassi. Questo rende l’approccio algoritmico più comprensibile e più accessibile, specialmente quando si spiega o si documenta un algoritmo.

Da non perdere 👇👇👇



Questo sito web esiste da 4405 giorni (12 anni), e contiene ad oggi 3907 articoli (circa 3.125.600 parole in tutto) e 12 servizi online gratuiti. – Leggi un altro articolo a caso
Non ha ancora votato nessuno.

Ti sembra utile o interessante? Vota e fammelo sapere.


Cerchi un hosting economico per il tuo sito o blog? Tophost ti aspetta (clicca qui)

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.