La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi Dr. Francesco Fabozzi Corso di Informatica.

Presentazioni simili


Presentazione sul tema: "Algoritmi Dr. Francesco Fabozzi Corso di Informatica."— Transcript della presentazione:

1 Algoritmi Dr. Francesco Fabozzi Corso di Informatica

2 2 Programma Un elaboratore è una macchina universale in quanto può risolvere problemi di svariata natura –Gestione prestiti di una biblioteca, sistema di prenotazione dei voli, risoluzione equazioni, … Ma non è una macchina intelligente –Occorre impartire dallesterno la sequenza delle istruzioni da eseguire per risolvere il problema (programma) Deve essere in un linguaggio comprensibile alla macchina (linguaggio di programmazione)

3 3 Analisi e programmazione La risoluzione di un problema mediante un elaboratore avviene in due fasi successive: –Analisi del problema Ha come obiettivo la definizione di una procedura che permetta di risolvere il problema (algoritmo) –Programmazione Ha come obiettivo la traduzione dellalgoritmo in un programma

4 4 Algoritmo Lalgoritmo è una procedura che lavora su dati dingresso e fornisce dati in uscita con le seguenti caratteristiche: –Generale –Finita –Completa –Non ambigua –Eseguibile

5 5 Caratteristiche di un algoritmo Generale –Deve risolvere una intera classe di problemi al variare dei dati che li caratterizzano Finito –Le istruzioni che lo compongono e il numero di volte che ogni istruzione viene eseguita devono essere finiti Completo –Deve contemplare tutti i casi possibili

6 6 Caratteristiche di un algoritmo Non ambiguo –Ogni istruzione deve essere definita in modo univoco, senza paradossi, contraddizioni o ambiguità Eseguibile –Deve esistere un agente di calcolo in grado di eseguire ogni istruzione in un tempo finito

7 7 Efficienza di un algoritmo Uno stessa classe di problemi può essere risolta da diversi algoritmi, tutti corretti Un algoritmo efficiente deve pervenire alla soluzione del problema impiegando poco tempo e poca memoria –Diversi algoritmi, anche se tutti corretti, possono avere diversi gradi di efficienza In genere algoritmi molto efficienti rispetto al tempo tendono ad occupare più memoria e viceversa

8 8 Efficienza rispetto al tempo Un algoritmo è veloce se arriva alla soluzione del problema eseguendo un numero piccolo di passi Lefficienza rispetto al tempo si esprime indicando il numero di operazioni da compiere in funzione del numero n di dati in input Esempi: –Numero operazioni ~ n 2 algoritmo di complessità O(n 2 ) (=complessità quadratica) –Numero operazioni ~ 2 n algoritmo di complessità O(2 n ) (=complessità esponenziale)

9 9 Efficienza rispetto al tempo Esempio: –Tempo impiegato da una CPU di 100 MIPS per il calcolo di un algoritmo di complessità lineare, quadratica ed esponenziale per diverse quantità di dati in input dati compl n s s s s n2n s s s s 2n2n s s s s

10 10 Efficienza rispetto al tempo Un algoritmo di complessità polinomiale O(n k ) fornisce una soluzione al problema implementabile col calcolatore –Ancora migliori sono gli algoritmi di complessità logaritmica O(log k n) Algoritmi di complessità esponenziale sono inutilizzabili

11 11 Efficienza rispetto alla memoria Un algoritmo è efficiente rispetto alla memoria se arriva alla soluzione del problema occupando un numero piccolo di locazioni Lefficienza rispetto alla memoria si esprime indicando il numero di locazioni occupate in funzione del numero n di dati in input Esempio: –Numero locazioni ~ n algoritmo O(n) nel numero di celle di memoria impiegate

12 12 Analisi del problema La fase di analisi del problema ha come scopo la definizione dellalgoritmo. Viene effettuata in tre passi: –Definizione del problema In questa fase non bisogna riferirsi al problema particolare (istanza) ma al caso generale cioè allintera classe di problemi –Scelta del metodo di soluzione più appropriato –Sviluppo e descrizione dellalgoritmo

13 13 Analisi del problema Per problemi complessi è utile effettuare lanalisi seguendo lapproccio top-down –Tale approccio si basa sulla scomposizione del problema in sottoproblemi più elementari –Per ciascun sottoproblema viene definito un algoritmo Il vantaggio di questo approccio è che esso porta a definire algoritmi per problemi elementari che possono ritrovarsi in molti problemi complessi

14 14 Un semplice algoritmo Problema: confrontare le aree di due rettangoli (A e B) dati i rispettivi lati Algoritmo Acquisire lati di A in input Calcolare larea di A Acquisire i lati di B in input Calcolare larea di B Se larea di A è maggiore dellarea di B: Comunica in output che Area(A) > Area(B) Se larea di B è maggiore dellarea di A: Comunica in output che Area(B) > Area(A)

