Algoritmi.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Informatica Generale Marzia Buscemi
Frontespizio Economia Monetaria Anno Accademico
La scelta del paniere preferito
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
INFORMATICA Strutture iterative
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Iterazione enumerativa (for)
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
EIE 0607 III / 1 A B P a = 30 P b = 35 t = 2, tc = 1 Questo può essere un equilibrio? No! Politiche di un paese importatore: una tariffa allimportazione.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Algoritmo di Ford-Fulkerson
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Programmazione 1 9CFU – TANTE ore
Canale A. Prof.Ciapetti AA2003/04
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Realizzazione e caratterizzazione di una semplice rete neurale per la separazione di due campioni di eventi Vincenzo Izzo.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Unità Didattica 1 Algoritmi
Cos’è un problema?.
Strutture di controllo in C -- Flow Chart --
Fondamenti di Informatica Algoritmi
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Elementi di Informatica
Contatore: esempio di circuito sequenziale
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Elementi di Informatica di base
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
INFORMATICA MATTEO CRISTANI.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
Un trucchetto di Moltiplicazione per il calcolo mentale
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
14 marzo 2002 Avvisi:.
Esempi risolti mediante immagini (e con excel)
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ECDL Patente europea del computer
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 13 Marzo 2014.
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
Numeri Interi senza segno
I chicchi di riso e la sfida al Bramino
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Il numero più grande Accademia dei Lincei
TRASFORMATA DI FOURIER
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Algoritmi e Strutture Dati
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Transcript della presentazione:

Algoritmi

Definizione di algoritmo Metodo per risolvere un problema Sequenza ordinata di passi Passi eseguibili Es.: elencare tutti i numeri reali Passi non ambigui Deve terminare

Algoritmi, programmi e processi Programma: descrizione di un algoritmo in un linguaggio di programmazione Processo: esecuzione dell’algoritmo descritto da un programma

Rappresentazione di un algoritmo Varie notazioni: Linguaggio naturale Immagini Diagrammi di flusso Pseudocodice Linguaggio di programmazione: Insieme di primitive (passi singoli) Regole che dicono come combinare le primitive per descrivere passi piu’ complessi Primitiva: sintassi (simbolo/i) + semantica (significato)

Immagini per descrivere un algoritmo -- 1

Immagini per descrivere un algoritmo -- 2

Primitive per gli origami

Quali primitive? Istruzioni del linguaggio macchina Non ambigue Algoritmo pronto per essere eseguito Ma troppo a basso livello Pseudocodice: versione meno formale di un linguaggio di programmazione

Pseudocodice Nomi per indicare valori Associazione nome-valore: Nome espressione Assegna a nome il valore di espressione Es.: temperatura-oggi  temperatura-ieri +10

If then else Scelta tra due alternative, se una condizione e’ vera If (condizione) then (attivita’) else (attivita’) If (condizione) then (attivita’) Es.: if (ci sono biglietti) then (compra un biglietto)

While do Eseguire un’attivita’ purche’ una condizione rimanga vera: While (condizione) do (azione) Es.: while (ci sono biglietti) do (vendi un biglietto)

Ciclo While (condizione) do (azione) Controlla la condizione: vera Esegui l’azione .... Controlla la condizione: falsa Stop

Fasi del ciclo Inizializzazione: stato iniziale, che verra’ modificato dall’azione Controllo della condizione di terminazione: confronto tra stato corrente e condizione, terminazione se uguali Modifica dello stato: per andare verso la condizione di terminazione

Esempio di pseudocodice Nome del pezzo (procedura) di pseudocodice  possiamo chiamare questo pezzo per nome all’interno di un altra procedura Procedure Saluti Conta 3; While (Conta > 0) do (stampa il messaggio “Saluti” e Conta  Conta - 1) Inizializzazione: Conta  3 Condizione di terminazione: conta <0 o conta =0 Modifica stato: Conta  Conta -1

Parametri Pseudocodice piu’ generico possibile Es.: procedure Ordina (Lista) Lista e’ un nome generico per una qualsiasi lista di numeri Ogni volta che useremo la procedura Ordina decideremo che lista considerare

Ricerca sequenziale Verificare se un elemento e’ presente in un elenco di elementi Supponiamo ordine crescente (alfabetico o numerico) Scorriamo tutto l’elenco dall’inizio alla fine finche’ troviamo l’elemento o non ci sono piu’ elementi da guardare o gli elementi rimasti sono maggiori Procedure Cerca (lista, valorecercato) if (elenco vuoto) then (stampa no) else (valore  primo-elemento; while (valorecercato > valore e ci sono ancora elementi) do (valore  elemento successivo); if (valorecercato = valore) then (stampa si) else (stampa no))

Attenzione alle fasi di un ciclo numero  1; while (numero =/= 6) do (numero  numero +2) Condizione di terminazione: numero = 6 Non verra’ mai raggiunta!

While e repeat while (condizione) do (azione): prima si controlla la condizione e poi si effettua l’azione repeat (azione) until (condizione): prima esecuzione dell’azione, poi controllo condizione  azione sempre eseguita almeno una volta

