Introduzione - Storia degli algoritmi
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Introduzione Gli algoritmi oggi controllano tantissimi aspetti delle nostre vite: ci sono algorit- mi che cercano per noi informazioni sul web, che decidono i prezzi dei biglietti aerei e quali pubblicità vedremo su internet, algoritmi che progettano serie tv, algoritmi che ci guidano passo passo nel raggiungere una destinazione usan- do un navigatore o un programma su uno smartphone, algoritmi che decidono quali notizie vediamo nei social network. Ma cosa è, esattamente, un algoritmo? Sono state proposte diverse definizio- ni, di cui parleremo in maggior dettaglio in seguito; per il momento possiamo dire che un algoritmo è simile a una ricetta: è un procedimento per giungere a un risultato (ad esempio, una torta) a partire da dati o informazioni in ingresso (gli ingredienti). Questa metafora ci consente anche di chiarire la relazione tra programmi e algoritmi: gli algoritmi sono la parte teorica di un programma per computer e esistono indipendentemente dall’essere stati implementati in uno o più programmi; questo è simile a quello che avviene per le ricette, che rappre- sentano la parte teorica della cucina: una ricetta esiste indipendentemente del fatto che sia stata implementata (preparando il piatto corrispondente) una o più volte. Da un punto di vista storico, i primi algoritmi di cui abbiamo traccia risalgo- no a circa 4000 anni fa, nell’antico Egitto e a Babilonia, ed erano essenzialmen- te algoritmi di calcolo numerico, come gran parte degli algoritmi fino al secolo scorso. Ma la vera grande rivoluzione che ha portato gli algoritmi a diffondersi non ha a che fare con il calcolo numerico, bensì con due fattori: la capacità di manipolare informazioni di qualsiasi natura, non solo numeri, e la diffusione
12 breve e universale storia degli algoritmi dei computer e il loro collegamento nell’artefatto più complesso realizzato dall’uomo - il World Wide Web, la rete di documenti e contenuti che si poggia su Internet, la rete di reti di computer. In questo libro ripercorriamo le tappe dell’incredibile ascesa al potere degli algoritmi: nel capitolo seguente cercheremo di comprendere meglio cosa sia un algoritmo, con esempi di algoritmi creati da personaggi che non vi aspettereste, come Giulio Cesare, Edgar Allan Poe e Sherlock Holmes, solo per citarne alcuni. I due capitoli successivi descrivono, per sommi capi, le idee e le persone che hanno portato alla creazione del computer, ovvero di una macchina in grado di eseguire qualsiasi algoritmo, e di Internet e del World Wide Web. Nel quarto capitolo parleremo degli algoritmi usati dai colossi dei nostri giorni: Google, Facebook, Amazon e Netflix; come vedremo, i loro sistemi sono accomunati dal fatto di cercare di capire cosa ci piaccia. Poi affronteremo aspetti di cui si parla poco: fino ad ora ci siamo concentrati sull’interazione tra le persone e gli algoritmi, ma cosa succede quando gli algo- ritmi interagiscono tra di loro? E vedremo anche come sia possibile costruire, tramite algoritmi, un sistema monetario decentralizzato (Bitcoin) basato su una tecnologia interessantissima ma al tempo stesso piena di insidie, la Blockchain. Infine, parleremo dei recentissimi progressi nel campo dell’intelligenza artifi- ciale, ottenuti con idee algoritmiche che risalgono alla metà del secolo scorso ma che solo oggi, disponendo di potenza di calcolo adeguata e grandi quantità di dati (i famigerati Big Data), si stanno manifestando. Per i lettori più arditi, in appendice riportiamo alcuni esempi di program- mi in diversi linguaggi di programmazione; alla fine di ogni capitolo trovate un indovinello algoritmico, la cui soluzione è proprio un algoritmo. Se volete verificare la correttezza della soluzione trovata, o non siete riusciti a risolverli, le soluzioni sono alla fine di questo libro.
capitolo 1 Dixit Algorizmi L’informatica riguarda i computer non più di quanto l’astronomia riguardi i telescopi. - Edsger Wybe Dijkstra Metodo. Procedura. Regola (o insieme di regole). Procedimento. Questi sono alcuni dei nomi con i quali ci riferiamo comunemente ad algoritmi veri e propri. E di solito usiamo il termine algoritmo solo per indicare qualcosa collegato a attività informatiche, anche molto diverse tra di loro: “gli algoritmi controllano i mercati azionari”, “gli algoritmi decidono i prezzi dei biglietti aerei” e “un algoritmo sceglie la tua anima gemella”. Nell’immaginario collettivo, alla parola algoritmo è associato un alone di mistero: cosa faccia, e quindi cosa sia, un algoritmo, non è dato saperlo. Se poi proviamo a cercare su internet, o nei testi di informatica, troviamo definizioni che non sembrano essere di grande aiuto: Wikipedia propone, ad esempio, “un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi elementari”. La definizione è sicuramente corretta, ma in parecchi rimarrà il dubbio: come fanno questi passi elementari a controllare i mercati azionari, scegliere il prezzo di un biglietto aereo o, addirittura, trovarci l’anima gemella? Per rispondere alla domanda qui sopra (ma senza grosse garanzie per quello che riguarda la vostra anima gemella) dobbiamo innanzitutto chiarire cosa sia, esattamente, un algoritmo.
14 breve e universale storia degli algoritmi una semplice moltiplicazione Facciamo un passo indietro di circa ottocento anni e immaginiamo di essere intorno all’anno 1200, nell’antica repubblica di Pisa, una delle principali repub- bliche marinare dell’epoca. Avete appena concluso una vendita, ben 35 tessuti in seta al buon prezzo di 12 denari per ogni tessuto. Per calcolare il prezzo to- tale dovete fare una semplice moltiplicazione; usando la notazione in vigore al tempo, ovvero i numeri romani, possiamo scrivere: X X X V × X I I = ?? Qui ci accorgiamo che abbiamo un problema, non sappiamo fare la molti- plicazione con il sistema di numerazione romano: all’epoca, in effetti, per le operazioni matematiche usavano un abaco, ovvero uno strumento di calcolo si- mile, in alcune sue versioni, a un pallottoliere. Noi invece abbiamo imparato già alle elementari come fare le moltiplicazioni, con il metodo chiamato in colonna, che mostriamo in Figura 1.1. Il calcolo del prodotto di due numeri viene ricondotto al calcolo di prodotti semplici (il primo numero per ogni cifra del secondo numero) e di somme. Ab- biamo quindi risolto un problema (calcolo del prodotto di due numeri) usando dei passi elementari (prodotto di un numero per una cifra e semplici somme): abbiamo appena usato un algoritmo! Un algoritmo che conoscete fin dalle scuole elementari ma che probabilmente non avete mai chiamato con questo nome! Con questo algoritmo chiunque è in grado di calcolare il prodotto di due numeri, indipendentemente da quanto siano grandi. Chiaramente, più grandi 35 × 12 = 70 35 420 Figura 1.1: Moltiplicazione in colonna.
capitolo 1 - dixit algorizmi 15 sono i numeri e maggiore sarà, in generale, il tempo necessario a calcolare il loro prodotto. La scelta di questo algoritmo come primo esempio non è casuale: viene de- scritto nell’opera Algoritmi de Numero Indorum di Al-Khuwarizmi. In questa opera fondamentale, scritta in arabo con il titolo Kitab al-hisab al-hindi presu- mibilmente intorno all’anno 825, ma di cui a noi sono giunte solo traduzioni in latino, l’autore illustra il sistema di numerazione indiano, che usa un simbolo speciale per indicare lo zero, e le regole per fare le quattro operazioni e per il calcolo delle frazioni. Questa opera, nelle sue diverse traduzioni, avrà gran- de diffusione in tutta europa e dalla latinizzazione del nome di Al-Khuwarizmi nasce il termine algoritmo. Il fatto che le cifre indiane siano arrivate in Europa attraverso Al-Khuwarizmi chiarisce perché spesso ci si riferisca ad esse con il nome di cifre arabe (o anche cifre indo-arabe). il liber abaci di fibonacci Tra le traduzioni dell’opera di Al-Khuwarizmi c’è un testo scritto nel 1202 da un matematico pisano, Leonardo Pisano detto Fibonacci: il Liber Abaci, ovvero il Libro dell’Abaco, inteso come calcolo. Fibonacci non si limita a una semplice traduzione dell’opera di Al-Khuwarizmi ma, come lui stesso ammette nel Liber Abaci, integra la conoscenza della matematica indiana e araba, ottenuta leg- gendo le opere di Al-Khuwarizmi, con la matematica Euclidea. Il risultato è un testo di importanza fondamentale in quanto, per la prima volta, la materia vie- ne esposta in maniera didattica dedicata non ai matematici ma ai commercianti, che erano infatti i veri destinatari del testo. Secondo Pietro Cossali, autore di quella che viene considerata la prima ope- ra di storia della matematica scritta in italiano, pubblicata in due volumi nel 1797 e nel 1799, il Liber Abaci è stato il principale artefice della diffusione delle conoscenze dell’algebra e dell’aritmetica moderne: da Pisa ha raggiunto tutta la Toscana, e in particolare Firenze; da qui si è diffuso in tutta Italia, compresa Venezia che ha contribuito a farlo conoscere in tutta Europa. La prima edizio-
16 breve e universale storia degli algoritmi Al-Khuwarizmi Abū Ja‘far Muḥammad ibn Mūsā Al- Khuwarizmi nasce intorno al 780 d.C. in Corasmia, una regione asiatica corri- spondente all’odierna Khorezm in Uzbe- kistan. Il Califfo al-Mamūn lo nominò responsa- bile della Casa della Saggezza, il leggen- dario polo culturale arabo che è arriva- to a contenere, al suo apice, più di mez- zo milione di volumi. La Casa della Sag- gezza era stato fondata dal padre di al- Mamūn, il Califfo Harun Al-Rashid, noto anche per essere il protagonista di parecchie storie de Le mille e una notte. Sotto la direzione di Al-Khwarizmi, le principali opere matematiche del periodo greco-ellenistico, persiane, babilonesi e indiane furono tradotte in arabo. Intorno all’825 d.C. Al-Khwarizmi scrisse un testo, poi tradotto in latino con il titolo Algoritmi de Numero Indorum, considerato il primo trattato completo sul sistema numerale indiano; il termine algebra deriva proprio dal titolo arabo di questo libro. Al-Khwarizmi ha dato contributi anche in astronomia, scrivendo un te- sto, derivato da opere indiane e dal lavoro di Tolomeo, in cui mostrava come calcolare la posizione del Sole, della Luna e dei pianeti. Scrisse anche un testo di geografia, in cui elencava latitudine e longitudine di oltre duemila località che includevano città, mari, montagne, regioni, isole e fiumi. Visse fino all’anno 850 d.C. circa. Nella figura, un fran- cobollo commemorativo dei 1200 anni (circa) dalla nascita, stampato in Unione Sovietica nel 1983.
capitolo 1 - dixit algorizmi 17 ne del Liber Abaci, quella del 1202, è andata persa; a noi è giunta la seconda versione dell’opera, scritta da Fibonacci nel 1228. In questa seconda versione Fibonacci ha aggiunto del materiale, tra cui probabilmente anche i famosi numeri omonimi (numeri di Fibonacci), ovvero i numeri della sequenza (o successione) 1, 1, 2, 3, 5, 8, 13, 21, . . . Come possiamo vedere, a parte i primi due numeri (entrambi 1), ogni nume- ro è la somma dei due che lo precedono. Questa sequenza ha moltissime pro- prietà matematiche, comprese relazioni con la sezione aurea e con il Triangolo di Tartaglia; alcune moderne strutture dati informatiche (Heap di Fibonacci) sono state ispirate proprio da questa sequenza. Grazie alla diffusione di quest’opera, i numeri indiani hanno gradualmente spodestato, in tutta Europa, i numeri romani. A tal proposito, una curiosità: tra i primi a recepire l’importanza del Liber Abaci furono i banchieri, che pre- stavano denaro e avevano bisogno di calcolare gli interessi. Tuttavia, questo repentino cambio di scrittura, dai familiari numeri romani alle cifre di origine indiana, fu giudicato sospetto dai governanti dell’epoca: i banchieri furono ac- cusati di aver cifrato i loro libri allo scopo di renderli incomprensibili e quindi pagare meno tasse del dovuto; nel 1299 a Firenze fu addirittura emanata una legge (Statuto dell’Arte del Cambio) che proibiva l’uso delle cifre nelle scritture contabili. Da questi fatti deriva l’etimologia di cifrare, nel senso di codificare: in origine voleva solo indicare lo scrivere usando le cifre di origine indiana. come uscire da un labirinto L’algoritmo per moltiplicare due numeri, visto nella sezione precedente, è un esempio tipico di algoritmo di calcolo numerico. Vediamo adesso alcuni al- goritmi di tipo diverso, iniziando con quelli in grado di guidarci fuori da un labirinto.
18 breve e universale storia degli algoritmi Leonardo Pisano, detto Fibonacci Leonardo Pisano, detto Fibonacci, nasce intorno al 1170 a Pisa, figlio di un mercan- te. Da giovane, accompagnando il padre nei suoi viaggi, visse a Bugia, nell’odierna Algeria ed entrò in contatto con il mon- do arabo e con l’opera di Al-Khwarizmi. Comprese subito che il contenuto, per certi versi rivoluzionario, doveva essere diffuso a tutti, non solo ai matematici. Così, nel 1202, Fibonacci scrisse la sua opera monumentale, il “Liber Abaci”, che spiegava in un linguaggio com- prensibile i metodi (algoritmi!) per fare le operazioni matematiche di base (somme, sottrazioni, moltiplicazioni e divisioni). La pubblicazione del Liber Abaci diede a Fibonacci una grandissima notorietà: tra i suoi estimatori dell’epoca figura persino Federico II di Svevia, prima re di Sicilia e poi Imperatore del Sacro Romano Impero. Federico II cercò di convincere, invano, Fibonacci a trasferirsi alla sua corte, ebbe con lui un fitto rapporto epistolare e gli assegnò un vitali- zio. Parecchi studiosi sono convinti che la corrispondenza tra i due ebbe influenza diretta nella progettazione di Castel del Monte, la fortezza di Federico II, inserita dall’Unesco nella lista dei Patrimoni dell’umanità per l’armoniosa unione degli elementi culturali del Nord Europa, del mondo islamico e dell’antichità classica. Nel 1228, Fibonacci scrisse una versione rivista del “Liber Abaci” che ag- giungeva alcune cose necessarie e ne rimuoveva alcune superflue e la de- dicò a Michele Scoto, un astronomo e astrologo della corte di Federico II. Questa versione del 1228 è l’unica che è sopravvissuta fino ai giorni nostri; tra le aggiunte, pare che ci sia anche la famosa successione di nu- meri che adesso porta il suo nome: la successione di Fibonacci (o anche semplicemente i numeri di Fibonacci).
capitolo 1 - dixit algorizmi 19 Ne Il nome della rosa, il famoso romanzo di Umberto Eco da cui è stato anche tratto un film interpretato da Sean Connery, il protagonista Gugliemo da Baskerville racconta al suo discepolo Adso un metodo (un algoritmo!) per uscire da un labirinto, metodo appreso da un antico testo: “Per trovare la via di uscita da un labirinto,” recitò infatti Guglielmo, “non vi è che un mezzo. A ogni nodo nuovo, ossia mai visitato prima, il percorso di arrivo sarà contraddistinto con tre segni. Se, a causa di segni precedenti su qualcuno dei cammini del nodo, si vedrà che quel nodo è già stato visitato, si porrà un solo segno sul percorso di arrivo. Se tutti i varchi sono già stati segnati allora bisognerà rifare la strada, tornando indietro. Ma se uno o due varchi del nodo sono ancora senza segni, se ne sceglierà uno qualsiasi, apponendovi due segni. Incamminandosi per un varco che porta un solo segno, ve ne apporremo altri due, in modo che ora quel varco ne porti tre. Tutte le parti del labirinto dovrebbero essere state percorse se, arrivando a un nodo, non si prenderà mai il varco con tre segni, a meno che nessuno degli altri varchi sia ormai privo di segni.” Se il metodo vi sembra complicato, sappiate che anche Guglielmo era dub- bioso sull’efficacia: quando il suo discepolo gli chiede “E secondo questa regola si esce?”, lui risponde “Quasi mai, che io sappia.” In realtà l’algoritmo descritto non proviene da un antico testo ma è stato inventato da Trémaux nel 1892: l’idea è quella di marcare con un singolo se- gno il corridoio che stiamo percorrendo, mettendo il segno sia all’inizio che alla fine del corridoio. Se poi siamo costretti, perché non ci sono altre possibilità, a ripercorrere all’indietro il corridoio, aggiungiamo altri due segni, sempre ad entrambe le estremità del corridoio. In questa maniera sapremo che, relativa- mente alle entrate marcate con tre segni, non portano da nessuna parte. Se il labirinto ha una entrata e una uscita allora il percorso tra le due sarà quello che passa attraverso i corridoi con un solo segno. Se invece il labirinto ha solo una entrata (che quindi coincide con l’uscita), questo algoritmo fa percorrere tutti i corridoi del labirinto due volte, in entrambe le direzioni. Se pensate che l’algoritmo di Trémaux sia complicato, nel caso dobbiate affrontare un labirinto potete usare quello che è stato usato nella versione ci- nematografica de Il nome della rosa: qui, a differenza del romanzo, Gugliemo
20 breve e universale storia degli algoritmi Figura 1.2: Un labirinto e il relativo percorso di uscita, usando la regola della mano sinistra. La planimetria è quella del labirinto, i cui lati misuravano venti metri, installato nel 2014 nel National Building Museum di Washington D.C., progettato dall’architetto Bjarke Ingels.
capitolo 1 - dixit algorizmi 21 consiglia a Adso di girare sempre a sinistra. L’algoritmo, noto anche con il no- me di regola della sinistra (o regola della destra), consiste semplicemente nel poggiare una mano (la sinistra o la destra, indifferentemente) su un muro e camminare in modo da tenere la mano sempre poggiata sul muro. In questo modo, ogni volta che si arriva a un vicolo cieco, se ne uscirà continuando a per- correrlo (costeggiando tutto il muro). Se il labirinto ha un solo ingresso, che è anche il punto di uscita, l’algoritmo visita tutto il labirinto. Questo algoritmo garantisce di poter uscire da qualsiasi labirinto, come quel- lo mostrato in Figura 1.2, ed è noto anche ad Harris, uno dei protagonisti del romanzo Tre uomini in barca (per non parlar del cane) di Jerome K. Jerome. Harris, parlando del labirinto di Hampton Court, dice infatti: “Basta sempre prendere la prima a destra”, anche se poi il gruppetto di persone da lui guida- to si perderà e dovrà ricorrere all’aiuto del custode del labirinto per riuscire a uscirne. messaggi segreti Abbiamo visto in precedenza come il termine cifrare, con il significato di na- scondere un messaggio per renderlo comprensibile solo al legittimo destinata- rio, derivi dalle cifre indo-arabe. Dopo aver visto come usare un algoritmo per uscire da un labirinto, adesso vedremo prima un esempio di algoritmo per cifra- re il testo, usato da Giulio Cesare, e poi degli algoritmi per decifrare un testo, usati da Edgar Allan Poe e Arthur Conan Doyle nelle loro opere letterarie. Giulio Cesare usava un codice molte semplice: dopo aver eliminato ogni spazio dal messaggio, sostituiva ogni lettera con la lettera che dista tre posizioni nell’alfabeto: la A diventava quindi una D, la B una E e così via, come mostrato Testo in chiaro: a b c d e f g h i j k l m Testo cifrato: D E F G H I J K L M N O P Testo in chiaro: n o p q r s t u v w x y z Testo cifrato: Q R S T U V W X Y Z A B C Figura 1.3: Cifrario di Cesare.
22 breve e universale storia degli algoritmi in Figura 1.3 dove usiamo la convenzione, tipica della crittologia, di usare i caratteri minuscoli per il testo in chiaro e i caratteri maiuscoli per il testo cifrato. Ad esempio, supponiamo che Cesare volesse trasmettere in maniera sicura il seguente messaggio: Forza Roma. Come primo passo eliminiamo tutti gli spazi (e usiamo solo caratteri minuscoli per rispettare la convenzione della crittolo- gia). Il messaggio da cifrare diventa quindi forzaroma. I passi elementari di questo algoritmo sono quelli di sostituire ad ogni lettera quella che la segue di tre posizioni nell’alfabeto, come mostrato in Figura 1.3. Eseguendo questi passi, uno alla volta, si ha: forzaroma Iorzaroma IRrzaroma IRUzaroma IRUCaroma IRUCDroma IRUCDUoma IRUCDURma IRUCDURPa IRUCDURPD Otteniamo quindi IRUCDURPD che è la versione cifrata di Forza Roma. Per decodificare questo messaggio bisogna seguire il procedimento inverso, ovvero sostituire ad ogni lettera quella che la precede di tre posizioni nell’alfabeto. Il cifrario di Cesare è un cifrario monoalfabetico, in cui a ogni lettera corri- sponde una sola lettera dell’alfabeto; per cifrare e decifrare i messaggi si usa una tabella di cifratura, come quella mostrata in Figura 1.3, dove per ogni lettera possiamo leggere la lettera corrispondente. Persino nella Bibbia, e più precisamente nel libro di Geremia, troviamo un cifrario di questo tipo, detto cifrario Atbash, che viene usato per cifrare il no- me di Babele. In questo cifrario, la prima lettera dell’alfabeto viene cifrata con l’ultima, la seconda con la penultima, e così via. Il nome di questo cifrario deriva dall’alfabeto ebraico: in questo alfabeto la prima lettera (Aleph) viene cifrata con l’ultima (Tav), mentre la seconda (Bet) viene cifrata con la penul-
capitolo 1 - dixit algorizmi 23 Testo in chiaro: a b c d e f g h i j k l m Testo cifrato: Z Y X W V U T S R Q P O N Testo in chiaro: n o p q r s t u v w x y z Testo cifrato: M L K J I H G F E D C B A Figura 1.4: Cifrario Atbash. tima (Shin); abbiamo quindi A con T e B con SH e da queste coppie deriva il nome Atbash. In Figura 1.4 mostriamo la tabella del cifrario Atbash, usando il moderno alfabeto internazionale. Quindi, se volessimo usare questo cifrario per codificare il messaggio precedente, i passaggi sarebbero i seguenti: forzaroma Uorzaroma ULrzaroma ULIzaroma ULIAaroma ULIAZroma ULIAZIoma ULIAZILma ULIAZILNa ULIAZILNZ È importante sottolineare che, in questi cifrari monoalfabetici, l’algoritmo rimane sempre lo stesso: prendi una lettera alla volta e sostituiscila con la lettera corrispondente della tabella di cifratura (come quelle mostrate nelle Figure 1.3 e 1.4). Quello che cambia, per ogni cifrario, è la tabella di cifratura, che negli esem- pi mostrati finora utilizza lo stesso alfabeto del messaggio in chiaro, ma ovvia- mente nulla vieta che venga utilizzato un alfabeto creato per l’occasione, come vedremo in seguito. Se invece decidiamo di usare l’alfabeto tradizionale, quanti cifrari (monoal- fabetici) diversi esistono? Come abbiamo visto, nel caso di questi cifrari l’al-
24 breve e universale storia degli algoritmi goritmo è sempre lo stesso, mentre quello che cambia è la tabella di cifrature. Quindi la domanda precedente è equivalente a chiedersi: quante sono le pos- sibili tabelle di cifratura? Per contarle possiamo fare nel modo seguente: per cifrare la lettera ‘a’ abbiamo 26 scelte, una per ogni lettera dell’alfabeto; dopo aver scelto quale lettera usiamo per la ‘a’, ci rimangono 25 scelte possibili per cifrare la lettera ‘b’, e così via... quando arriviamo a decidere quale lettera usare per cifrare la ‘z’ ne sarà rimasta solo una disponibile. Quindi il numero totale di cifrari è: 26 × 25 × 24 × 23 × . . . × 4 × 3 × 2 × 1 = = 403.291.461.126.605.635.584.000.000 Esistono quindi circa 400 milioni di miliardi di miliardi di cifrari monoalfa- betici! Se non si è in possesso della tabella di cifratura sembrerebbe arduo riu- scire a decifrare un messaggio ma, come vedremo, ci sono algoritmi anche per questo compito, che ricade nella crittanalisi, ovvero l’arte di decifrare messaggi segreti. decifrare messaggi segreti In realtà, i cifrari monoalfabetici non sono considerati cifrari molto sicuri, in quanto soffrono di un problema legato alle caratteristiche della lingua in cui viene scritto il messaggio. Le lettere dell’alfabeto, in una data lingua, non ven- gono utilizzate in maniera uniforme; basti pensare, ad esempio, a quante poche siano le parole in italiano in cui compaiono le lettere K, X, W e Y. Sappiamo inoltre che le vocali sono le lettere più usate in assoluto. Possiamo sfruttare questa informazione per cercare di decifare i messaggi. Prendiamo il testo cifrato del messaggio che abbiamo codificato con il cifrario di Cesare: IRUCDURPD. Qui abbiamo tre lettere che si ripetono due volte: R, U e D. È lecito supporre che queste lettere corrispondano a delle vocali: in effetti, R e D corrispondono, rispettivamente, alle lettere ‘o’ e ‘a’. Se il messaggio fosse stato più lungo avremmo avuto più informazioni da sfruttare. Edgar Allan Poe, nel suo famoso racconto Lo Scarabeo d’Oro, spiega come de- cifrare un messaggio usando proprio questo metodo: come prima cosa assume
capitolo 1 - dixit algorizmi 25 Figura 1.5: Il primo messaggio cifrato che compare nel racconto L’avventura degli Uomini Danzanti di Arthur Conan Doyle. che il messaggio sia in inglese, poi spiega che “la lettera usata più frequente- mente è la e, seguita da a, o, i, d, h, n, r, s, t, u, y, c, f, g, l, m, w, b, k, p, q, x, z”. L’algoritmo in questo caso è semplice: come prima cosa bisogna contare, per ogni lettera del messaggio cifrato, le sue occorrenze. Poi si ordinano le lettere del messaggio in base al numero di occorrenze; a questo punto, le lettere del messaggio vengono messe in corrispondenza con le lettere della lingua in cui si suppone sia scritto il messaggio, ordinate secondo la frequenze della lingua; usando questa corrispondenza si può provare a decodificare il messaggio. In pratica, visto che in inglese le lettere usate più frequentemente sono, come sap- piamo da Edgar Allan Poe, ‘e’, ‘a’, ‘o’, ‘i’ e ‘d’, alla lettera che compare più spesso nel messaggio assoceremo la lettera ‘e’, alla seconda la lettera ‘a’ e così via. Questa tecnica, chiamata analisi delle frequenze, viene descritta per la prima volta in un’opera dello studioso arabo Al-Kindi, anche lui frequentatore, come Al-Khuwarizmi, della Casa della Saggezza di Baghdad. La stessa tecnica vie- ne usata da Sherlock Holmes per decifrare una serie di messaggi nel racconto L’Avventura degli Uomini Danzanti, dove i messaggi in codice non usavano l’al- fabeto tradizionale ma una serie di disegni raffiguranti, come dice il titolo del racconto, uomini danzanti; nella Figura 1.5 vediamo il primo dei messaggi che appare in questo racconto. Quando spiega come ha fatto a risolvere il caso, Sherlock Holmes raccon- ta di aver usato quella che ormai sappiamo essere l’analisi delle frequenze: ad esempio, nel messaggio mostrato in figura, appare quattro volte lo stesso sim- bolo (di cui due volte con la bandierina in mano, che serve ad indicare la fine della parola) e da questo l’investigatore capisce che il simbolo corrisponde alla lettera ‘e’. Sherlock Holmes, nel finale del racconto, spiega anche di essere stato costretto ad aspettare nuovi messaggi per poter avere tutte le informazioni di
26 breve e universale storia degli algoritmi cui aveva bisogno. Per i curiosi, il messaggio nascosto negli uomini danzanti di Figura 1.5 è “AM HERE ABE SLANEY”; anche se breve, questo messaggio contiene quattro ‘e’ e tre ‘a’ che sono, come detto in precedenza, le due lettere più frequenti della lingua inglese. indovinello algoritmico: rispetta i versi Ogni capitolo di questo libro si chiude, prima delle note storiche e bibliografi- che, con un indovinello algoritmico, ovvero un indovinello la cui soluzione è un algoritmo! In fondo al libro trovate le soluzioni a tutti gli indovinelli proposti. Iniziamo con un indovinello semplice: vi vengono dati una lista di numeri e una serie di celle vuote in cui, tra ogni coppia di celle, vi è un simbolo di disu- guaglianza (maggiore o minore). Ricordiamo che il simbolo ‘>’ indica maggiore e il simbolo ‘ b’ si legge “a maggiore di b” e ‘c < d ’ si legge “c minore di d”. Il vostro scopo è disporre i numeri nelle celle, in modo da rispettare i versi delle disuguaglianze. Ad esempio, se la lista di numeri è {10, 6, 11, 39, 30, 28} e le celle da riempire sono < > > < > una possibile soluzione è 11 < 30 > 28 > 6 < 39 > 10 Domanda 1. Considerate i numeri da 1 a 6. Riuscite a disporli nelle seguenti celle rispettando i versi? < > < < >
capitolo 1 - dixit algorizmi 27 Domanda 2. Riuscite a inventare un algoritmo che, data una qualsiasi lista di numeri (tutti distinti tra di loro) e una serie di celle da riempire, riesca a mettere i numeri nelle celle rispettando i versi?
28 breve e universale storia degli algoritmi note storiche e bibliografiche I primi algoritmi di cui abbiamo traccia sono riportati su delle tavolette ba- bilonesi risalenti a un periodo compreso tra il 1800 e il 1600 a.C.; in queste tavolette venivano affrontati diversi problemi come il calcolo delle radici qua- drate, la soluzione di equazioni di secondo grado e il calcolo dell’inverso di un numero. L’esposizione di queste tavolette seguiva uno stile semplice e ripetiti- vo, mostrando diversi esempi numerici, con numeri diversi, seguiti dalla frase conclusiva: “Questo è il modo di procedere” che, come osservato da Ausiello, “mette in evidenza la consapevolezza di aver identificato un metodo, un algoritmo, per risolvere il problema in modo generale” [5]. Gli algoritmi babilonesi sono descritti in dettaglio da Knuth che afferma anche che “per rendere l’informatica una scienza rispettabile bisogna mostra- re che abbia radici profonde nella storia, e che non sia quindi un fenomeno passeggero” [27]. Una breve introduzione riguardo la storia degli algoritmi si trova nel capitolo scritto da Ausiello nel libro da lui curato insieme a Petreschi [5]. Il testo di Chabert et al. [10] presenta una rassegna dettagliata della storia degli algoritmi numerici. L’originale arabo di Al-Khuwarizmi dal titolo Kitab al-hisab al-hindi è anda- to perduto, ma a noi sono giunte quattro traduzioni in latino; tra queste la più famosa è sicuramente Dixit Algorizmi, da cui prende il nome questo capitolo, che è il manoscritto sulla base del quale Baldassarre Boncompagni, storico della scienza e matematico, pubblicò il suo testo Algoritmi De Numero Indorum nel 1857. Il manoscritto usato da Baldassarre Boncompagni è conservato nella libre- ria universitaria di Cambridge, ed inizia con “Dixit Algorizmi: laudes deo rectori nostro atque defensori dicamus dignos” (“Così disse Al-Khuwarizmi: indirizziamo a Dio, nostro signore e protettore, le lodi che merita”). Nel testo di Ambrosetti vi è un interessante confronto tra le quattro traduzioni latine dell’opera di Al- Khuwarizmi: la già citata Dixit Algorizmi, il Liber Ysagogarum Alchorismi (in tre versioni, più un compendio legato alla prima), il Liber Alchorismi e il Liber Pulueris [1]. Il termine algoritmo per molto tempo è stato sinonimo di metodo di calcolo
capitolo 1 - dixit algorizmi 29 Figura 1.6: Confronto tra l’algoritmista Boezio e l’abacista Pitagora, da Margarita Philosophica di G.Reisch, 1508. aritmetico, contrapposto al calcolo mediante abaco; in una immagine del 1508, tratta dalla Margarita Philosophica di G.Reisch, un testo illustrato in 12 volumi, una vera e propria enciclopedia per giovani studiosi, viene mostrato il confronto tra un algoritmista e un abacista. A sinistra si vede l’algoritmista Boezio, a cui veniva attribuita l’invenzione dei numeri indiani, mentre a destra si vede l’aba- cista Pitagora (che, secondo una credenza medievale, aveva inventato l’abaco).
30 breve e universale storia degli algoritmi La superiorità dell’algoritmista è rappresentata dal fatto che ha già terminato il calcolo e posato lo stilo, mentre l’abacista sta ancora muovendo i gettoni dell’a- baco; inoltre sulle vesti di Aritmetica, sullo sfondo, sono presenti le cifre indiane a indicare, probabilmente, una predilizione per l’algoritmista. Nell’Enciclopedia di d’Alembert e Diderot, del XVIII secolo, compare il ter- mine algoritmo nell’accezione attuale, “per intendere il metodo e la notazione di qualsivoglia tipo di calcolo”. La vita di Fibonacci è raccontata nel testo di Devlin I magici numeri di Fi- bonacci [12]. L’autore, docente di matematica a Stanford, rende giustizia a uno studioso che dovrebbe essere famoso al pari di Galileo, Copernico e Keplero: grazie a Fibonacci, infatti, si sono diffusi i numeri indiani e i relativi metodi di calcolo in tutto l’Occidente. È a dir poco difficile riuscire a valutare l’impatto del contributo di Fibonacci; prima o poi i numeri indiani probabilmente si sa- rebbero imposti comunque, ma in quanto tempo? Quanto sarebbe diverso il mondo oggi? In Codici e segreti, Singh racconta in maniera brillante l’affascinante sto- ria della crittologia, la scienza dei messaggi segreti, dalle origini ai codici che usiamo oggi per comunicare in maniera sicura su Internet [45].
Puoi anche leggere