Sei sulla pagina 1di 252

Pilu Crescenzi

Informatica Teorica

Pilu Crescenzi Informatica Teorica Questo lavoro e` distribuito secondo la Licenza Creative Commons Attribuzione -

Questo lavoro e` distribuito secondo la Licenza Creative Commons Attribuzione - Condividi allo stesso modo 3.0.

Firenze, Settembre 2011

A Paola, Nicole e Giorgia

A uno a uno varcarono la soglia della porticina da fiaba ed entrarono nella tana di It. Stephen King

Sommario

Prefazione

 

i

I

Teoria della calcolabilita`

 

1

1

Macchine di Turing

 

3

1.1

Definizione di macchina di Turing

 

3

1.1.1

Rappresentazione tabellare di una macchina di Turing

 

.

.

.

.

.

.

.

.

.

6

1.1.2

Macchine di Turing e JFLAP

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

1.2

Esempi di macchine di Turing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

1.2.1

Una macchina per il complemento a due

 

9

1.2.2

Una macchina per l’ordinamento di stringhe binarie

 

9

1.2.3

Una macchina per un linguaggio non regolare

 

10

1.2.4

Una macchina per la conversione da unario in binario

 

12

1.2.5

Una macchina per il decremento di un numero intero binario

 

13

1.2.6

Una macchina per la somma di due numeri interi binari .

.

.

.

.

.

.

.

.

14

1.3

Macchine di Turing multi-nastro

 

16

1.3.1

Un esempio di macchina di Turing multi-nastro

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.3.2

Simulazione di macchine di Turing multi-nastro

 

18

1.4

Configurazioni di una macchina di Turing

 

21

1.4.1

Produzioni tra configurazioni

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

22

1.5

Sotto-macchine

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

23

1.5.1

Una macchina multi-nastro per la moltiplicazione

 

24

1.5.2

Sotto-macchine e riusabilita` del codice

 

27

2

La macchina di Turing universale

 

33

2.1

Macchine di Turing con alfabeto limitato

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.2

Codifica delle macchine di Turing

 

36

2.3

La macchina di Turing universale

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

38

2.3.1

Il primo passo della macchina universale

 

38

2.3.2

Il secondo passo della macchina universale

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

2.3.3

Il terzo passo della macchina universale

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

2.3.4

Il quarto passo della macchina universale

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

2.3.5

Il quinto passo della macchina universale

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

2.3.6

La macchina universale

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

2.4

Varianti delle macchine di Turing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

44

2.4.1

Macchine di Turing con nastri bidimensionali

.

.

.

.

.

.

.

.

.

.

.

.

.

.

44

2.4.2

Macchine di Turing multi-traccia

 

47

2.4.3

Macchine di Turing con testina limitata

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

47

2.4.4

Macchine di Turing con nastro semi-infinito

 

49

3

Limiti delle macchine di Turing

 

53

3.1

Funzioni calcolabili e linguaggi decidibili

 

53

3.1.1

Linguaggi decidibili

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

55

3.2

Il metodo della diagonalizzazione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

57

3.2.1

Linguaggi non decidibili

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

62

3.3

Il problema della terminazione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

3.3.1

Linguaggi semi-decidibili .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

65

3.4

Riducibilita` tra linguaggi

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

66

3.4.1

Il problema della corrispondenza di Post

 

70

3.5

Teorema della ricorsione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

73

3.5.1

Applicazioni del teorema della ricorsione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

78

4

La tesi di Church-Turing

 

85

4.1

Algoritmi di Markov

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

85

4.2

Macchine di Post

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

89

4.3

Funzioni ricorsive

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

94

4.4

Macchine RAM

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

4.5

La tesi di Church-Turing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

104

II

Teoria dei linguaggi formali

 

107

5

La gerarchia di Chomsky

 

109

5.1

Grammatiche generative

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

109

5.1.1

La gerarchia di Chomsky

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

111

5.2

Linguaggi di tipo 0

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

5.2.1

Macchine di Turing non deterministiche

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

114

5.2.2

Linguaggi di tipo 0 e semi-decidibilita`

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

117

5.3

Linguaggi di tipo 1

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

122

6

Linguaggi regolari

 

127

6.1

Introduzione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

127

6.2

Analisi lessicale di linguaggi di programmazione

 

129

6.3

Automi a stati finiti

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

130

6.3.1

Automi a stati finiti non deterministici

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

131

6.3.2

Automi deterministici e non deterministici

 

132

6.4

Espressioni regolari

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

134

6.4.1

Espressioni regolari ed automi a stati finiti

 

137

6.5

Automi a stati finiti e grammatiche regolari

140

6.5.1

Linguaggi non regolari

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

142

7

Analisi sintattica top-down

 

147

7.1

Introduzione

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

147

7.2

Alberi di derivazione

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

148

7.2.1

Grammatiche ambigue

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

150

7.2.2

Derivazioni destre e sinistre .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

152

7.3

Parser top-down

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

153

7.3.1

Ricorsione sinistra

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

154

7.3.2

Backtracking

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

159

7.3.3

Parser predittivi

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

161

7.4

Costruzione di un parser predittivo

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

168

8

Automi a pila

175

8.1

Pumping lemma per linguaggi liberi da contesto

 

.

.

.

.

.

.

.

.

.

.

.

.

.

175

8.2

Forma normale di Chomsky

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

177

8.3

Automi a pila non deterministici

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

180

III

Teoria della complessita`

 

187

9

La classe P

189

9.1

La classe P

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

189

9.2

Esempi di linguaggi in P

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

192

9.2.1

Numeri relativamente primi .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

192

9.2.2

Cammino minimo in un grafo .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

193

9.2.3

Soddisfacibilita` di clausole con due letterali

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

193

9.3

Riducibilita` polinomiale

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

195

9.3.1

Il problema del massimo accoppiamento bipartito

 

196

9.3.2

Il problema delle torri

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

200

10

La classe NP

 

203

10.1

La classe NP

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

203

10.2

Linguaggi NP-completi

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

205

10.2.1

Teorema di Cook-Levin

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

206

10.2.2

Soddisfacibilita` di clausole con tre letterali

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

210

10.2.3

Colorabilita` di un grafo con tre colori

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

211

10.2.4

Cammino hamiltoniano

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

213

10.2.5

Partizione .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

216

10.3

Oltre NP

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

218

10.3.1

La classe EXP

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

218

10.3.2

La classe PSPACE

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

221

11

Algoritmi di approssimazione

 

225

11.1

Problemi di ottimizzazione .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

225

11.1.1

Linguaggi soggiacenti

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

227

11.2

Algoritmi di approssimazione

 

.

.

.

.

.

.

.