Problemi, Algoritmi, Linguaggi - Dipartimento di Matematica e

annuncio pubblicitario
Problemi, algoritmi, linguaggi
Luca Bortolussi
Dipartimento di Matematica e Informatica
Università degli studi di Trieste
Programmazione
La programmazione è l'attività con cui si predispone
l'elaboratore ad eseguire un particolare insieme di
azioni su una particolare tipologia di dati, allo scopo
di risolvere un problema.
DATI
INPUT
Elaboratore
elettronico
RISULTATI
OUTPUT
Alcune domande …
Quali istruzioni esegue (cosa può fare) un
elaboratore?
Quali problemi può risolvere un elaboratore?
Esistono problemi che un elaboratore non
può risolvere?
Che ruolo ha il linguaggio di programmazione?
Quali problemi?
I problemi affrontati dalle applicazioni informatiche sono di
natura molto varia:
- Trovare il maggiore fra due numeri
- Dato un elenco di nomi e numeri di telefono, trovare il
numero di una data persona
- Dati a e b, risolvere l'equazione ax+b=0
- Stabilire se una parola precede alfabeticamente un'altra
- Ordinare un elenco di nomi
- Creare, modificare e alterare suoni
- Analizzare, riconoscere e modificare immagini
- Supportare operazioni di commercio elettronico
Problemi e modelli
Ricerca
della
soluzione
Costruzione
Mondo Reale
modello
Modello
re
tf
ft tt
12 14
13 15
F=m×a
Interpretazione
della soluzione
Come affrontare un problema
PROBLEMA
Descrizione
Risoluzione
La descrizione del problema non indica direttamente
(in genere) un modo per ottenere il risultato voluto
specifica di un
problema
#
specifica del processo
di risoluzione
Risoluzione di un problema
•Descrizione del problema in modo preciso.
•Individuazione di un opportuno metodo
risolutivo (algoritmo).
Il metodo di risoluzione trasforma i dati
iniziali nei corrispondenti risultati finali, che
costituiscono una soluzione del problema.
L’algoritmo: essenza dell’informatica
Un algoritmo è una sequenza finita di passi
elementari che descrive come risolvere in un tempo
finito un problema.
Esempi di algoritmi:
- Istruzioni di montaggio
- Preparazione del caffè
- Prelievo bancomat
- Preparazione di un ricetta
- Calcolo del massimo comun divisore tra due interi
Più precisamente …
ALGORITMO
Dati iniziali
Dati finali
(soluzione)
Si definisce algoritmo una sequenza di azioni
elementari che consenta di trasformare i dati
iniziali nei risultati finali attraverso un numero
finito di passi, elementari e non ambigui.
Questa sequenza di passi è valida per un insieme
di dati iniziali ben definito e può essere eseguita
da un opportuno esecutore.
Azioni elementari
Dipendono dall’esecutore! In generale devono
avere le seguenti proprietà:
Finitezza: l’azione deve concludersi in un tempo
finito
Osservabilità: l’azione deve avere un effetto
osservabile, cioè deve produrre qualcosa
Riproducibilità: a partire dallo stesso stato
iniziale, la stessa azione deve produrre sempre lo
stesso risultato
Non-ambiguità: ogni azione deve essere
univocamente interpretabile dall'esecutore
Proprietà fondamentali degli algoritmi
Correttezza
L’algoritmo perviene sempre alla
soluzione del compito cui è preposto.
Efficienza
L’algoritmo perviene alla soluzione del
problema usando la minor quantità
possibile di risorse fisiche, quali:
- tempo di esecuzione, memoria, …
Ricapitolando
Dunque, un algoritmo deve essere:
- applicabile a qualsiasi insieme di dati di ingresso
appartenenti al dominio di definizione
dell’algoritmo;
- costituito da operazioni appartenenti ad un
determinato insieme di operazioni
fondamentali;
- costituito da regole non ambigue, cioè
interpretabili in modo univoco qualunque sia
l’esecutore (persona o “macchina”) che le legge.
Esempio: prendere l’automobile
1. Aprire l’auto
2. Aprire la portiera
3. Sedersi al posto di guida
4. Schiacciare la frizione
5. Avviare il motore
6. Inserire la prima marcia
7. Rilasciare “delicatamente” la frizione per partire
NB:
I passi sono eseguiti in sequenza e l'ordine delle
istruzioni è essenziale per la correttezza
dell'algoritmo!
Esempio: gestione biblioteca
•I libri sono disposti sugli scaffali
•La posizione di ogni libro è fissa ed è individuata da due
coordinate:
-Scaffale (i.e. numero dello scaffale)
-Posizione nello scaffale
•La biblioteca è dotata di uno schedario (ordinato per
autore/i e titolo). Ogni scheda contiene, nell’ordine:
-cognome e nome dell’autore
-titolo del libro
-data di pubblicazione
-numero dello scaffale in cui si trova
-posizione attribuita al libro nello scaffale.
Esempio di scheda
Autore/i: Sciuto, Donatella
Buonanno, Giacomo
Mari, Luca
Titolo:
Introduzione ai
Sistemi Informatici,
III Edizione, 2005
Scaffale: 22
Posizione:11
Formulazione dell’algoritmo
1.
2.
Decidi il libro da richiedere
Preleva il libro richiesto
Se un passo non è direttamente comprensibile ed
eseguibile dall’esecutore, occorre dettagliarlo a sua volta
mediante un ulteriore algoritmo.
Questo modo incrementale di procedere si dice topdown o anche procedimento per raffinamenti
successivi.
Un algoritmo per il prelievo
1. Decidi il libro da richiedere
2. Cerca la scheda del libro richiesto
3. Segnati numero scaffale e posizione
4. Cerca lo scaffale indicato
5. Accedi alla posizione indicata e preleva il libro
6. Scrivi i tuoi dati sulla "scheda prestito"
Il sotto-algoritmo di ricerca
1. Prendi la prima scheda.
2. Esamina se titolo e autore/i sono quelli cercati.
In caso positivo la ricerca termina con successo,
altrimenti passa alla scheda successiva e ripeti.
3. Se esaurisci le schede il libro cercato non esiste.
Cosa succede se l’autore cercato è
“Zoran Zuzzurellone”?
Una algoritmo di ricerca più furbo
1. Esamina la scheda centrale dello schedario.
2. Se la scheda centrale corrisponde al libro cercato
allora termina.
3. Altrimenti, prosegui allo stesso modo nella metà
superiore o inferiore dello schedario a seconda
che il libro cercato segua o preceda quello indicato
sulla scheda.
L’algoritmo è incompleto!
C’è un’altra condizione di
terminazione: quando il libro non
esiste.
Perfezionando il passo 2
1. Esamina la scheda centrale dello schedario.
2. Se la scheda centrale corrisponde al libro cercato
oppure se la parte di schedario da consultare è
vuota allora termina.
3. Altrimenti, prosegui allo stesso modo nella metà
superiore o inferiore dello schedario a seconda
che il libro cercato segua o preceda quello indicato
sulla scheda.
Libro trovato
Libro inesistente
Perché più furbo?
Perché il secondo modo di cercare la scheda è più
furbo del primo?
Si fa meno fatica!!!
Se abbiamo 15 schede e cerchiamo l’ultima:
-Il primo metodo ne esamina 15
-Il secondo metodo ne esamina 4
(la 8, la 12, la 14 e la 15)
In generale, se abbiamo n schede
-Il primo metodo ne esamina al più n
-Il secondo metodo ne esamina al più log(n)
(per n = 1010, log(n) = 36)
Complessità! Perché così importante?
Le risorse che abbiamo sono finite
Universo
protone
10-13 cm
Abbiamo non più di 10125
protoni nell’Universo
40 miliardi di anni luce
(limite alla memoria disponibile!)
Complessità! Perché così importante?
Le risorse che abbiamo sono finite
Se assumiamo come unità temporale il tempo
necessario alla luce a viaggiare per 10-13 cm e
assumiamo che l’universo sia nato 10 miliardi di anni
fa, il numero di unita’ di tempo trascorse finora è
minore o uguale a
42
10
(limite al tempo disponibile!)
Che speranze abbiamo?
L’informatica progredisce molto più
rapidamente di altre tecnologie!!!
•
•
•
•
•
snail 0.0006 mil./h
man 4 mil./h
US auto 55 mil./h
Jet 600 mil./h
Supersonic jet 1200 mil./h
•
•
•
•
•
man (pencil) 0.2/sec
man (abacus) 1/sec
calculator 4/sec
computer 200.000/sec
fast computer 2M/sec
Grid problem
calcolare il numero di cammini da start a finish
finish
start
Il problema è difficile
•non ci sono metodi noti per calcolare il numero
di cammini (in a reasonable amount of time)
possiamo comunque generare dei cammini random e
usare un teorema di statistica che ci dice che la stima
migliore e’ data dalla media dei reciproci delle probabilita’
osservate
•otteniamo una stima enorme:
(1.6 ± 0.3) 1024
Non li possiamo enumerare tutti!!!
elencando un milione di cammini al secondo, ci vorrebbero
più di 10 miliardi di anni!!!
The need for a theory!
Abbiamo bisogno di una teoria degli algoritmi che:
• Fornisca algoritmi per risolvere problemi
• Classifichi la complessità dei problemi in:
• Trattabili
• Intrattabili
• Non risolvibili
Problemi intrattabili e non risolubili
Problema non risolubile
Terminazione: dire se un dato algoritmo termina
oppure no.
(teoria della computabilità, Macchine di Turing)
Problema intrattabile
Protein structure prediction: data la struttura
primaria di una proteina, predire la sua struttura
terziaria
(teoria della complessità, NP-completezza)
Risoluzione di problemi col computer
Ogni elaboratore è una macchina in grado di
eseguire azioni elementari su dati.
L'esecuzione delle azioni elementari è richiesta
all'elaboratore tramite comandi chiamati istruzioni.
Le istruzioni sono espresse attraverso frasi di un
opportuno linguaggio di programmazione.
Un programma non è altro che la formulazione
testuale di un algoritmo in un linguaggio di
programmazione.
Algoritmi e Programmi
Algoritmo: sequenza finita di passi che risolve
in un tempo finito un problema.
Codifica: fase di scrittura di un algoritmo attraverso
un insieme ordinato di frasi (“istruzioni”), scritte in
un determinato linguaggio di programmazione,
che specificano le azioni da compiere.
Programma: Testo scritto in
accordo alla sintassi e alla
semantica di un linguaggio
di programmazione
Algoritmi e Programmi
PROBLEMA
ALGORITMO
metodo
risolutivo
PROGRAMMA
linguaggio di
programmazione
Concludendo
•L’informatica si occupa di risolvere problemi ben
definiti, spesso legati alla modellazione della realtà.
•Dato un problema, la sua soluzione è fornita mediante
un algoritmo, che specifica i passi elementari che
devono essere compiuti per giungere ad una soluzione.
•Non tutti i problemi ammettono una soluzione
algoritmica, non tutti i problemi risolubili ammettono
una soluzione trattabile.
•Dato un algoritmo, esso può venire eseguito da un
computer previa codifica in un opportuno linguaggio di
programmazione.
Scarica