Algoritmi - INTRANET · (linguaggio di programmazione) Creazione programma: Fase 1 = algoritmo Fase...

66
Algoritmi Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00 1 Un tema centrale dell’informatica è lo studio degli algoritmi. Ora nostro obiettivo sarà quello di esplorare a sufficienza questa materia fondamentale per poter capire e apprezzare appieno l’informatica.

Transcript of Algoritmi - INTRANET · (linguaggio di programmazione) Creazione programma: Fase 1 = algoritmo Fase...

Algoritmi

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

1

Un tema centrale dell’informatica è lo studio degli algoritmi.

Ora nostro obiettivo sarà quello di esplorare a sufficienza questa

materia fondamentale per poter capire e apprezzare appieno

l’informatica.

ALGORITMI e PROGRAMMI

Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

INPUT: dati iniziali INPUT: x,y,z AZIONI esempio: Somma x ed y Somma z al risultato OUTPUT: risultato OUTPUT: x+y+z Algoritmo: Sequenza di azioni per svolgere il calcolo Programma: Algoritmo espresso in notazione formale (linguaggio di programmazione)

Creazione programma: Fase 1 = algoritmo Fase 2 = implementazione in dato linguaggio (C)

Vedremo: Elementi di base per semplici algoritmi e programmi

Tecniche algoritmiche permettono di risolvere problemi di:

• Trasmissione dati in Internet • come si gestisce in pratica il flusso di dati nella rete?

• Ricerca nel WEB • come fa Google a trovare le informazioni nel WEB?

• Bioinformatica • come il DNA determina le nostre caratteristiche?

• Processi economici • come si gestiscono le aste on-line su Ebay? • come si effettua la compravendita di azioni su Internet?

• Organizzazione di risorse e servizi • come si schedulano i voli delle aerolinee? • come si assegnano le frequenze nelle celle delle reti cellulari?

ALGORITMI

Il termine Algoritmo deriva dal matematico Arabo al-Khwarizmı (c. 780-850), autore del testo Al-jabrw’al-muqabâla (da cui anche il termine Algebra)

Algoritmi di tipo numerico furono studiati da matematici babilonesi ed indiani più di di 3000 anni fa. Algoritmi in uso fino a tempi recenti furono studiati dai matematici greci nel 500 a.C. Esempio: Algoritmo di Euclide per il Massimo Comun Divisore Esempio: Algoritmi geometrici (calcolo di tangenti, sezioni di angoli, ...)

Algoritmo: procedura computazionale che

• prende certi valori in input (ingresso) e

• produce i valori richiesti in output (uscita)

Un esempio  

si prepara ad un’uscita galante...

Va in profumeria, ma vuole risparmiare … Come identificare il profumo più economico? 0. Prendi la prima bottiglia, 1. Vai alla prossima bottiglia nello scaffale 2. Confronta il prezzo sulla bottiglia nello scaffale con quello in mano 3. Se e’ minore scambia la bottiglia in mano con quella sullo scaffale 4. Se ci sono bottiglie non controllare, allora ripeti da 1. 5. Se le bottiglie sono finite, la bottiglia più economica è quella in mano

Algoritmo: procedura computazionale che

• prende certi valori in input (ingresso) e

• produce i valori richiesti in output (uscita)

_______________ Problema: determina il profumo più economico Input: profumi con relativi costi Output: profumo di costo minimo Algoritmo:

0. Prendi la prima bottiglia, 1. Vai alla prossima bottiglia nello scaffale 2. Confronta il prezzo sulla bottiglia nello scaffale con quello in mano 3. Se è minore scambia la bottiglia in mano con quella sullo scaffale 4. Se ci sono bottiglie non controllare, allora ripeti da 1. 5. Se le bottiglie sono finite, la bottiglia più economica è quella in mano

Procedura computazionale per ottenere la relazione costi/costo minimo

Riassumendo

Un’algoritmo è una serie di operazion non ambigue ed efficientemente computabili, che una volta eseguite producono un risultato in un tempo finito

Se possiamo specificare un algoritmo allora possiamo automatizzare la soluzione

