Algoritmi Algoritmo descrizione di come si deve eseguire un

Algoritmo
descrizione di come si deve eseguire un lavoro o
risolvere un problema
Algoritmi
sequenza di passi/istruzioni
Paolo Bison
Muh.ammad ibn Mūsā al-Khuwārizmı̄
matematico arabo autore di
Fondamenti di Informatica 1
A.A. 2003/04
Al-jabr w’al muqābala
Università di Padova
procedimento di calcolo
esistono anche in altri contesti:
processo
algoritmo
passo tipico
montare un istruzioni
incolla
mobile
di montaggio A su B
cucinare
ricetta
aggiungere olio
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.2/16
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.1/16
Esecuzione
Programmazione
esecutore
uomo/calcolatore
problema
funzionalità dell’esecutore:
capire il significato di ogni passo
eseguire l’operazione corrispondente
algoritmo
programma
descrizione
uomo
linguaggio naturale
calcolatore programma in un
linguaggio di programmazione
indipendenti dal linguaggio in cui sono espressi
fasi
progettare un algoritmo
esprimerlo in un linguaggio di programmazione
(programma)
far eseguire il programma
potenza espressiva del linguaggio
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.3/16
Progettazione
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.4/16
Computabilità
Dato un problema come si progetta un algoritmo che
lo risolva ?
NON ESISTE un algoritmo per progettare algoritmi
attività intellettuale
metodologie e linguaggi
prevedere tutti i possibili eventi che potrebbero
verificarsi durante l’esecuzione
distruzione del vettore Arianne
Ci sono problemi per i quali non esistono algoritmi?
halting problem
Dato un problema, come possiamo sapere se esiste
un algoritmo che lo risolve?
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.6/16
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.5/16
Correttezza
Complessità
Dato un algoritmo, come possiamo essere sicuri che è
corretto?
metodi formali
metodi empirici
inaffidabilità dei programmi
dato un algoritmo
quali sono le risorse necessarie per eseguirlo ?
in quanto tempo ?
se ci sono più algoritmi per un dato problema, qual’è il
“migliore”?
esistono problemi per i quali il miglior algoritmo
richiede tante risorse da rendere impossibile
l’elaborazione?
crittografia
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.7/16
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.8/16
Algoritmo
Top Down
un insieme di passi/istruzioni che definiscono una
sequenza di operazioni mediante le quali si risolve un
problema (o una classe di problemi)
approccio metodologico alla progettazione di algoritmi
per affinamenti successivi
proprietà
fasi
dato un problema si
scompone in sottoproblemi
finitezza
divide et impera
numero dei passi finito ed eseguito un numero finito
di volte
ciascun sottoproblema è a
sua volta scomposto in
ulteriori sottoproblemi
determinatezza
istruzioni definite senza ambiguità in modo tale da
garantire sempre gli stessi risultati a parità di
condizioni
realizzabilità
istruzioni devono essere conosciute all’esecutore
che sa come eseguirle
così via finché ogni sottoproblema è sufficientemente dettagliato e preciso
da poter essere eseguito.
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.9/16
Algoritmo del tè - I
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.10/16
Algoritmo del tè - II
algoritmo principale:
fai bollire dell’acqua
metti il tè nella tazza
versa l’acqua
affinamento primo sottoproblema
fai bollire l’acqua:
riempi il bollitore
accendi il fuoco
attendi che bolla
spegni il fuoco
si noti:
azioni(istruzioni) e oggetti (dati)
ambiguità
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.12/16
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.11/16
Bottom Up
Algoritmo del tè - III
approccio opposto al top down
dato un certo insieme di algoritmi/istruzioni elementari
si cerca di aggregarli in maniera da costruire
l’algoritmo per la soluzione del problema o di suoi
sottoproblemi
Se esecutore capace di strofinare si può accendere il
fuoco con il seguente algoritmo:
strofina due legnetti
continua finché il fuoco appare
combinazione delle due metodologie
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.13/16
Rappresentazione
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.14/16
Do it yourself
linguaggi per rappresentare algoritmi:
naturale
pseudocodice
flow chart
linguaggio di programmazione
Dato un esecutore capace solamente di disegnare e
contare, sviluppare un algoritmo per calcolare la
somma di due numeri interi
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.15/16
Algoritmi, Paolo Bison, A.A. 2003-04, 2003-09-30 – p.16/16