Prof.ssa Rossella Petreschi Lezione del 1 /10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitoli da 1 a3 del testo Giorgio Ausiello, Rossella.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

2. Introduzione alla probabilità
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
Analisi della complessità degli algoritmi
Analisi della complessità degli algoritmi
Capitolo 8 Sistemi lineari.
Algoritmi e Programmazione
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.
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.
Iterazione enumerativa (for)
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 29/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Algoritmi e Strutture Dati (Mod. A)
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Introduzione1 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa.
Notazioni Asintotiche e Ordini di Grandezza delle funzioni
Elementi di Informatica
Elementi di Informatica
ELEMENTI DI PROGRAMMAZIONE
ALGORITMI E COMPLESSITÀ
Metodo della moltiplicazione
Elementi di Informatica di base
Algoritmi e Programmazione strutturata
INFORMATICA MATTEO CRISTANI.
Radix-Sort(A,d) // A[i] = cd...c2c1
Algoritmi e Strutture Dati
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
Complessità degli algoritmi (cenni) CORDA – Informatica A. Ferrari.
PROPAGAZIONE DEGLI ERRORI:
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
MATEMATIZZAZIONE Con il termine “Matematizzazione” intendiamo quel processo attraverso il quale si tenta di “tradurre” nel formalismo matematico un problema.
La ricorsione.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 07/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Il problema della ricerca Algoritmi e Strutture Dati.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Analisi asintotica e Metodi di analisi Algoritmi e Strutture Dati.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Complessità Computazionale
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Sesta giornata Risolvere efficientemente un problema in P: Il problema dell’ordinamento: Insertion.
Informatica 3 V anno.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Simulazione di lettura e scrittura concorrente Tecnica dell’accelerated cascading Lezione.
Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 7.4 del testo Kingston “Algorithms and.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Complessità e Trasportabilità Lezione n°3.
Prof.ssa Rossella Petreschi Lezione del 7 /01/ 2013 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 32 del testo Cormen,Leiserson,Rivest,
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°9.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Interconnessione tramite reti Lezione n°6.
ASD a.a.2010/2011- Lezione n°1 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Richiami di concetti generali Lezione n°1.
Lezione n°1 Prof.ssa Rossella Petreschi
Richiami di concetti generali
Richiami di concetti generali
Sulla complessità Lezione n°2
Transcript della presentazione:

Prof.ssa Rossella Petreschi Lezione del 1 /10/2012 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 Richiami di concetti generali Lezione n°1

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

I primi algoritmi ( 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 (Input) Quale è la sua area? Fare come si deve (Sequenza di operazioni) Fai la metà di 4, cioè 2. Fai la moltiplicazione di 10 per 2. E’ la sua area. La sua area è 20.(Output)

I primi algoritmi ( a.c.) Da tavoletta babilonese Il numero è 4;10 (Input) Qual è il suo inverso? Procedi come segue (Sequenza di operazioni) Forma l’inverso di 10, troverai 6. (10x60 0 )(6x60 -1 )=1 Moltiplica 6 per 4 troverai 24. Aggiungi 1 troverai 25. Forma l’inverso di 25 troverai 2;24. (25x60 0 )(2x x60 -2 )=1 Moltiplica 2;24 per 6. Troverai 14;24. (4x )(14x x60 -3 )=1 L’inverso è 14;24 (Output) Questo è il modo di procedere.

L’algoritmo di Euclide libro VII degli Elementi (IV SEC A.C.) Supponiamo che siano dati due numeri AB e GD non primi tra loro e che GD sia il più piccolo. Si deve trovare la più grande misura comune dei numeri AB e GD. Se GD misura AB allora GD è la misura comune di AB e GD perchè GD misura anche se stesso; è evidente che esso è la misura comune più grande poiché nessun numero maggiore di GD può misurare GD. Ma se GD non misura AB e se togliamo il minore tra AB e GD dal maggiore resterà qualche numero che misura ciò che rimane. Il resto non sarà uno, altrimenti i numeri AB e GD sarebbero primi tra loro, il che non è ipotizzato. Supponiamo che GD misurando AB lasci AE più piccolo di lui, e che AE, misurando GD lasci GZ più piccolo di lui e che infine GZ misuri AE. Poichè GZ misura AE e AE misura DZ, GZ misura DZ. Ma esso misura se stesso quindi misura l’intero GD. Ma GD 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 GD. 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 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.

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.

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.

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”.

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.

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.

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).

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

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à

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.

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

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 = 0; 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

Complessità asintotica  grande(limite asintotico superiore) f(n) =  (g(n)) se e solo f (n) ≤ c g(n) ∀ n ≥ n o Omega(limite asintotico inferiore) f(n) =  (g(n)) se e solo f (n) ≥ c g(n) ∀ n ≥ n o Teta(limite asintotico stretto) f(n) =  (g(n)) se e solo c 1 g(n) ≤ f (n) ≤ c 2 g(n) ∀ n ≥ n o

Andamento di alcune funzioni

Classificazione degli algoritmi rispetto al tempo O(1) : tempo di elaborazione costante O(logn),O(n), O(n 2 ) e O(n 3 ): tempo logaritmico, lineare, quadratico e cubico,rispettivamente O(n k ): tempo polinomiale, k costante O(2 n ): tempo esponenziale

P ed NP P ≠ NP ? Uno dei 7 problemi da US$ selezionati dal Clay Matematics Institute il

Analizzare con attenzione O(1) < O(log n) < O(n) < O(n 2 ) < O(n 3 ) <... < O(2 n ) anche se la disuguaglianza può valere solo per valori di n decisamente grandi: n!< n 1000 per n < 1165 e ancora bisogna fare attenzione quando ci sono le costanti moltiplicative n 2 giorni > n 3 secondi dato che 1 giorno = secondi

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

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.