Algoritmi e Complessità
Università di Camerino
Corso di Laurea in
Informatica
(tecnologie informatiche)
III periodo didattico
Docente: Emanuela Merelli
Email:[email protected]
Lezione 1
Teoria della computabilità
Argomento: Il concetto di algoritmo nel contesto
della Teoria della Computabilità
Obiettivo conoscitivo: saper identificare i requisiti di ogni
definizione di algoritmo, consapevolezza della non-esistenza
di algoritmi per tutte le funzioni
Teoria della computabilità
• La teoria della computabilità tratta della definizione formale
del concetto di calcolo meccanico.
• Alcuni importanti formalismi che hanno storicamente
condizionato la teoria e l’applicazione dei calcolatori sono:
– Le macchine di Turing
– Gli schemi ricorsivi di Kleene e McCarthy
– I sistemi di Post
a.a. 2002-03
e.merelli
3
Teoria della computabilità cont.
• Uno dei principali risultati della teoria della computabilità è la
completa identità delle classi di problemi risolubili nei diversi
formalismi.
• Oggi si ritiene che ogni procedimento di calcolo, purché
completamente specificato, sia traducibile in uno qualsiasi dei
formalismi.
• L’equivalenza dei formalismi si basa sulla Tesi di Church e la
Tesi di Turing
Conseguenza
Molte proprietà relative, ad esempio, alle macchine di Turing si
estendono immediatamente ad un qualsiasi linguaggio di
programmazione
a.a. 2002-03
e.merelli
4
Il termine Algoritmo
Il termine Algoritmo significa
procedimento di calcolo,
deriva dal termine latino
algorismus che a sua volta
deriva dal nome del
matematico usbeco Abu Ja’far
Mohammed ibn-Musa alKhowarismi, vissuto nel IX
secolo d.C.
a.a. 2002-03
e.merelli
5
Che cosa è un Algoritmo
Un algoritmo è una qualsiasi procedura computazionale
ben definita (con un numero finito di regole che conduce al
risultato dopo un numero finito di operazioni)
che prende un insieme di valori, come input e produce un insieme di
valori come output.
a.a. 2002-03
e.merelli
6
Perché parliamo di Algoritmi
La teoria degli algoritmi ha iniziato a stabilizzarsi agli inizi del XX
secolo, mentre
le tecniche di progettazione di algoritmi, di correttezza e
efficienza si sono evolute nella seconda metà del XX secolo, grazie
alla diffusione dei calcolatori elettronici.
Ovunque si impieghi un calcolatore elettronico occorrono algoritmi
corretti e efficienti che ne utilizzino al massimo le possibilità
Esempi di algoritmi corretti e efficienti:
ƒ controllo dei voli aerei
ƒ regolazione reattori nucleari
ƒ reperimento d’informazioni da archivi
ƒ smistamento di comunicazioni telefoniche
ƒ gioco degli scacchi
ƒ controllo della produzione di una catena di montaggio …
ƒ sistemi di puntamento di missili
a.a. 2002-03
e.merelli
7
Correttezza e Efficienza
Un algoritmo si dice corretto se, per ogni istanza di input,
si ferma con l’output corretto
Un algoritmo corretto risolve il problema computazionale
dato
Un algoritmo efficiente risolve il problema
computazionale il più velocemente possibile e organizza i
dati in modo da usare il minor spazio di memoria possibile
a.a. 2002-03
e.merelli
8
Algoritmi & Programmi
Gli algoritmi vengono descritti tramite programmi, che si
avvalgono di istruzioni e costrutti dei linguaggi di
programmazione per essere eseguiti da calcolatori elettronici
Le proprietà degli algoritmi sono
fondamentali, generali e robuste
da essere indipendenti dalle caratteristiche di specifici linguaggi
di programmazione o dai limiti imposti dai calcolatori elettronici
a.a. 2002-03
e.merelli
9
Metodi Formali
• I metodi per l’analisi della correttezza degli algoritmi
• I metodi per l’analisi dell’efficienza degli algoritmi
a.a. 2002-03
e.merelli
10
Definizione di algoritmo
Idea empirica
Discutiamo le caratteristiche che deve avere un algoritmo partendo
dall’idea empirica che ne abbiamo:
a)
b)
c)
d)
e)
Il programma P deve essere di lunghezza finita
Ci deve essere un agente di calcolo C, capace di eseguire le
istruzioni
L’agente di calcolo C ha a disposizione una memoria dove
immagazzina i risultati intermedi per poi utilizzarli nelle fasi
successive del calcolo
Il calcolo avviene per passi discreti
Il calcolo non è probabilistico
a.a. 2002-03
e.merelli
11
Il programma P
deve essere di lunghezza finita
Ogni algoritmo che sia definibile in pratica, deve essere
ricavabile da una quantità finita di informazioni.
Esempio Π
– Calcolatore con 10 istruzioni-macchina programmato per
calcolare l’espansione decimale di Π.
– Il punto a) è soddisfatto se si considera tale calcolatore come
programmato dall’algoritmo di lunghezza finita che, dato n,
permette di calcolare l’n-esima cifra di Π.
a.a. 2002-03
e.merelli
12
Il calcolo avviene per passi discreti
Il punto d) viene soddisfatto se C non ha a disposizione
nessun meccanismo di calcolo analogico
Il calcolo non è probabilistico
Il punto e) è soddisfatto se la modalità di esecuzione del
calcolo non è associata a nessuna legge di probabilità
a.a. 2002-03
e.merelli
13
Definizione di algoritmo
Caratteristiche discutibili
Altre caratteristiche associabili ad un algoritmo sono più discutibili come:
f)
g)
h)
i)
j)
Non deve esserci alcun limite finito alla lunghezza dei dati di
ingresso
Non deve esserci alcun limite alla quantità di memoria disponibile
Deve esserci un limite finito al numero e alla complessità delle
istruzioni eseguibili da C
Sono ammesse esecuzioni con un numero di passi illimitato
Sono ammesse esecuzioni con un numero di passi infinito (cioè
esecuzioni che non terminano mai)
a.a. 2002-03
e.merelli
14
Non deve esserci alcun limite finito alla
lunghezza dei dati di input
Ad esempio somma di n numeri deve essere possibile per un
qualsiasi n
Non deve esserci alcun limite finito alla
quantità di memoria disponibile
Ad esempio la moltiplicazione di 2n x 2n = 22n deve poter essere
calcolabile per ogni n
a.a. 2002-03
e.merelli
15
Deve esserci un limite al numero e alla
complessità delle istruzioni eseguibili da C
• Questa condizione è essenziale alla intrinseca finitezza richiesta al
nostro sistema formale e quindi deve chiaramente essere
soddisfatta. Ciò implica che il numero di celle indirizzabili
direttamente con una istruzione-macchina dovrà essere finito.
Quindi la memoria illimitata al punto g) non potrà essere tutta
indirizzabile direttamente.
• Ridursi ad indirizzare una cella.
Sono ammesse esecuzioni con un numero di
passi illimitato
• Esempio moltiplicazione, il numero di passi cresce al crescere del
numero di cifre dei fattori.
• Si potrà pensare a semplici funzioni della lunghezza dei dati come
limiti superiori al numero di passi ammissibili
a.a. 2002-03
e.merelli
16
Algoritmi & Funzioni
• Sia S un sistema formale, cioè un linguaggio in cui descrivere i
nostri algoritmi, più un certo meccanismo di esecuzione.
• Un algoritmo A che termini sempre definisce quindi funzione fA
avente come dominio l’insieme dei possibili dati di input e come
codominio l’insieme dei possibili risultati.
• Come esempio si consideri dati iniziali e risultati codificati nei
naturali, ad ogni algoritmo A che termina viene associata una
funzione
f A: N → N
• fA si dice calcolata dall’algoritmo A
a.a. 2002-03
e.merelli
17
Esistono algoritmi per tutte le funzioni?
Dimostrazione
•
fA si dice calcolata se l’algoritmo A termina
•
Se per alcuni valori dei dati iniziali X un algoritmo non termina, la funzione
fA sarà non definita per quei valori.
– Una funzione che può essere non definita per alcuni valori è detta parziale.
– Una funzione definita per tutti i valori è detta totale
•
•
Si noti come ad ogni algoritmo A di S é associata una funzione fA, la stessa
funzione f può essere associata a più di un algoritmo: f=FA’=fA’’
Sia AS l’insieme di tutti i possibili algoritmi in S, l’insieme
FS = {fA | A ∈ AS}
FS è detto l’insieme delle funzioni calcolabili in S
a.a. 2002-03
e.merelli
18