15 15 Applicazione dellalgoritmo Un algoritmo deve fornire la soluzione per unintera classe di problemi Per risolvere un singolo problema di una certa classe si applica lalgoritmo sui dati che lo caratterizzano –Nellesempio precedente i dati sono i lati di due particolari rettangoli da confrontare –Linsieme costituito da tutti i possibili dati prende il nome di insieme di definizione dellalgoritmo

16 16 Algoritmo e dati Un algoritmo interagisce con lesterno in due fasi: –Quando acquisisce i dati del particolare problema da risolvere (fase di input) –Quando comunica messaggi o risultati (fase di output) Ambiente esterno Dati del problema Algoritmo Messaggi / risultati

17 17 Costanti e variabili I dati su cui opera un algoritmo possono essere: –Costanti: il valore non può essere cambiato durante lesecuzione dellalgoritmo –Variabili: il valore può essere cambiato

18 18 Variabili scalari Una variabile scalare è una coppia (nome, valore) –Il valore della variabile è indeterminato in fase di definizione dellalgoritmo –Il valore viene definito durante lesecuzione dellalgoritmo (valore attuale) mediante unistruzione di assegnazione Nome Valore Variabile scalare

19 19 Variabili vettore Una variabile vettore (o array) è una coppia (nome, insieme ordinato di valori) –I valori (elementi o componenti del vettore) sono numerati a partire da 1 (o da 0) Si possono avere anche vettori di vettori –Vettori multidimensionali

20 20 Variabili vettore Se nome_v è il nome di un vettore si indica con nome_v( i ) la componente del vettore che è associata al numero intero i (indice del vettore) V(4) V(1)V(2) V(3) V(1), V(2), V(3), V(4) sono i 4 elementi del vettore Vettore V

21 21 Assegnazione di una variabile Listruzione di assegnazione permette di definire il valore attuale di una variabile nome variabile espressione A destra della freccia: espressione costituita da variabili, costanti e operatori –Si valuta lespressione sostituendo ai nomi di variabile i rispettivi valori attuali e il valore calcolato sarà il valore attuale della variabile a sinistra della freccia

22 22 Assegnazione di una variabile In unassegnazione occorre rispettare la regola dellordinamento –Una variabile che compare nellespressione deve essere già stata istanziata (cioè deve avere un valore attuale definito)

23 23 Assegnazione di una variabile Esempio: area lunghezza * larghezza Prima dellassegnazione Esempio: x x + 2 larghezza 2 lunghezza 3 area 6 larghezza 2 lunghezza 3 Dopo lassegnazione x 5 x 7 prima dopo

24 24 Istruzioni La procedura di un algoritmo è descritta per messo di una sequenza di istruzioni Esistono vari tipi di istruzioni: –Operative –Di controllo –Di salto –Di ingresso/uscita –Di inizio esecuzione –Di fine esecuzione

25 25 Tipi di istruzioni Istruzioni operative –La loro esecuzione provoca un risultato Istruzioni di controllo –Controllano il verificarsi di una certa condizione –Il risultato del controllo determina il flusso di istruzioni da eseguire successivamente

26 26 Tipi di istruzioni Istruzioni di salto –Alterano il normale ordine di esecuzione delle istruzioni specificando esplicitamente un salto a una specifica istruzione –Istruzioni di salto condizionato Il salto viene eseguito al verificarsi di una condizione –Istruzioni di salto incondizionato Il salto viene eseguito sempre –Nella programmazione strutturata il loro uso viene scoraggiato

27 27 Tipi di istruzioni Istruzioni di ingresso/uscita –Indicano la modalità di trasmissione dati o messaggi tra algoritmo e ambiente esterno Istruzione di inizio esecuzione –Indica inizio algoritmo Istruzione di fine esecuzione –Indica fine algoritmo

28 28 Descrizione di un algoritmo Lalgoritmo dellesempio iniziale è stato descritto usando il linguaggio naturale I linguaggi naturali sono: –Ambigui (una parola può avere più significati) –Ridondanti (una stessa operazione può essere descritta in modi diversi)

29 29 Descrizione di un algoritmo Per illustrare un algoritmo in maniera precisa e sintetica sono introdotti dei formalismi (formalismi di codifica) che non hanno i difetti del linguaggio naturale Nel seguito mostreremo due esempi di formalismi: –diagrammi di flusso (flow-chart) –pseudocodifica