while repeat

Ordinamento Vogliamo ordinare una lista di nomi Es.: Fred, Alice, David, Bill, Carol Ordine alfabetico da sinistra a destra  Alice, Bill, Carol, David, Fred

Esempio Il pezzo “Fred” e’ ordinato, ma “Fred-Alice” no  scambio

Esempio

Esempio

In generale ... Scelgo il primo elemento della parte non ordinata (pivot) Faccio scorrere verso il basso gli elementi ordinati maggiori del pivot Inserisco il pivot nella posizione vuota All’inizio: pivot  secondo elemento Ad ogni passo: pivot  elemento successivo Ordinamento per inserimento

Pseudocodice procedure Ordina(Lista) N  2; while (N ≤ lunghezza-lista) do (pivot  elemento-n; sposta pivot in posizione temporanea lasciando uno spazio vuoto); while (c’e’ un elemento > pivot sopra lo spazio vuoto) do (sposta elemento verso il basso); sposta pivot nello spazio vuoto; N  N+1 )

Strutture ricorsive Ciclo: iterazione di una sequenza di passi Ricorsione: ripetizione di tutte le istruzioni come sottocompito su dati parziali Esempio: telefonata all’interno di un’altra

Esempio: algoritmo di ricerca binaria (in un insieme ordinato) Tecnica che usiamo spesso pr cercare una voce in un dizionario: Apriamo il dizionario in un punto (a meta’) Se non c’e’ la voce che cerchiamo, andiamo nella prima parte o nella seconda Finche’ Troviamo la voce cercata  si Guardiamo un pezzo con un elemento singolo e non e’ la voce cercata  no

Esempio

Pseudocodice 1 if (lista vuota) then fallimento else (elemento-test  elemento-a-meta’; Scelta fra tre casi: Caso 1: elemento-cercato = elemento-test (successo) Caso 2: elemento-cercato < elemento-test (cerca nella parte prima di elemento-test) Caso 3: elemento-cercato > elemento-test (cerca nella parte dopo elemento-test) )

Pseudocodice 2: nome della procedura Procedure Ricerca(lista, elemento-cercato) if (lista vuota) then fallimento else (elemento-test  elemento-a-meta’; Scelta fra tre casi: Caso 1: elemento-cercato = elemento-test (successo) Caso 2: elemento-cercato < elemento-test (Ricerca(parte prima di elemento-test,ec)) Caso 3: elemento-cercato > elemento-test (Ricerca(parte dopo elemento-test,ec)) )

Esempio 1 Cerchiamo Bill nella lista (Alice, Bill, Carol, David, Evelyn, Fred, George) Seleziono David David =/= Bill  cerco nella prima meta’ (Alice, Bill, Carol) Sospendo l’esecuzione di Ricerca in corso, e attivo un’altra esecuzione della procedura Ricerca Seleziono Bill Bill = Bill  si Ritorno nella prima esecuzione  si

Esempio 1

Esempio 2 Cerchiamo David nella lista (Alice, Carol, Evelyin, Fred, George) Seleziona Evelyin Evelyin =/= David  cerca nella prima meta’ (Alice, Carol) Seconda esecuzione: Seleziona Carol Carol =/= David  cerca nella lista vuota Terza esecuzione, su lista vuota  fallimento Finisce la terza esecuzione Finisce la seconda esecuzione (fallimento) Finisce la prima esecuzione (fallimento)

Riassunto Divide la lista in due parti Cerca su una delle due parti Ricerca binaria Ogni volta ricerca su una parte piu’ piccola  prima o poi arrivera’ a trvare l’elemento o a cercare nella lista vuota

Ricerca sequenziale e binaria In entrambi i casi: ripetere una sequenza di istruzioni Ricerca sequenziale: ciclo => ripete la sequenza sulla stessa lista con diverso stato iniziale Ricerca binaria: ripete la sequenza come sottocompito della ricerca in corso  ricorsione Varie attivazioni della procedura Una attiva, le altre sospese Ogni attivazione sospesa attende che un’altra termini per continuare

Sistema ricorsivi Condizione di terminazione (caso base) Istruzioni che assicurano che verra’ soddisfatta prima o poi Inizializzazione, modifica, verifica terminazione Di solito verifica del caso base prima della ripetizione Non verificata altra attivazione su un sottoproblema piu’ vicino alla terminazione Verificata  termina l’attivazione corrente e non ne attiva altre

Nell’esempio ... Inizializzazione: attivazione di ricerca su intera lista Caso base: trovare valore cercato o cercare su lista vuota Modifica: nuove attivazioni, stesso valore da cercare in una lista piu’ piccola Lista finita, ogni fase ricorsiva su una lista piu’ piccola  prima o poi valore trovato o lista vuota  termina sempre

Esercizio Ricerca di Joe nella lista (Alice, Bob, Carol, David, Evelyin, Fred, George, Henry, Irene, Joe, Karl, Larry, Mary, Nancy, Oliver) Quali nomi vengono esaminati? Henry, Larry, Joe

