Lezione n°1 Prof.ssa Rossella Petreschi

Slides:



Advertisements
Presentazioni simili
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
Advertisements

Complessità Computazionale
ASD a.a.2010/2011- Lezione 12 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Backtracking/ Branch and Bound Lezione n°12.
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.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
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.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
PROPORZIONI, RAPPORTI, CALCOLI PERCENTUALI Prof.ssa CONCETTA MALORGIO Corso di Economia Aziendale.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
© 2007 SEI-Società Editrice Internazionale, Apogeo
Cosa nascondono i numeri naturali? N Loretta Ferrante.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
MASSIMO COMUNE DENOMINATORE (M.C.D)
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Dal problema al processo risolutivo
Progettare algoritmi veloci usando strutture dati efficienti
Richiami di concetti generali
Analisi di sequenze di operazioni Union-Find
(7x + 8x2 + 2) : (2x + 3) 8x2 + 7x + 2 2x + 3 8x2 + 7x + 2 2x + 3 4x
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
Lezione n°17 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
Richiami di concetti generali
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Forme per rappresentare l’algoritmo:
Sulla complessità Lezione n°2
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
I MONOMI.
K4 è planare? E K3,3 e K5 sono planari? Sì!
IL CONCETTO DI ALGORITMO
Lezione n°12 Prof.ssa Rossella Petreschi
Programmare.
Algoritmi per il flusso nelle reti
PROCEDURA per la misura e la relativa stima
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Ricorsione 16/01/2019 package.
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
MergeSort Usa la tecnica del divide et impera:
Unione per ranghi compressi
Analisi ammortizzata Lezione n°2
Algoritmi.
Transcript della presentazione:

Lezione n°1 Prof.ssa Rossella Petreschi Lezione del 1 /10/2014 del Corso di Algoritmica

Etimologia della parola algoritmo Abu Jà far Mohammed ibn Musa al-Khowarizm, (padre di Jafar, Mohammed, figlio di Mosé, nativo di Al-Khowarizm) (circa 780-850). Matematico, astronomo e geografo, Al-Khowarizmi fu uno dei maggiori studiosi che affollarono “Bayt al-Hilma”, una delle massime istituzioni culturali di tutti i tempi del mondo arabo-islamico. Al-Khowarizmi fu autore di un’opera diffusissima, dove, tra i primi, fece riferimento al concetto di procedimento per risolvere un problema in un numero finito di passi. Per questo, il suo nome, trascritto in latino, un po’ deformato, e forse anche influenzato dalla parola greca “arithmos” (numero), passò ad identificare le regole di calcolo. Etimologia della parola algoritmo

Dal vocabolario della lingua italiana(Treccani.it) algoritmo (ant. algorismo) s. m. [dal lat. mediev. algorithmus o algorismus, dal nome d’origine, al-Khuwārizmī…………………….
 1. Termine che indicò nel medioevo i procedimenti di calcolo numerico fondati sopra l’uso delle cifre arabiche. Nell’uso odierno, anche con riferimento all’uso dei calcolatori, qualunque schema o procedimento matematico di calcolo; più precisamente, un procedimento di calcolo esplicito e descrivibile con un numero finito di regole che conduce al risultato dopo un numero finito di operazioni, cioè di applicazioni delle regole. Esem., a. euclideo, METODO per determinare il massimo comune divisore di due numeri interi a e b, basato su divisioni successive. 
……………………………..

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 (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 (2000-1650 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. (10x600)(6x60-1)=1 Moltiplica 6 per 4 troverai 24. Aggiungi 1 troverai 25. Forma l’inverso di 25 troverai 2;24. (25x600)(2x60-1+24x60-2)=1 Moltiplica 2;24 per 6. Troverai 14;24. (4x601+10)(14x60-2+24x60-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. Da NOTARE: che il metodo viene formulato in termini astratti, facendo riferimento a grandezze qualsiasi e non a specifici valori numerici esemplificativi (IV secolo avanti Cristo!!!). Euclide non lo chiama certo algoritmo…..

Algoritmi Finitezza Effettività Definitezza 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. (1975)

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à

Costo dell’algoritmo di Euclide (per sottrazione) 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 Esempio: MCD (1001,2)=MCD (999,2)=MCD (997,2)=………=MCD (2,1)=MCD (2,1)=MCD (1,1)=1 Sono state necessarie 500 (1001 = 2x500 + 1) sottrazioni per arrivare al risultato, da cui si evince che il calcolo del MCD per sottrazioni è proporzionale alle dimensioni di n ed m. Ma se noi calcolassimo da subito il quoziente q ed il resto r della divisione di n per m (n>m)? 1001 = 2x500 + 1; 2 = 2x1 + 0.

Costo dell’algoritmo di Euclide (per divisione) Input: due numeri interi n ed m Output: MCD(n,m) Passo 1: Se n < m, scambia n con m; Passo 2: fintantochè m>0 calcola n = qm + r sostituisci m al posto di n e r al posto di m Ritorna (l’ultimo)n come MCD Quanti passi in questo caso? r < n/2 (poiché n>=m+r e m>r), quindi dopo k passi consecutivi, m <= n/ 2K ovvero sono sufficienti al più log2n passi per calcolare MCD(n,m), da cui si evince che il calcolo del MCD per divisioni è proporzionale al numero di bits necessari per rappresentare n.

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) Passo 1: S = n x (n+1)/2;

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 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 ≥ 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

Andamento di alcune funzioni

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

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

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

Ridurre la costante Alg1:: O(n), c.m. = 2 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.

2 problemi assai simili nella formulazione….. Problema del cammino euleriano: esiste un cammino che passi per tutti gli archi del grafo una e una sola volta? Problema del cammino hamiltoniano: esiste un cammino che passi per tutti i nodi del grafo una e una sola volta?

Cammino euleriano (1736) Nella città di Könisberg esiste un’isola A chiamata Kneiphof attorno a cui fluiscono due rami del fiume Pregel. Vi sono sette ponti a, b, c, d, e, f, g che attraversano i due rami. La questione è se una persona possa scegliere una passeggiata che la porti ad attraversare ognuno dei ponti una volta ma non più di una volta, tornando alla fine al punto di partenza.(pubblicazione del’Accademia delle Scienze di San Pietroburgo)

Cammino hamiltoniano (1859) Nel 1859 il matematico irlandese W.R. Hamilton mise in circolazione un rompicapo di legno a forma di dodecaedro regolare. Ad ognuno dei 20 nodi del dodecaedro era associato il nome di una città e il problema consisteva nel cercare un itinerario lungo gli archi del solido che visitasse una e una sola volta le varie città. Il percorso selezionato veniva memorizzato con uno spago che si arrotolava intorno a dei chiodi fissati ai nodi.

………ma profondamente diversi Premessa: la soluzione di un problema modellato tramite un grafo si ottiene analizzando se esiste e quale sia la proprietà strutturale del grafo che risponde all’istanza del problema. Cammino euleriano: un grafo connesso ammette un cammino euleriano se tutti i gradi dei suoi nodi sono pari. Cammino hamiltoniano: a tutt’oggi non è stata trovata, e non si sa se esista, una proprietà strutturale del grafo rispondente al problema.