Richiami di concetti generali
Lezione n°1
Prof.ssa Rossella Petreschi
Lezione del 6 /10/2011 del Corso di Algoritmi e Strutture Dati
Riferimenti: Capitoli da 1 a3 del testo
Giorgio Ausiello, Rossella Petreschi
“L’informatica invisibile. Come gli algoritmi regolano la nostra
vita… e tutto il resto”
Edizioni: Mondadori Università /Sapienza Università di Roma
http://www.mondadoriuniversita.it/minerva/indice3.html
Algoritmi e Strutture Dati
a.a.2011/2012
Al-Khuwarizmi
La parola algoritmo deriva dalla latinizzazione del nome Abdallah
Mohamed Abu Jafar Ibn Musa al-Khuwarizmi al-Magusi
(780/850d.c).Matematico, astronomo, astrologo e geografo visse a
Baghdad presso la corte del califfo al-Ma’mun che lo nominò
responsabile della famosa biblioteca Bayt al-Hikma (casa della
speranza).
Fino al sec.XVII algoritmo indicava
il sistema di numerazione posizionale.
per via del testo
Algoritmi de numero indorum
Algoritmi e Strutture Dati
a.a.2011/2012
I primi algoritmi
(2000-1650 a.c.)
Problema n°51 del papiro di Rhind
Se ti viene detto: un triangolo di 10 khet di altezza e 4 khet la sua
base. Quale è la sua area? Fare come si deve.
Fai la metà di 4, cioè 2. Fai la moltiplicazione di 10 per 2. E’ la sua
area. La sua area è 20.
Da tavoletta babilonese
Il numero è 4;10.Qual è il suo inverso? Procedi come segue. Forma
l’inverso di 10,troverai 6. Moltiplica 6 per 4 troverai 24. Aggiungi
1 troverai 25.Forma l’inverso di 25 troverai 2;24.Moltiplica 2;24
per 6. Troverai 14;24. L’inverso è 14;24.Questo è il modo di
procedere.
Algoritmi e Strutture Dati
a.a.2011/2012
L’algoritmo di Euclide
libro VII degli Elementi
Supponiamo che siano dati due numeri AB e G∆ non primi tra loro e che G∆ sia il più
piccolo. Si deve trovare la più grande misura comune dei numeri AB e G∆. Se G∆ misura
AB allora G∆ è la misura comune di AB e G∆ perchè G∆ misura anche se stesso; è
evidente che esso è la misura comune più grande poiché nessun numero maggiore di G∆
può misurare G∆. Ma se G∆ non misura AB e se togliamo il minore tra AB e G∆ dal
maggiore resterà qualche numero che misura ciò che rimane. Il resto non sarà uno,
altrimenti i numeri AB e G∆ sarebbero primi tra loro, il che non è ipotizzato. Supponiamo
che G∆ misurando AB lasci AE più piccolo di lui, e che AE, misurando G∆ lasci GZ più
piccolo di lui e che infine GZ misuri AE. Poichè GZ misura AE e AE misura ∆Z, GZ
misura ∆Z. Ma esso misura se stesso quindi misura l’intero G∆. Ma G∆ misura BE
dunque GZ misura EB ma esso misura anche AE, quindi esso misura l’intero AB. Dunque
GZ è una misura comune di AB e G∆.
Input: due numeri interi n ed m
Output: MCD(n,m)
Passo 1: Se n = m, MCD(n,m) = n;
Passo 2: altrimenti se m>n MCD(m-n,n)
altrimenti MCD(n-m,m) se n < m
Algoritmi e Strutture Dati
a.a.2011/2012
Algoritmi
Secondo Donald E. Knuth dato un particolare input, un
algoritmo deve generare un output proseguendo per passi
successivi (sequenza di operazioni elementari)
caratterizzati dalle seguenti proprietà:
Finitezza
Effettività
Definitezza
The Art of Computer Programming. Volume 1: Fundamental Algorithms.
Algoritmi e Strutture Dati
a.a.2011/2012
Finitezza
Ogni algoritmo deve sempre terminare dopo l’esecuzione di un
numero finito di passi.
Quando (raramente) si accetta la non terminazione di un algoritmo
si parla di procedura computazionale.
Esempio di procedura computazionale: il sistema operativo di un
computer progettato per controllare l’esecuzione di altri programmi
e per restare in stato di attesa quando nessun programma è in
esecuzione.
Algoritmi e Strutture Dati
a.a.2011/2012
Effettività
Ogni algoritmo deve essere effettivamente
eseguibile, ovvero ogni operazione deve essere
sufficientemente di base da poter essere eseguita a
carta e penna in una quantità finita di tempo.
Esempio di mancanza di effettività:
la divisione di un numero naturale per 0.
Algoritmi e Strutture Dati
a.a.2011/2012
Definitezza
Ogni passo di un algoritmo deve essere definito in modo
chiaro e non ambiguo, ovvero deve dar luogo alla stessa
sequenza di operazioni e di risultati, indipendentemente
da chi lo esegue e in qualunque momento venga eseguito.
Esempio di mancanza di definitezza: ricette di specialità
culinarie (che quindi non sono algoritmi), dove sono
molto diffusi i termini “a piacimento” o “quanto basta”.
Algoritmi e Strutture Dati
a.a.2011/2012
Validazione
Una volta che un algoritmo è stato progettato bisogna
provarne la correttezza, ovvero bisogna dimostrare che
esso fornisce l’output corretto per ogni possibile input.
Solo dopo che è stato validato, un algoritmo può essere
trasformato in programma.
Algoritmi e Strutture Dati
a.a.2011/2012
Programma
Programma è un algoritmo espresso in un opportuno
linguaggio di programmazione
I linguaggi di programmazione sono stati introdotti per
garantire la definitezza ed evitare le ambiguità, ovvero
progettati in modo che ogni enunciato ammesso dal
sistema abbia un unico significato quando interpretato da
un calcolatore.
Algoritmi e Strutture Dati
a.a.2011/2012
Correttezza
Provare la correttezza di un programma vuol dire
verificare che il programma esprime in modo corretto
l’algoritmo che sta implementando.
Notare la differenza fra la validazione (che riguarda la
“filosofia “ dell’algoritmo) e la correttezza (che riguarda
l’analisi del programma).
Algoritmi e Strutture Dati
a.a.2011/2012
Costo di un programma
L’esecuzione di un programma richiede il consumo di
risorse computazionali: spazio, tempo, processori. Poichè
il tempo è la misura più significativa, si ha che:
il costo di un programma è in genere calcolato rispetto al
tempo richiesto per la sua esecuzione e la definizione di
tempo di esecuzione, per essere robusta, deve essere
definita in modo indipendente dal modello di calcolo
adoperato, pertanto ci si può riferire direttamente al costo
di un algoritmo
Algoritmi e Strutture Dati
a.a.2011/2012
Bontà di un algoritmo
La bontà di un algoritmo è determinata dal suo costo,
ovvero dal computo del numero di operazioni elementari
compiute dall’algoritmo stesso.
Una operazione è elementare se si considera indipendente
dalla dimensione degli operandi.
La complessità in tempo di un algoritmo permette di
stabilire un limite superiore al tempo di calcolo reale
dell’algoritmo: tempo reale = tempo 1 operazione
elementare × complessità
Algoritmi e Strutture Dati
a.a.2011/2012
Caso peggiore e caso medio
Analisi del caso peggiore
Il tempo è determinato considerando, per ciascuna dimensione,
l’istanza che richiede maggior tempo di calcolo.
Analisi del caso medio
Il tempo è determinato calcolando, per ciascuna dimensione, la media
dei tempi di calcolo per le istanze di quella dimensione. Il calcolo del
caso medio non è sempre possibile: per una buona stima occorre
conoscere la distribuzione di probabilità delle istanze del problema.
In generale, il tempo richiesto da un algoritmo cresce con la
dimensione dell’input.
Algoritmi e Strutture Dati
a.a.2011/2012
In generale,ma non sempre…
Somma dei primi n numeri interi dipendente dall’input: O(n)
Input: un numero intero n
Output: S = somma dei primi n numeri interi
Passo 1: Si pone S = 0;
Passo 2: Si ripete S = S + i per i = 1, ..., n
Passo 3: Si fornisce S in output
Somma dei primi n numeri interi indipendente dall’input:O(1)
Input: un numero intero n
Output: S = somma dei primi n numeri interi
Passo 1: S = n x (n+1)/2;
Passo 3: Si fornisce S in output
Algoritmi e Strutture Dati
a.a.2011/2012
Sfruttare le proprietà del problema
Ricerca sequenziale, elementi in ordine casuale: O(n)
Input: A: vettore di n elementi; x: elemento noto
Output: j: 1 ≤ j ≤ n, se x = A(j), j = 0 altrimenti
Passo 1:
Si pone j = 1;
Passo 2:
Si ripete j = j + 1 finchè non si trova j > n o x = A(j)
Passo 3:
Se j > n allora si pone j = 0
Passo 4:
Si fornisce j in output
Ricerca dicotomica, elementi ordinati: O(logn)
Input: A: vettore di n elementi ordinati in modo non decrescente; x: elemento noto
Output: j: 1 ≤ j ≤ n, se x = A(j), j = 0 altrimenti
Passo 1:
Si pone j = 0, sx = 1, dx = n;
Passo 2:
Si ripete
mezzo = (sx+dx)/2
se x = A(mezzo) allora j = mezzo
altrimenti se x < A(mezzo) allora dx = mezzo -1 altrimenti sx = mezzo +1
fintanto che sx ≤ dx e j = 0
Passo 3: Si fornisce j in output
Algoritmi e Strutture Dati
a.a.2011/2012
Complessità asintotica
 grande(limite asintotico superiore)
