Grossi Ludovico

Algoritmi, approfondimenti

Autore: 
Grossi Ludovico

Prendo la palla al balzo dall'articolo di Thomas per entrare più nello specifico degli algoritmi.
Come ormai sappiamo un algoritmo è una sequenza finita di istruzioni utili a risolvere un problema.
Vi sono però alcuni problemi, detti NP-completi (che non appartengono ai problemi risolvibili in tempo polinomiale) in cui l'unico modo per ottenere la soluzione esatta è... tentarle tutte. L'esempio più celebre è quello del commesso viaggiatore, in cui si deve trovare la strada più breve per passare da un certo numero di punti. Ora se pensiamo che "tentarle tutte" sia una procedura solo ripetitiva, e che un calcolatore è fatto per eseguire operazioni ripetitive e che con i suoi miliardi di istruzioni al secondo può risolvere ogni problema in pochi secondi, sbagliamo di grosso. Facciamo un esempio: un problema che richieda "appena" 2^n operazioni per essere risolto, dove n è la dimensione dell'input, con un valore n di appena "100", ed un computer che possa eseguire 10^12 operazioni al secondo (ovvero mille miliardi di operazioni al secondo), ci metterebbe, senza contare le esigenze di memoria che questo super calcolatore dovrebbe avere,  "solo" 4*10^10 anni. Che è molto più dell'età dell'universo.
La cosa più interessante dei problemi NP-completi è che se si dovesse trovare un metodo risolutivo per uno di questi in tempo polinomiale, si sarebbe trovata la soluzione in tempo polinomiale per tutti gli altri. E che in palio c'è un milione di dollari.
Esistono vari tipi di tecniche per risolvere i problemi a seconda del tipo di precisione necessaria, del tempo di esecuzione richiesto etc. Si può pensare per esempio di ottenere una soluzione molto buona per un problema NP-completo, se l'algoritmo è utilizzabile, ovvero ci da una risposta in tempi ragionevoli.
Esistono algoritmi, detti di tipo "Greedy", che come metodo risolutivo compiono l'azione che in un dato momento ritengono migliore. Per fare un esempio potrebbe, per il problema del commesso viaggiatore, scegliere di andare ad ogni tappa nella tappa successiva più vicina. Da notare che questa non è affatto la soluzione ottima - si definisce così la soluzione corretta - del problema.
Divide et impera: si chiama così la tecnica di spezzare il problema in sottoproblemi e risolverli. Uno dei tanti algoritmi di ordinamento, il merge sort, utilizza questa tecnica per ordinare un insieme di elementi: divide l'insieme di elementi fino ad averne due, quindi li ordina - semplice, uno è più grande dell'altro e finito il sottoproblema. Ottenuto questo insieme di coppie ordinate, esegue il "merge" che gli viene molto semplice (ma non spiego qui il perchè) avendo insiemi già ordinati. Quindi ordinate le coppie, passa ai gruppi di quattro etc.
Esempio: Devo ordinare l'insieme dei numeri 7 12 34 1 9 78 91 8: divido fino ad ottenere le coppie di elementi (7 12), (34 1), (9 78), (91 8), che ordinate danno
(7 12), (1 34), (9 78), (8 91) - quindi prende le coppie ordinate e le unisce ottenendo (1 7 12 34), (8 9 78 91), che riunite danno (1 7 8 9 12 34 78 91).
Un'evoluzione del Divide et impera è la programmazione dinamica, che affronta problemi che non hanno una struttura facilmente divisibile o dove si utilizzerebbe troppa memoria per poter risolvere il problema.
Un raffinamento, in alcuni casi molto buono, della forza bruta (il "tentarle tutte") è dato con il backtracking: se è vero che tentarle tutte è un'operazione lunga e che spesso non da risultati, ci possiamo accorgere, prima di insistere per una strada, che questa non darà il risultato sperato? Sì, spesso è così: ad esempio se stiamo cercando il percorso più breve tra due città, una volta trovato un percorso lungo X, scartiamo automaticamente tutte le combinazioni - mentre le stiamo cercando, non lo sappiamo mica a priori - che ci darebbero una lunghezza maggiore. Semplice ed efficace!
Esistono moltissime tecniche per l'analisi di problemi e la loro soluzione che vengono insegnate nei corsi universitari di informatica. Queste tecniche fanno spesso ricorso ad astrazioni geometriche, proprietà dei numeri, calcoli combinatori... e fanno dell'algoritmista un vero dio, se capace. Pensate per esempio a quanto siano utili gli algoritmi di compressione dei dati, che ci permettono - oltre che di zippare un file per inviarlo in un'email senza intasare la casella - di avere film in dvd ad alta definizione o un DivX nello spazio di un cd?
Inoltre sono fondamentali ed addirittura regolamentati da severe leggi negli Stati Uniti gli algoritmi di criptazione dei dati, funzioni matematiche che trasformano una sequenza di byte (e nel mondo dei computer tutto lo è) in un'altra sequenza, senza possibilità di tornare alla prima da quest'ultima. Per esempio le vostre password, si quelle di voi utenti di Lankelot, sono salvate su un database in maniera criptata: nessuno (ho detto NESSUNO!) è in grado di sapere quale sia la vostra password! Mi sapreste dire ad esempio, a quale password corrisponde questa stringa?