Un esempio  

Come identificare il profumo più economico? 0. Prendi la prima bottiglia, 1. Vai alla prossima bottiglia nello scaffale 2. Confronta il prezzo sulla bottiglia nello scaffale con quello in mano 3. Se è minore scambia la bottiglia in mano con quella sullo scaffale 4. Se ci sono bottiglie non controllare, allora ripeti da 1. 5. Se le bottiglie sono finite, la bottiglia più economica è quella in mano

• E’ un algoritmo? • La soluzione è corretta? • Quanto tempo prende?

Un algoritmo è una sequenza finita di passi elementari che descrive come risolvere in un tempo finito un problema

Altri esempi di algoritmi: • Istruzioni di montaggio • Preparazione del caffè • Prelievo bancomat • Preparazione di un ricetta • Calcolo del massimo comun divisore tra due interi

Algoritmo

ALGORITMO Dati iniziali Dati finali (soluzione) Algoritmo: sequenza di azioni elementari che consenta di trasformare i dati iniziali nei risultati finali attraverso un numero finito di passi, elementari e non ambigui. Note: • Insieme di dati iniziali ben definito • Sequenza di passi può essere eseguita da un opportuno

esecutore (es. calcolatore).

Algoritmo

ALGORITMO Dati iniziali Dati finali (soluzione) Proprietà fondamentali di un Algoritmo • Correttezza; produce sempre una soluzione

• Efficienza: L’algoritmo perviene alla soluzione del problema

usando la minor quantità possibile di risorse fisiche, quali tempo di esecuzione, memoria, ….

Algoritmo

ALGORITMO Dati iniziali Dati finali (soluzione) Ricapitolando, 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

Algoritmo

Un esempio  

Come identificare il profumo più economico? 0. Prendi la prima bottiglia, 1. Vai alla prossima bottiglia nello scaffale 2. Confronta il prezzo sulla bottiglia nello scaffale con quello in mano 3. Se è minore scambia la bottiglia in mano con quella sullo scaffale 4. Se ci sono bottiglie non controllare, allora ripeti da 1. 5. Se le bottiglie sono finite, la bottiglia più economica è quella in mano

• Dati ingresso? • Operazioni? • Esecutore?

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 I passi sono eseguiti in sequenza l'ordine delle istruzioni è essenziale per la correttezza

Algoritmo

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: Biblioteca

Esempio di scheda

Autore/i:Sciuto, DonatellaBuonanno, GiacomoMari, Luca Titolo:Introduzione ai Sistemi Informatici, III Edizione, 2005 Scaffale:22 Posizione:11

Esempio: Biblioteca

Formulazione dell’algoritmo 1.Decidi il libro da richiedere 2.Preleva il libro richiesto Raffinamenti successivi : se un passo non è direttamente comprensibile ed eseguibile dall’esecutore (operazione semplice), occorre dettagliarlo a sua volta mediante un ulteriore algoritmo.

Esempio: Biblioteca

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"

Esempio: Biblioteca

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.

Esempio: Biblioteca

Un algoritmo per il prelievo

1.Decidi il libro da richiedere

2.Cerca la scheda del libro richiesto come segue:

2.1. Prendi la prima scheda. 2.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. 2.3. Se esaurisci le schede il libro cercato non esiste.

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"

Esempio: Biblioteca

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

23

ES. Come piegare un foglio quadrato per ottenere un uccello.

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

24

Primitive per l’origami.

Sono richieste delle primitive ben definite

• Un insieme di primitive costituisce un linguaggio di programmazione.

• Ogni primitiva è costituita da due parti:

– Sintassi

– Semantica

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

25

Pseudocodice Primitivo • Istruzione di assegnamento nome espressione

• Selezione condizionale if condizione then attività

• Esecuzione ripetuta while condizione do azione

• Procedura procedure nome

ISTRUZIONI

Assegnamento: x E, Calcola il valore dell’espressione E e lo assegna alla variabile x Esempio: xx+y calcola il valore di x+y e lo assegna ad x se x vale 5 e y vale 3, x=x+y da ad x valore 8