f(n) = (g(n)) se e solo
f (n) ≤ c g(n) ∀n ≥ no
Omega(limite asintotico inferiore)
f(n) = (g(n)) se e solo
f (n) ≥ c g(n) ∀n ≥ no
Teta(limite asintotico stretto)
f(n) =(g(n)) se e solo c1 g(n) ≤ f (n) ≤ c2 g(n) ∀n ≥ no
Algoritmi e Strutture Dati
a.a.2011/2012
Classificazione degli algoritmi(1)
O(1) : tempo di elaborazione costante
O(logn),O(n), O(n2) e O(n3): tempologaritmico, lineare,
quadratico e cubico ,rispettivamente
O(nk): tempo polinomiale, k costante
O(2n ): tempo esponenziale
Algoritmi e Strutture Dati
a.a.2011/2012
Classificazione degli algoritmi(2)
• algoritmi deterministici
se per ogni istruzione esiste, a parita` di dati d'ingresso, un
solo passo successivo.
• algoritmi non deterministici
se contiene almeno una istruzione che ammette piu` passi
successivi.
Algoritmi e Strutture Dati
a.a.2011/2012
Classificazione dei problemi(1)
Problemi di decisione
soluzione vero o falso
Problemi di ottimizzazione
soluzione la migliore fra le possibili
--------------------------Problemi di enumerazione
Problemi di ricerca
Algoritmi e Strutture Dati
a.a.2011/2012
Classificazione dei problemi(2)
P ≠ NP ? Uno dei 7 problemi da US$ 1.000.000 selezionati dl Clay Matematics Institute
Vinay Deolalikar (Hewlett-Packard Labs)
Grigory Perelman (Poincaré conjecture)
Algoritmi e Strutture Dati
a.a.2011/2012
Andamento di alcune funzioni
Algoritmi e Strutture Dati
a.a.2011/2012
Analizzare con attenzione
O(1) < O(log n) < O(n) < O(n2 ) < O(n3 ) < ... < O(2n )
anche se la disuguaglianza può valere solo per valori di n decisamente
grandi:
n!< n1000 per n < 1165
e ancora bisogna fare attenzione quando ci sono le costanti
moltiplicative
n2 giorni > n3secondi dato che 1 giorno = 86400 secondi
Algoritmi e Strutture Dati
a.a.2011/2012
Ridurre la costante
Input: un vettore di n elementi distinti, min =max=1
Output: max, min
Alg1:: O(n), c.m. = 2
Passo : for j = 2 to n if A[j ] > A[max] then max ← j
else if A[j ] < A[min] then min ← j
Alg2:: O(n), c.m. = 3/2
Passo 0 : for (j = 0 to n-2, step 2) if A[j+1 ] > A[j+2] then (cmax ← j+1, cmin ←j+ 2)
else (cmax ←j+ 2, cmin ← j+1)
if A[cmin] < A[min] then min ← cmin
if A[cmax ] > A[max] then max ← cmax
Passo 1 : If j = n-1 then if A[j ] > A[max] then max ← j
then if A[j ] < A[min] then min ← j
Algoritmi e Strutture Dati
a.a.2011/2012
Confronto fra algoritmi
•fissare una misura comune per la dimensione dell’istanza;
•fissare quali sono le operazioni elementari da contare;
•determinare la complessità considerando anche le costanti;
•considerare gli ordini di grandezza solo se le costanti
moltiplicative sono del medesimo ordine.
Algoritmi e Strutture Dati
a.a.2011/2012