Esercizio Numero massimo di voci esaminate in una lista di 200 voci? Due  50 Tre  25 Quattro  12 Cinque  6 Sei  3 Sette  1 Otto Nota: 28 = 256, 27 = 128

Da while a repeat contatore  2; while (contatore < 7) do (stampa valore di contatore; contatore  contatore +1) repeat (stampa contatore; contatore  contatore +1) until contatore = 7

Da repeat a while contatore  1; repeat (stampa valore di contatore; contatore  contatore +1) until (contatore = 5) while contatore < 5 do (stampa contatore; contatore  contatore +1)

Sequenza di Fibonacci Corpo del ciclo? ultimo  0; Inizializzazione? Modifica? Terminazione? Verifica? Numeri stampati? ultimo  0; corrente  1; while (corrente < 100) do (stampa valore di corrente; temp  ultimo; ultimo  corrente; corrente  ultimo + temp)

Esercizio procedure Mistero(Ultimo, Corrente) if (Corrente < 100) then (stampa Corrente; Temp  Corrente + Ultimo; Mistero(Corrente, Temp)) Lista valori stampati con Ultimo=0 e Corrente=1?

Esercizio Ricerca binaria, ricerca di J nella lista A,B,C,D,E,F,G,H,I,J,K,L,M,N,O Quali lettere vengono esaminate? H, L, J Quali se si cerca Z? H, L, N, O

Esercizio Contatore  1; while (Contatore =/= 7) do (stampa Contatore; Contatore  Contatore +3) Quante volte viene eseguito il corpo del ciclo? Se il test fosse (Contatore =/= 6)?

Esercizio procedure Test1(Contatore) if (Contatore =/= 5) then (stampa Contatore; Test1(Contatore+1)) procedure Test2(Contatore) then (Test2(Contatore+1); stampa Contatore) Ingresso 1: che uscita dalle due procedure? Test1: 1,2,3,4 Test2: 4,3,2,1

Ricerca sequenziale e binaria Lista (A,B,C,D,E,F,G,H,I) Ricerca sequenziale o binaria piu’ veloce per cercare G? Per A? Per Bi? Per S? Quante voci esaminate da ricerca sequenziale di E? E da ricerca binaria?

Fattoriale - 1 Fattoriale(0)=1 Fattoriale(n) = n x fattoriale(n-1) Es.: fatt(3)=3xfatt(2)=3x2xfatt(1)=3x2x1xfatt(0)=3x2x1x1=6 Algoritmo ricorsivo per calcolare il fattoriale di n

Fattoriale - 2 procedure Fatt(n,k) if n=0 then (k  1) else (attiva Fatt(n-1,k1); k  n x k1)

Efficienza degli algoritmi Ricerca su una lista (es. 30.000 elementi) Ricerca sequenziale: in media esamina meta’ elementi (es.: 15.000) Se 10millisec per ogni elemento, in media 150 sec. (2.5 minuti) Ricerca binaria: prima 30.000, poi 15.000, poi 7.500, poi 3.750, ... Al massimo 15 voci esaminate Se 10 millisec per ogni elemento, al massimo 15/10 sec.

Analisi generica Qualunque lista, di lunghezza arbitraria Caso migliore, peggiore, medio Nell’esempio: caso medio per ricerca sequenziale, caso peggiore per ricerca binaria In generale, per liste con n elementi: Ricerca sequenziale: in media n/2 elementi Ricerca binaria: al massimo log2(n) elementi

Esempio: ordinamento per inserimento Caso migliore: ogni pivot e gia’ al suo posto  n-1 confronti Caso peggiore: ogni pivot deve essere confrontato con tutti i precedenti (lista in ordine inverso all’inizio) Primo pivot: confronto con 1 elemento Secondo pivot: con 2 elementi, ... Numero totale di confronti: 1+2+...+(n-1) = n(n-1)/2 = ½(n2-n) Esempio: lista con 10 elementi  45 confronti nel caso peggiore

Esempio di caso peggiore

Caso medio Meta’ dei confronti del caso peggiore  ¼(n2-n) Esempio: per liste con 10 elementi, 22,5 confronti Caso migliore, medio, peggiore: approssimano il tempo (numero di passi) per eseguire l’algoritmo

Grafico del caso peggiore: ½(n2-n) All’aumentare del numerto di elementi, il tempo aumenta anche di piu’  Algoritmo meno efficiente all’aumentare della lunghezza della lista

Grafico per ricerca binaria (caso pessimo: log2(n)) All’aumentare del numero di elementi, il tempo aumenta, ma meno  algoritmo piu’ efficiente all’aumentare della lunghezza della lista

Forma dei grafici Dipende dall’espressione matematica Espressione lineare  linea retta Espressioni quardatiche  curva parabolica Espressioni logaritmiche  forma logaritmica Forma identificata con la espressione piu’ semplice che la identifica Parabola: O(n2) Logaritmica: O(log2n) Notazione O: caso pessimo Confronto tra algoritmi

Esercizi Algoritmi per somma e moltiplicazione di numeri decimali con n cifre Somma, caso pessimo: n+1 somme  O(n) Moltiplicazione, caso pessimo: nxn  O(n2)