ISTRUZIONI

Assegnamento: x E, Calcola il valore dell’espressione E e lo assegna alla variabile x Esempio: xx+y calcola il valore di x+y e lo assegna ad x se x vale 5 e y vale 3, x x+y da ad x valore 8 Istruzioni Strutturate: 1) Composizione di Istruzioni:

;I

;

;

m

2

1

I

IEsegui I1, quando e’ terminata esegui I2, quando e’ terminata … esegui Im.

X1;

y 2;

x x+y; (x vale 3)

y x*y (y vale 6)

ISTRUZIONI Strutturate

2) Istruzioni Condizionali:

If (C) then I; Es. if (x<=y) then z 0: Poni z=0 se x<=y; altrimenti lascia il valore di z inalterato

ISTRUZIONI Strutturate

2) Istruzioni Condizionali:

If (C) then I; C condizione, I azione Es. if (x<=y) then z 0: Poni z=0 se x<=y; altrimenti lascia il valore di z inalterato If (C) then I’ else I’’; C condizione, I’ ed I’’ azioni Es. Poni z=0 se x<=y; poni z=x-y se x>y if (x<=y) then z 0 else z x-y

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

30

Pseudocodice Primitivo • Istruzione di assegnamento nome espressione

• Selezione condizionale if condizione then attività

• Esecuzione ripetuta while condizione do azione

• Procedura procedure nome

while ( Condizione ) Azione; ES. Calcolo 1+2+… +n, risultato in y X1; y0; while (x<=n) {yy+x; x x+1}

x y

0

1 1

2 1+2=3

3 1+2+3=6

… …

n 1+2+…+n

repeat I while (C);