c1ad237a9b7b677b100ed633748faa98
L'unico modo per scoprirlo è tentarle tutte! E se non vi chiamate Bin Laden o non avete fatto sgarri alla CIA, state pur tranquilli che anche rubando il database la vostra password rimarrebbe un segreto...

Tratterò la sicurezza informatica nel prossimo articolo, visto che sono ormai uscito allo scoperto!

Riferimenti
Greedy algorithm (en) -
http://en.wikipedia.org/wiki/Greedy_algorithm

Backtracking algorithm (en) - http://en.wikipedia.org/wiki/Backtracking
Algoritmi (it) - http://it.wikipedia.org/wiki/Algoritmo
NP-complete
(en) - http://en.wikipedia.org/wiki/NP-complete

ISBN/EAN: 
000

Commenti

Esordio!

(ma quando era uscito? favoloso:)

Ocio Ludo: http://www.lankelot.eu/index.php/staff/32/Ludovico+Grossi

c'è qualcosa da registrare nel codice di scrittura della pagina personale. Gromer peraltro è un po' sfocato:)

"La cosa più interessante dei problemi NP-completi è che se si dovesse trovare un metodo risolutivo per uno di questi in tempo polinomiale, si sarebbe trovata la soluzione in tempo polinomiale per tutti gli altri. E che in palio c?è un milione di dollari."

> Lavoriamoci su. :)

"Divide et impera: si chiama così la tecnica di spezzare il problema in sottoproblemi e risolverli. "

> Era un'antica lezione Romana.
http://it.wikipedia.org/wiki/Divide_et_impera_(latino) qualche dettaglio.

"backtracking: se è vero che tentarle tutte è un?operazione lunga e che spesso non da risultati, ci possiamo accorgere, prima di insistere per una strada, che questa non darà il risultato sperato? Si, spesso è così: ad esempio se stiamo cercando il percorso più breve tra due città, una volta trovato un percorso lungo X, scartiamo automaticamente tutte le combinazioni - mentre le stiamo cercando, non lo sappiamo mica a priori - che ci darebbero una lunghezza maggiore. Semplice ed efficace!"

> Spiegazione chiara anche per un povero letterato. Gran lavoro.
Backtracking. Troviamogli un nome Latino...

"Queste tecniche fanno spesso ricorso ad astrazioni geometriche, proprietà dei numeri, calcoli combinatori? e fanno dell?algoritmista un vero dio, se capace. Pensate per esempio a quanto siano utili gli algoritmi di compressione dei dati, che ci permettono - oltre che di zippare un file per inviarlo in un?email senza intasare la casella - di avere film in dvd ad alta definizione o un DivX nello spazio di un cd?"

> Prossimo passo, il teletrasporto.

"Per esempio le vostre password, si quelle di voi utenti di Lankelot, sono salvate su un database in maniera criptata: nessuno (ho detto NESSUNO!) è in grado di sapere quale sia la vostra password! Mi sapreste dire ad esempio, a quale password corrisponde questa stringa?
c1ad237a9b7b677b100ed633748faa98
L?unico modo per scoprirlo è tentarle tutte! E se non vi chiamate Bin Laden o non avete fatto sgarri alla CIA, state pur tranquilli che anche rubando il database la vostra password rimarrebbe un segreto?"

> Magnifico. E magnifico esordio. Aspettiamo con entusiasmo il prossimo scritto. Ha inizio una nuova fase della Jam Session tra Intellijam e Lankelot. Spettacolare. Attendo l'esordio di Gromer, e di Michele. Presto!

Ti inserisco qualche tag...

Fatto:). Una preghiera: inseriresti, con calma, qualche manuale di riferimento in bibliografia? Sarebbe importante sia per i tuoi colleghi, che per i neofiti, che per i futuri navigatori.
Onore a LAMASE!

Ti intendi di codici e criptaggio? Teoria dei k-corpi? Mi interessa.

4> Franco, carriera improbabile. Di problemi da un milione ce ne sono diversi e questo è uno dei peggiori.
Prova a partire con la congettura di Riemann.