30 30 Diagrammi di flusso Rappresentazione grafica degli algoritmi Indicano il flusso (o sequenza) delle istruzioni Ogni istruzione è rappresentata da un simbolo grafico (blocco elementare) –Simboli diversi per diversi tipi di istruzioni I blocchi sono collegati da linee di flusso –Frecce che indicano lordine con cui si susseguono le istruzioni

31 31 Blocchi elementari inizio fine istruzione ingresso/uscita Blocchi di inizio e fine algoritmo Blocco di azione Blocco contenente una istruzione di I/O Linea di flusso condizione Blocco di controllo

32 32 Caratteristiche di una flow-chart Un diagramma di flusso possiede: –1 blocco di inizio algoritmo –1 blocco di fine algoritmo –n 1 blocchi di azione o di I/O, n finito Ciascuno di questi blocchi ha una sola linea di flusso entrante e una sola linea di flusso uscente –m 0 blocchi di controllo, m finito Ciascuno di questi blocchi ha una sola linea di flusso entrante e due linee di flusso uscenti

33 33 Caratteristiche di una flow-chart In un diagramma di flusso: –Una linea di flusso entra in un blocco o si inserisce in unaltra linea di flusso –Ciascun blocco è raggiungibile dal blocco di inizio algoritmo –Il blocco di fine algoritmo è raggiungibile da qualsiasi altro blocco Blocco B raggiungibile dal blocco A Esiste una sequenza di blocchi X 1, …,X n tali che A=X 1, B=X n e per ogni i=1, …, n-1 X i è connesso con una freccia al blocco X i+1

34 34 Schemi di flusso In un algoritmo le sequenze di istruzioni si possono raggruppare secondo schemi caratteristici detti schemi di flusso: –Schema di sequenza –Schema di selezione –Schema di iterazione La giustificazione è fornita dal Teorema di Böhm-Jacopini –Qualunque algoritmo è rappresentabile utilizzando solo questi tre schemi di flusso

35 35 Schema di sequenza Una semplice sequenza di istruzioni (o anche di schemi di flusso) istruzione 1 istruzione 2 istruzione n S1S1 S2S2 SnSn S i = schemi di flusso

36 36 Schema di selezione Due istruzioni (o anche schemi di flusso) alternative da eseguirsi in base al verificarsi o meno di una certa condizione istruzione 1 istruzione 2 condizione F V

37 37 Schema di selezione Altra possibilità istruzione condizione F V

38 38 Condizione Nello schema di selezione compare una condizione –Il flusso delle istruzioni viene determinato in base al verificarsi o meno della condizione Per esprimere in maniera formale una condizione dobbiamo introdurre alcuni elementi di logica

39 39 Proposizioni Proposizione: costrutto linguistico di cui si può asserire o meno la veridicità Esempi: –8 è un numero pari vera –Potenza si affaccia sul mare falsa Valore di verità di una proposizione: lessere vera o falsa –Vero / Falso : valori logici o booleani

40 40 Predicati Predicato: proposizione il cui valore di verità dipende dal valore attuale di alcune variabili Esempi: –la variabile x è un numero pari –langolo theta è minore di 90 gradi Valutazione di un predicato: determinazione del suo valore di verità

41 41 Operatori relazionali Si chiamano operatori relazionali degli operatori che permettono di esprimere concisamente proposizioni e predicati Predicato semplice: predicato che contiene un solo operatore relazionale uguale >maggiore maggiore o uguale diverso

42 42 Negazione logica p = predicato not p = negazione logica di p Predicato con valore di verità opposto a quello di p Esempio: not( x > 2) vero solo quando x 2 pnot p verofalso vero Tabella di verità per il not

43 43 Congiunzione logica p, q = predicati p and q = congiunzione logica di p e q Predicato con valore di verità vero quando p e q sono entrambi veri Esempio: ( x > 2) and (x < 5) pqp and q falso verofalso verofalso vero Tabella di verità per land

44 44 Disgiunzione logica p, q = predicati p or q = disgiunzione logica di p Predicato con valore di verità vero quando almeno p o q è vero Esempio: ( x 5) pqp or q falso vero falsovero Tabella di verità per lor

45 45 La flow-chart dellesempio iniziale S(A)>S(B) F V inizio Leggi in input lato 1A di A S(B) 1B*2B Leggi in input lato 2A di A Leggi in input lato 1B di B S(A) 1A*2A Leggi in input lato 2B di B Scrivi in output Area di B maggiore di area di A Scrivi in output Area di A maggiore di area di B fine

46 46 Schema di iterazione Ripetizione di unistruzione (o schema di flusso) per un numero finito di volte –Lo schema da ripetersi si dice corpo delliterazione Deve essere in grado di modificare la condizione altimenti si entra in un loop infinito Corpo delliterazione condizione F V Iterazione per falso Controllo in coda (il corpo è eseguito almeno una volta)