X 1; Y 0; repeat {y y+x; x x+1 while (x<=n)

y x

0 1

1 2 (>1)

1+2=3 3 (>2)

1+2+3=6 4 (>3)

… …

1+2+…+n n+1 (>n)

repeat I while (C);

X 1; Y 0; repeat {y y+x; x x+1 while (x<=n)

y x

0 1

1 2 (>1)

1+2=3 3 (>2)

1+2+3=6 4 (>3)

… …

1+2+…+n n+1 (>n) n=0?

repeat I while (C);

X 0; Y 0; repeat {y y+x; x x+1 while (x<=n)

y x

0 0

0 0 (>0)

0+1=1 1 (>1)

0+1+2=3 2 (>2)

… …

0+1+2+…+n n+1 (>n) n=0?

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

35

Pseudocodice Primitivo • Istruzione di assegnamento nome espressione

• Selezione condizionale if condizione then attività

• Esecuzione ripetuta while condizione do azione

• Procedura procedure nome

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

36

Algoritmo di ricerca sequenziale in pseudocodice

Data una lista (Lista) ordinata vogliamo sapere se un elemento (ValoreCercato) è nella lista

Lista ordinata: elementi ordinati in ordine decrescente da sinistra a destra

Es: (1,2,6,11,12,15,21,34,56,88,97,123) è una lista ordinata di interi

Es. (albero, erba, pianta, vaso) è una lista ordinata di nomi in ordine albabetico.

(ricorda es. Ricerca scheda libro nello schedario della biblioteca)

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

37

Algoritmo di ricerca sequenziale in pseudocodice

Data una lista (Lista) ordinata vogliamo sapere se un elemento (ValoreCercato) è nella lista

(ricorda es. scheda libro)

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

38

Algoritmo di ricerca sequenziale in pseudocodice

Data una lista (Lista) ordinata vogliamo sapere se un elemento (ValoreCercato) è nella lista

Es..

• Cerchiamo 34 nella Lista (1,2,6,11,12,15,21,34,56,88,97,123)

• Cerchiamo 38 nella Lista (1,2,6,11,12,15,21,34,56,88,97,123)

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

39

Algoritmo di ricerca sequenziale in pseudocodice

Data una lista (Lista) ordinata vogliamo sapere se un elemento (ValoreCercato) è nella lista

(ricorda es. scheda libro)

ALGORITMO ITERATIVO:

ripete stessa serie istruzioni

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

40

Componenti del controllo iterativo.

Iterazione

ripetere piu’ volte una sequenza di operazioni

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

41

Ordinamento alfabetico della lista:

Fred, Alex, Diana, Byron e Carol.

Iterazione

ripetere piu’ volte una sequenza di operazioni

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

42

Algoritmo di ordinamento per inserimento espresso in pseudocodice.

• Scrivere un algoritmo in pseudocodice per calcolare il massimo di una sequenza di valori. Più precisamente, scrivere una procedura max(Lista) che restituisce il massimo valore in Lista, dove si assume che Lista non sia vuota e che i suoi elementi siano numeri interi positivi.

• Scrivere un algoritmo che calcoli il prodotto dei primi n numeri naturali.

• Sia Lista una lista contenente n numeri interi. Scrivere un algoritmo che calcoli la somma degli elementi di Lista.

43

Ricorda: while (condizione) azione

ES. Calcolo 1+2+… +n, risultato in y X1; y0; while (x<=n) {yy+x; x x+1}

Sia A una lista contenente n numeri interi positivi (ed A[i] l’elemento i-mo della lista).

Si consideri il seguente algoritmo

somma = 0;

i = 1;

A[n+1] = 10;

while (A[i] < 10) i := i + 1;

if (i <= n ) somma = somma +A[i]

Qual’è il valore di somma al termine del ciclo?

44

Ricorda: while (condizione) azione

ES. Calcolo 1+2+… +n, risultato in y X1; y0; while (x<=n) {yy+x; x x+1}

Chiamate a procedure

• L’esecuzione di una procedura conduce all’esecuzione di un’altra procedura

ES. ProceduraA(n)

if (n>100) then restituisci 0

else esegui PorceduraB(n)

ProceduraB(n)

c=0;

while (n<100) do {n=2*n; c=c+1;}

restituisci c; 45

Strutture ricorsive

• L’esecuzione di una procedura conduce all’esecuzione della stessa procedura su diverso input

46

Strutture ricorsive

47

Es. Calcolo di n! =1*2*3*… *n – Base. 1!=1 – In generale

n!= (n-1)! * n = (n-2)! *(n-1)* (n) = (n-3)! * (n-2) *(n-1)* (n) … =1*2* … (n-2) *(n-1)* (n)

fact(n) { if (n<=1) then restituisci 1 /*Base*/ else restituisci n*fact(n-1);

RICORSIONE

• L’esecuzione di una procedura conduce all’esecuzione della stessa procedura su diverso input

• Vengono avviate attivazioni multiple della procedura

• Di queste tutte attendono il completamento

dell’ultima (caso base) che è quella che viene effettivamente eseguita.

fact(n)

{

if (n<=1) then restituisci 1 /*Caso Base - termina*/

else restituisci n*fact(n-1) }

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

49

RICERCA BINARIA

Applicazione della nostra strategia per la ricerca della voce John in una lista ordinata.

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

50

Prima bozza della tecnica di ricerca binaria:

Cerchiamo il valore ‘’ElementoCercato’’ nella lista ordinata ‘’Lista’’

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

51

Algoritmo binario di ricerca in pseudocodice

Cerchiamo il valore ‘’ElementoCercato’’ nella lista ordinata ‘’Lista’’

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

52

Cerchiamo Bill

nella lista

Alice

Bill

Carol

David

Evelyn

Fred

George

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

53

Cerchiamo David

nella lista

Alice

Carol

Evelyn

Fred

George

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

54

Tempo di computazione (Running Time) di programmi

ANALISI: analizza il r.t. di un dato programma Si raggruppano input per dimensione (es. ordinamento: dimensione= numero elementi da ordinare, sisteme di n equazioni in n incognite: dimensione=n)

Running time: funzione T(n), con n=dimensione input, che rappresenta il numero di “istruzioni semplici” usate dall’algoritmo Tempo effettivo dipende da vari paramentri: velocità del processore usato, compilatore,….

Tempo di computazione (Running Time) di programmi

Worst case (caso peggiore): su diversi input di stessa

dimensione n si possono avere r.t. differenti

T(n)= max tempo su qualsiasi input di dimensione n Es. ricerca iterativa di un elemento in una lista (dimensione=n = elementi nella lista) caso peggiore elemento non presente

Tempo di computazione (Running Time) di programmi

Confronto di r.t. Dato un problema consideriamo 2 algoritmi A e B con r.t. T’(n) e T’’(n)

T’(n)=100n T’’(n)=2n2

T’’(n) n<50, T’’(n) < T’(n) T’(n) n>50, T’’(n) > T’(n) n=100, T’’(n) = 2 T’(n) n=1000, T’’(n) = 20 T’(n)

n

Tempo di computazione (Running Time) di programmi

T’(n)=100n T’’(n)=2n2

Unità di tempo= 1ms (millisec) 1000 operazioni/sec sec (1000ms) | max n per A | max n per B | | (100n=1000*sec) | ( 2n2=1000*sec) |

1 | 10 | 22 | 10 | 100 | 70 | 100 | 1000 | 223 | 1000 | 10000 | 707 |

Tempo di computazione (Running Time) di programmi

T’(n)=100n T’’(n)=2n2

Unità di tempo= 1ms (millisec) 1000 operazioni/sec sec (1000ms) | max n per A | max n per B | | (100n=1000*sec) | ( 2n2=1000*sec) |

1 | 10 | 22 | 10 | 100 | 70 | 100 | 1000 | 223 | 1000 | 10000 | 707 | Se calcolatori diventano 100 volte più veloci (unità di tempo =1/100 di ms 100.000 operazioni/sec) In 10 sec A passa da n=100 ad n=10000 (*100) B passa da n=70 ad n=707 (*10)

Notazione Q-grande e r.t. approssimato

Dato un programma ed un input, r.t. dipende ancora da 1. Calcolatore usato (velocità di esecuzione istruzioni) 2. Compilatore (numero istruzioni macchina/istruzione C)

Quindi non ha senso parlare di tempo in sec per analizzare un

algoritmo.

Notazione Q-grande e r.t. approssimato

Dato un programma ed un input r.t. dipende ancora da 1. Calcolatore usato (velocità di esecuzione istruzioni) 2. Compilatore (numero istruzioni macchina/istruzione C)

Quindi non ha senso parlare di tempo in sec per analizzare un

algoritmo. Per nascondere effetti di 1. e 2. si usa la notazione Θ-grande (big-Theta) che ignora le costanti Es. 4m-1=Q(m) (ignorando la costante moltiplicativa 4 e quella additiva 1)

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

62

Efficienza degli Algoritmi

• Misurata attraverso il numero di istruzioni eseguite

• Big theta notation: Utilizzata per rappresentare classi di efficienza

– Esempio: Insertion sort è Θ(n2)

• Analisi del caso migliore (Best), del caso peggiore (worst) e del caso medio (average)

Applicazione dell’ordinamento per inserimento in una situazione di caso pessimo.

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

63

Algoritmo di ordinamento per inserimento: analisi del caso pessimo.

Brookshear – Informatica XI ed – Capitolo 5 l 00/00/00

64

Algoritmo di ricerca binaria: analisi del caso pessimo.

65

Esercizi RICORSIONE

• Scrivere un algoritmo in pseudocodice per calcolare il massimo di una sequenza di valori. Più precisamente, scrivere una procedura max(Lista) che restituisce il massimo valore in Lista, dove si assume che Lista non sia vuota e che i suoi elementi siano numeri interi positivi.

• Scrivere un algoritmo che calcoli il prodotto dei primi n numeri naturali.

• Sia L una lista contenente n numeri interi. Scrivere un algoritmo che calcoli la somma degli elementi di L.

• Qual è il risultato di emmecidi(18,24), dove emmecidi è la seguente procedura?

• procedure emmecidi(X,Y)

• if (X = Y)

• then return X

• else if (X > Y)

• then return emmecidi(X-Y, Y)

• else return emmecidi(X, Y-X)

66