DALLA MACCHINA DI TURING A P/NP
1.La macchina di Turing
2.Composizione, ricorsione, minimizzazione
3.La macchina universale
4.Prima appendice: le funzioni primitive ricorsive
Parte B Logica, P e NP
5.La logica delle CNF-formule
6.Alfabeti, problemi, riduzioni, la classe P
7.NP
8.Logica e NP-completezza
9.Altri problemi NP-completi
Parte C La crittografia a chiave pubblica
10.Crittografia, P e NP
11.Seconda appendice: l'algoritmo di Euclide e polytime
12.Osservazioni finali
Indice analitico
In questo libro risponderemo alle seguenti domande:
(i) Che cos'è un passo di calcolo?
(ii) Quali algoritmi richiedono un numero abbordabile di passi di calcolo?
(iii) Che applicazioni concrete possono avere problemi che talora richiedono un numero proibitivo di passi di calcolo già per esempi facilissimi da enunciare?
Dal 1936 i costi delle procedure meccaniche di calcolo si misurano contando i passi delle macchine di Turing. Costruiremo la macchina di Turing "universale", capace di effettuare tutte le procedure meccaniche di calcolo concepibili no a oggi. Tale macchina, pur essendo un oggetto puramente matematico come il numero ? si è progressivamente materializzata nel computer. Approfondiremo la distinzione tra procedure abbordabili, come quelle che regolano l'addizione e la moltiplicazione, e procedure di calcolo il cui costo è proibitivo. Individueremo una classe di problemi la cui complessità oggi non ci è nota, e che sono velocemente traducibili l'uno nell'altro. Il prototipo di questi problemi, denominato sat, chiede di decidere se una formula della logica di Boole sia soddisfacibile. Il problema P/NP chiede se SAT possa essere risolto da una macchina di Turing che utilizza un numero di passi polinomiale rispetto alla lunghezza della formula in input. Se tale macchina esistesse, molti problemi importanti nell'industria e nella vita quotidiana sarebbero risolvibili a costi drasticamente ridotti rispetto ai costi attuali.Come vedremo analizzando l'algoritmo di Euclide, l'ignoranza di algoritmi veloci per il problema SAT ha un'applicazione utile nella crittografia a chiave pubblica.