47 47 Schema di iterazione Altra possibilità Corpo delliterazione condizione F V Iterazione per vero Controllo in testa (il corpo può anche non essere mai eseguito)

48 48 Esempio di algoritmo con iterazione Problema: calcolo di a 4 Scrivi b in output fine F V inizio Leggi a in input b 1 b b*a m m+1 m = 4 m 0 Variabile b che immagazzina il risultato del calcolo Variabile m che conta il numero di volte che si effettua loperazione (contatore)

49 49 Esempio di algoritmo con iterazione Vediamo che lalgoritmo è OK in un caso particolare –Input = 2 Output = 2 4 = 16 Iniziali# 1# 2# 3# 4Finali a b m Passi delliterazione

50 50 Esempio di algoritmo con iterazione Verificare che il seguente algoritmo è sbagliato per il calcolo di a 4 F V inizio Leggi a in input m 1 a a*a m m+1 m = 4 Scrivi a in output fine

51 51 Esempio di algoritmo con iterazione Verifichiamo che lalgoritmo non è OK usando un caso particolare –Input = 2 Output = 256 = 2 8 Iniziali# 1# 2# 3Finali a m12344 Passi delliterazione

52 52 Pseudocodifica Lalgoritmo viene descritto mediante un linguaggio formale e rigoroso –Vicino a un linguaggio di programmazione La descrizione mediante pseudocodifica si compone di due parti –Dichiarazione delle variabili usate nellalgoritmo –Descrizione delle azioni

53 53 Pseudocodifica Nella pseudocodifica: –Si utilizzano parole chiave (in maiuscolo) BEGIN, END, IF, … –Si utilizzano operatori +, *, -, >, … –Si indentano le istruzioni Rientro di tabulazione per gruppi di azioni che appartengono a un certo schema di flusso

54 54 Tipo delle variabili Indica linsieme di definizione di una variabile (o di una costante) –Cioè linsieme dei valori che può assumere INTEGER –Una variabile a cui possono essere assegnati numeri interi relativi –Una costante numero intero relativo Ex.: 2, -139 REAL –Una variabile a cui possono essere assegnati numeri razionali –Una costante numero razionale Ex.: 5.17, , E-3

55 55 Tipo delle variabili BOOLEAN –Una variabile a cui possono essere assegnati valori logici –Una costante true oppure false STRING-q –Una variabile a cui possono essere assegnate stringhe (parole) di q caratteri –Una costante stringa di q caratteri Sono racchiuse tra apici Ex.: PIPPO è una costante STRING-5 Ex.: ? è una costante STRING-1 Ex.: 278 è una costante STRING-3

56 56 Dichiarazione delle variabili Elenco delle variabili su cui opera lalgoritmo –Preceduto dalla parola chiave VAR VARi, j, k(10): INTEGER; p, q: REAL; cognome: STRING-20: ishigh: BOOLEAN. I due punti separano lelenco delle variabili dal loro tipo Il punto e virgola termina la dichiarazione di variabili dello stesso tipo Il punto termina la dichiarazione La virgola separa variabili dello stesso tipo

57 57 Descrizione delle azioni Regole –La prima azione dellalgoritmo deve essere preceduta da BEGIN –Lultima azione dellalgoritmo deve essere seguita da END –Unazione di lettura si indica con READ –Unazione di scrittura si indica con WRITE Si usano parole chiave per identificare gli schemi di flusso

58 58 Schema di sequenza Istruzione 1 Istruzione 2 … Istruzione n S1S2……SnS1S2……Sn

59 59 Schema di selezione IF condizione THEN istruzione 1 ELSE istruzione 2 ENDIF IF condizione THEN istruzione ENDIF

60 60 Schema di iterazione REPEAT corpo delliterazione UNTIL condizione ENDREPEAT WHILE condizione corpo delliterazione ENDWHILE Controllo in coda Controllo in testa

61 61 Esempi di pseudocodifica VARa1, a2, b1, b2, sa, sb: REAL. BEGIN READ a1 READ a2 sa a1 * a2 READ b1 READ b2 sb b1 * b2 IF sa > sb THEN WRITE Area A maggiore area B ELSE WRITE Area B maggiore area A ENDIF END

62 62 Esempi di pseudocodifica VAR a, b: REAL; m: INTEGER. BEGIN READ a b 1 m 0 REPEAT b b * a m m + 1 UNTIL m = 4 ENDREPEAT WRITE b END


Scaricare ppt "Algoritmi Dr. Francesco Fabozzi Corso di Informatica."

Presentazioni simili


Annunci Google