Per altro Ludovico avrei una domanda: il problema del commesso viaggiatore è un classico della ricerca operativa, ma mi sembra che si disponga di ottimi algoritmi per risolverlo. Sbaglio?

(intendo: teoria dei grafici, oppure reti neurali, soluzioni approssimate)

Poi se ti servisse, in lankelot gira un dizionarietto quasi inutilizzato. Sarebbe un'occasione di rispolverarlo.

Omaggi al primo pezzo di Ludovico! E devo dire che il pezzo è sufficientemente accessibile anche per chi - come me - è abbastanza (se non del tutto) all'oscuro dei processi qui proposti (e immagino semplificati) per la nostra comprensione. E colgo l'occasione per esprimere sincero ringraziamento per il suo (per la maggior parte di noi) oscuro e prezioso lavoro dietro le quinte.

Pezzo che fa comprendere bene alcuni problemi informatici non di poco conto. Sono assai curioso sul prossimo argomento della sicurezza, credo sia fondamentale per chi naviga saperne di più. Grazie e ottima chiarezza espositiva, complimenti.

omaggi ludovico. e che lankelot ambisca a nuova encyclopédie : proposta : e se parlassimo anche di mp3 e compagnia bella, spiegare come e perché si può ingannare l-occhio e l-orecchio? grazie e a presto
M

(Marco! Bentornato! Ti stavamo aspettando... un abbraccio)

(vado e vengo, per ora. sto finendo il tuo pezzo. come effetto collaterale adesso ho uno scoiattolo sul divano del mio monolocale)

(i mustacchi degli scoiattoli sono una questione così poco dibattuta. Arpa, a Sassari, ne parlò per ore, nel buio, illuminato dalla luna. Qualche mese fa...;) )

(ci deve essere fluido empatico, o qualcosa nell'aria. proprio nei tuoi stessi mesi pagani io scrivevo di pomodori e peperoni seduti in tavola, a dirsi famigli)

Ahahhahaha, wiki, quando capirò come fare, avrà corposa pagina sull'argomento, sempre che censure ottuse e opportuniste non ne impediranno la pubblicazione. Per la giusta specializzazione dei mustacchi, di qualsiasi specie e ruolo economico.

(li aspettiamo, i famigli che dici. Sono nell'aria, vanno materializzati).
*
Arpa! Serve informare wiki della questione, questo dei mustacchi è un guasto che va almeno affrontato.

(specializziamoli!)

(Qualcosa mi sfugge?)

(Il De Mauro che dice degli scoiattoli? Che sia il caso di avvertire anche lui?)

23. Memoria della serata presentata da Lallacare, Arpa, Hammer e Baol a Sassari, qualche mese fa.

24. De Mauro ne sa, ma non vuole parlarne. Sono convinto abbia ceduto a pressioni provenienti da diverse fonti. Sta a noi.

"Queste tecniche fanno spesso ricorso ad astrazioni geometriche, proprietà dei numeri, calcoli combinatori? e fanno dell?algoritmista un vero dio, se capace".

Che invidia!! Non ne capisco assolutamente nulla, ma leggendorti, qualcosina credo di averlo afferrato. Aspetto anchh'io la pagina sulla sicurezza informatica e mi unisco ai ringraziamenti e per l'esordio e per il lavoraccio qui su Lankelot.

Uèèè!! Grazie a tutti... che calorosi che siete :D

10> ok, sarà fatto. Ce n'è per tutti i livelli

11> non sono esperto in crittografia, posso limitarmi ad informazioni generali. Nell'articolo sulla sicurezza informatica non entrerò eccessivamente nello specifico, ma parlerò di sicuro di firma digitale (sia con che senza autorità di certificazione) ed approfondirò il discorso sulle password e simili.

11> Per il commesso viaggiatore, quello che trovo in giro conferma che le soluzioni ottime non si possono ottenere se non per numeri limitati di città o introducendo alcune condizioni aggiuntive al problema originario. Se hai qualcosa da consultare segnalamelo.

Pet tutti, stavo anche pensando già al terzo articolo, sull'architettura di internet.. vi interessa? Un po' di chiarezza su DNS, url, caselle di posta e alias, account, server web e server mail e server qui e là...

(MAGARI!)
(LA-MA-SE! LA-MA-SE!)

http://www.lankelot.eu/index.php/staff/32/Ludovico+Grossi

(ocio che non ha letto il link al sito di Intellijam)

28> si, il link l'avevo visto, va bene così per ora.

"stavo anche pensando già al terzo articolo, sull?architettura di internet.. vi interessa? Un po? di chiarezza su DNS, url, caselle di posta e alias, account, server web e server mail e server qui e là? "

> Daje!

LAMASE! LAMASE!