UD 3.4b: Trattabilità e Intrattabilità Dispense, cap. 4.2 Problemi Intrattabili Esistono problemi che, pur avendo un algoritmo di soluzione, non forniranno mai una soluzione in tempi “ragionevoli” nemmeno se utilizzassero il calcolatore più grande pensabile, magari grande quanto l’Universo stesso. Tali problemi sono stati classificati come risolvibili ma praticamente intrattabili. E la cosa sorprendente e che questi problemi non sono nemmeno molto complessi Problemi Intrattabili Problemi praticamente intrattabili sembrano sorgere spesso, ad esempio, nel gioco degli scacchi, in quanto il diagramma delle possibili posizioni delle pedine è costituito da un numero talmente alto di punti che il più veloce calcolatore esistente impiegherebbe anni per esaminarle tutte. Per molti dei problemi praticamente intrattabili sono stati dati algoritmi di approssimazione, che forniscono una soluzione sub-ottimale che approssima il risultato ottimo a meno di una percentuale, conosciuta a priori Trattabilità Computazionale Individuare con chiarezza le classi dei problemi risolubili in tempi “ragionevoli” mediante un elaboratore … … vale a dire con tempi di esecuzione che crescano in modo ragionevole al crescere della dimensione del problema stesso. Trattabilità Computazionale Tali problemi sono stati definiti trattabili ed il concetto di trattabilità ha cominciato così a rappresentare un secondo livello di costruttività nella soluzione di un problema: da un punto di vista pratico, non solo si richiede che un problema sia algoritmicamente risolubile ma anche che la sua soluzione sia ottenibile in modo ragionevole, cioè, ad esempio con tempi dell'ordine dei secondi, minuto o al massimo ore di elaboratore, non certo giorni, mesi, anni. Cosa si intende per Tempi “Ragionevoli”? Nella tabella seguente viene indicato il tempo impiegato da un calcolatore capace di eseguire 1.000.000 di istruzioni al secondo per la soluzione di un problema di dimensione n, cioè con n valori dati in input (ad esempio n numeri, n schede ecc. - n=10, 20, 30, 40 e 50), con un algoritmo che effettua un numero di passi computazionali proporzionali a n, n2, n3, n5, 2n, 3n. n n2 n3 n5 2n 3n 10 0,00001 sec 0,0001 sec 0,001 sec 0,1 sec 0,001 sec 0,059 sec 20 0,00002 sec 0,0004 sec 0,008 sec 3,2 sec 1,0 sec 58 minuti 30 0,00003 sec 0,0009 sec 0,027 sec 24,3 sec 17,9 minuti 6,5 anni 40 0,00004 sec 0,0016 sec 0,064 sec 1,7 minuti 12,7 giorni 3.855 secoli 50 0,00005 sec 0,0025 sec 0,125 sec 5,2 minuti 35,7 anni 200.000.000 secoli Problemi polinomiali e problemi esponenziali Esaminando questa tabella emerge con chiarezza la differenza che esiste tra problemi risolubili in tempi polinomiali (n, n2, n3, n5) problemi che richiedono tempo esponenziale (2n, 3n). Questi ultimi, infatti, possono essere risolti solo quando la dimensione dell'istanza è sufficientemente piccola (n=10, 20); Massima istanza Dato un computer generico e 6 algoritmi di complessità diversa (ma, per semplicità, possiamo supporre che risolvano lo stesso problema) (n, n2, n3, n5, 2n e 3n) consideriamo quanti dati questo computer può elaborare in 1 ora, per ognuno degli algoritmi. Poi supponiamo di avere un computer 100 o 1000 volte più veloce Calcoliamo quanti dati in più il computer più veloce può elaborare nello stesso tempo, per ognuno degli algoritmi Il Fattore Tecnologico f(n) computer di riferimento computer 100 volte + veloce computer 1000 volte + veloce n N1 100 N1 1000 N1 n2 N2 10 N2 31.6 N2 n3 N3 4.64 N3 10 N3 n5 N4 2.5 N4 3.9 N4 2n N5 N5 + 6.64 N5 + 9.97 3n N6 N6 + 4.19 N6 + 6.29 Algoritmi Lineari Se l’algoritmo impiega un tempo proporzionale ad n, è evidente che il miglioramento delle prestazioni del computer incide allo stesso modo sul numero di operazioni che possono essere eseguite nell’unità di tempo considerata L’algoritmo con complessità n sul computer lento riesce ad analizzare 1.000 “dati”, sul computer 1.000 volte più veloce ne analizza 1.000.000 Algoritmi Polinomiali Un algoritmo che ha una complessità di tempo proporzionale ad n3 riesce, nello stesso tempo e su un computer 1.000 volte più veloce, a trattare solo 10 volte i dati che riesce a trattare sul computer più lento. L’algoritmo con complessità n3 sul computer lento riesce ad analizzare 1.000 “dati”, sul computer 1.000 volte più veloce ne analizza 10.000 Algoritmi Esponenziali Un algoritmo che ha una complessità di tempo proporzionale a 2n riesce, nello stesso tempo e su un computer 1.000 volte più veloce, a trattare solo 10 dati in più rispetto al computer più lento. L’algoritmo con complessità 2n sul computer lento riesce ad analizzare 1.000 “dati”, sul computer 1.000 volte più veloce ne analizza 1.010 Le cose vanno ancora peggio per algoritmi con complessità proporzionale a 3n Considerazioni Non bastano i miglioramenti tecnologici Occorrono buoni algoritmi Gli algoritmi polinomiali sono ovviamente molto più apprezzabili di quelli esponenziali 6 dic 2011 Problemi Praticamente Intrattabili Alcune proprietà intrinseche dell'Universo limiteranno sempre le dimensioni e la velocità dei calcolatori. Il più potente calcolatore che si possa immaginare di costruire non potrà essere più grande dell'universo conosciuto, né potrà essere costituito da componenti più piccole di un protone, né infine potrà trasmettere informazioni ad una velocità superiore a quella della luce. Date queste limitazioni tale calcolatore non potrebbe avere più di 10126 componenti. Problemi Praticamente Intrattabili Due ricercatori dell'M.I.T. hanno dimostrato che questo calcolatore impiegherebbe almeno 20 Miliardi di anni per risolvere alcuni problemi di cui è nota la risolubilità in linea di principio. Poiché presumibilmente l'Universo non ha un'età superiore a 20 Miliardi di anni, ciò sembra sufficiente per affermare che questi problemi costituiscono l'espressione più esasperata dei problemi intrattabili. Problemi Praticamente Intrattabili Un algoritmo, il cui tempo di esecuzione cresce come cn è definito praticamente intrattabile. Se c è di poco superiore ad 1, l'algoritmo può essere adoperato per dati di ingresso molto piccoli: ma se i dati in ingresso sono grandi, esplode la crescita esponenziale Esiste, inoltre, il pericolo che il problema non ammetta intrinsecamente soluzioni più veloci di quella esponenziale, Si parla, in questo caso, di Problemi intrinsecamente intrattabili.