Algoritmi e Strutture Dati 2

Slides:



Advertisements
Presentazioni simili
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
Advertisements

Strutture dati per insiemi disgiunti
                      Insertion-Sort
Mat_Insieme Lavoro di Gruppo Prodotti Notevoli
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.
45 Lezioni di Vita Norvegia – Šiaurės pašvaistė Music: snowdream
Informatica Generale Alessandra Di Pierro
Frontespizio Economia Monetaria Anno Accademico
Algoritmi e Strutture Dati
I sistemi di riferimento
Programmazione dinamica
Heap binomiali.
Cammini minimi con sorgente singola
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
I MATEMATICI E IL MONDO DEL LAVORO
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.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi e Strutture Dati
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
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
EIE 06/07 II / 1 Strumenti delle politiche agricole in economia aperta equilibrio di mercato in economia aperta politiche di un paese importatore politiche.
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.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Programmazione 1 9CFU – TANTE ore
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.
Algoritmi e Strutture Dati (Mod. B)
1 A cura di Vittorio Villasmunta Metodi di analisi dei campi meteorologici Corso di base sulluso del software di analisi meteorologica DIGITAL ATMOSPHERE.
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.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Questionari sulla didattica: le risposte di studenti & docenti.
Settimana: 3-7 marzo Orariolunedimartedi Mercoledi 5 Giovedi 6 Venerdi lezione intro alla fis mod DR lezione intro alla fis mod DR.
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
ISTITUTO COMPRENSIVO TORREGROTTA REPORT DATI QUESTIONARIO Alunni Scuola Primaria Classe V A.S.2012/2013.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Radix-Sort(A,d) // A[i] = cd...c2c1
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Passo 3: calcolo del costo minimo
Cerchiamo di rispondere alla seconda domanda 2)La soluzione trovata con lalgoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività?
Terzo passo: lunghezza di una LCS LCS-Length(X, Y, m, n) for i = 0 to m c[i, 0] = 0 for j = 1 to n c[0, j] = 0 for j = 1 to n for i = 1 to m if x i ==
Algoritmi e Strutture Dati
LE SAI LE TABELLINE? Mettiti alla prova!.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
Algoritmi e Strutture Dati
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Calendario lezioni ed esercitazioni impartite nell anno accademico 2001/2002 II Semestre Corso di Fisica Sperimentale con Laboratorio Classe di Tecnologie.
Numeri Interi senza segno
TRASFORMATA DI FOURIER
Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i]
Algoritmi e Strutture Dati Introduzione agli algoritmi
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Algoritmi golosi Tecniche di soluzione dei problemi viste finora:
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Luciano Gualà
Transcript della presentazione:

Algoritmi e Strutture Dati 2 Naturale continuazione del corso di Algoritmi 1 Obiettivi: studiare algoritmi e strutture dati fondamentali; studiare le tecniche per risolvere algoritmicamente alcune classi rilevanti di problemi; sviluppare una sensibilità per correttezza ed efficienza dei programmi

Programma Algoritmi golosi (greedy) Analisi ammortizzata della complessità Strutture dati avanzate per insiemi dinamici B-alberi (memoria di massa) Heap (con unione) Insiemi disgiunti

Programma (cont.) Algoritmi su grafi Visite (in ampiezza e profondità) Ordinamento topologico Componenti fortemente connesse e albero di connessione minimo Cammini minimi Reti di flusso

Docenti Paolo Baldan Brent Venable Ricevimento: Giovedì 14:30-16:30 Email: baldan@math.unipd.it Brent Venable Ricevimento: Mercoledì 14:30-16:30 Email: kvenable@math.unipd.it

Modalità d’esame Scritto Esercizi sui temi del corso Verifica Orale Opzionale (~ discussione dello scritto).

Materiale didattico Testo Pagina del corso Cormen, Leiserson, Rivest, Stein. Introduzione agli Algoritmi e Strutture Dati McGraw-Hill Pagina del corso http://www.math.unipd.it/~baldan/Alg2/Alg2.html Slide, informazioni sul programma svolto, comunicazioni ecc.

Algoritmi golosi Tecniche di soluzione dei problemi in Algoritmi 1: Divide et impera Programmazione dinamica Nuova tecnica: Algoritmi golosi

Divide et impera Albero della scomposizione Problema in sottoproblemi Sottosottoproblemi Sottoproblemi elementari

Problemi di ottimizzazione Albero della scomposizione in sottoproblemi Problema Ottime Soluzioni Sottoproblemi Sottosottoproblemi Sottoproblemi elementari

Problemi di ottimizzazione Ottime Soluzioni Problema Sottostruttura ottima Sottoproblemi Ott Ott Ott Sottosottoproblemi Ott Ott Ott Ott Ott Ott Sottoproblemi elementari

Programmazione dinamica Ottime Soluzioni Sottoproblemi condivisi Problema Sottoproblemi Ott Ott Ott Sottosottoproblemi Ott Ott Ott Ott Ott Ott Ott Sottoproblemi elementari

Algoritmi golosi Scelta golosa Problema Soluzioni Sottoproblemi Ottime Soluzioni Scelta golosa Problema Sottoproblemi Ott Ott Ott Sottosottoproblemi Ott Ott Ott Ott Ott Ott Ott Sottoproblemi elementari

ogni volta si fa la scelta che sembra migliore localmente; Algoritmi golosi ogni volta si fa la scelta che sembra migliore localmente; in questo modo per alcuni problemi si ottiene una soluzione globalmente ottima.

Problema della scelta delle attività Scelta attività Problema della scelta delle attività n attività a1,...,an usano la stessa risorsa (es: lezioni da tenere in una stessa aula). Ogni attività ai ha un tempo di inizio si ed un tempo di fine fi con si < fi. ai occupa la risorsa nell’intervallo temporale [si, fi). ai ed aj sono compatibili se [si, fi) ed [sj, fj) sono disgiunti. Problema: scegliere il massimo numero di attività compatibili.

Storiella Golosa Personaggi: Pinocchio L’algoritmo goloso Il grillo Controlla la correttezza. La fatina Conosce il futuro.

Voglio scegliere il maggior numero possibile di divertimenti. Pinocchio (l’algoritmo) arriva nella Città dei Balocchi dove può scegliere i divertimenti che preferisce. Ogni divertimento ha un’ora di inizio ed una durata. Voglio scegliere il maggior numero possibile di divertimenti. Perciò comincio scegliendo il divertimento che inizia per primo!! Così non perdo tempo. Attenzione Pinocchio!!! Se fai così non è detto che tu possa scegliere il maggior numero di divertimenti

Allora scelgo il divertimento che dura di meno!! Così mi rimane più tempo per gli altri. Attenzione Pinocchio!!! Anche così non è detto che tu possa scegliere il maggior numero di divertimenti

Uffa!! Ma sei proprio un rompiscatole!! Allora scelgo il divertimento che non si sovrappone a troppi altri!! Così me ne rimangono di più tra cui poter scegliere. Uffa!! Ma sei proprio un rompiscatole!! Adesso riprovo e se anche la prossima scelta non ti va bene ti lancio un martello. Attenzione Pinocchio!!! Anche così non è detto che tu possa scegliere il maggior numero di divertimenti

Io conosco una soluzione ottima SINV ma non la mostro a nessuno. Scelgo il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Insegnerò alla fatina come modificare la sua soluzione ottima in modo che contenga “D”. So che la fatina conosce una soluzione ottima che Pinocchio può scegliere. Ossia deve esistere una soluzione ottima a cui Pinocchio può arrivare dopo aver fatto la scelta (la Proprietà Invariante). Bene Pinocchio!! In questo modo prendi sicuramente il massimo numero di divertimenti ed io posso dimostrarlo. Mumble…, per dimostrarlo debbo far vedere che con la sua scelta quel monello non si va a cacciare in un vicolo cieco. Ma per questo dovrei conoscere il futuro. Qui mi serve l’aiuto della fatina.

Io conosco una soluzione ottima SINV ma non la mostro a nessuno. Io conosco una nuova soluzione ottima SINV che contiene “D”. Allora scelgo il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Primo caso: Ora so che la fatina conosce una soluzione ottima che contiene il divertimento “D”. Cara fatina, se la tua soluzione contiene il divertimento “D” lasciala invariata. Mumble… se la soluzione della fatina contiene già “D” non ci sono problemi.

Io conosco una soluzione ottima SINV ma non la mostro a nessuno. Allora scelgo il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Secondo caso: Cara fatina, se la tua soluzione non contiene il divertimento “D” metti “D” al posto del primo divertimento. Mumble.. il primo divertimento nella soluzione della fatina termina dopo “D” e quindi “D” è compatibile con i successivi Mumble… se la soluzione della fatina non contiene “D” devo dirgli di mettere “D” al posto di un altro divertimento.

D1 D2 ………………….. Dm D2 Dm ………………….. D

Io conosco una nuova soluzione ottima SINV che contiene “D”. Allora scelgo il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Secondo caso: So che la fatina conosce una soluzione ottima che contiene il divertimento “D”.

Io conosco una soluzione ottima SINV che soddisfa l’invariante, ossia contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora. Ora scelgo quel divertimento “D” che terminerà per primo tra quelli non sono ancora iniziati. Insegnerò alla fatina come modificare la sua soluzione ottima SINV in modo che contenga anche “D”. Mumble… devo mostrare che esiste una soluzione ottima che contiene “D” e tutti i divertimenti scelti prima.

Io conosco una soluzione ottima SINV che soddisfa l’invariante, ossia contiene tutti i divertimenti scelti finora da Pinocchio. Io conosco una soluzione ottima SINV che contiene i divertimenti scelti finora compreso il divertimento “D”. Ho finito tutti i divertimenti scelti finora. Ora scelgo quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. Primo caso: Mumble… se la soluzione della fatina contiene il divertimento “D” non ci sono problemi. Cara fatina, se la tua soluzione contiene il divertimento “D” lasciala invariata.

Io conosco una soluzione ottima SINV che soddisfa l’invariante, ossia contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora. Ora scelgo quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. Secondo caso: Cara fatina, se la tua soluzione non contiene il divertimento “D” mettilo al posto del primo divertimento che nella tua soluzione segue quelli già scelti. Mumble… Il primo che in SINV segue quelli già scelti deve terminare dopo “D”. Quindi tutti gli altri divertimenti in SINV sono compatibili con “D”. Non posso certo metterlo al posto di uno di quelli scelti prima e che so stare tutti in SINV. Mumble… se la soluzione SINV della fatina non contiene “D” devo metterlo al posto di un altro. Non posso neppure metterlo al posto di uno già iniziato perché questi sono incompatibili con quelli scelti prima e quindi non stanno in SINV.

ora attuale D1 ….. Dk Dk+1 Dk+2 ….. Dm D D1 Dk Dm ….. Dk+2

Io conosco una nuova soluzione ottima SINV che contiene i divertimenti scelti finora da Pinocchio compreso “D”. Ho finito tutti i divertimenti scelti finora. Ora scelgo quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. Secondo caso: So che la fatina conosce una soluzione ottima SINV che contiene tutti i divertimenti scelti finora da Pinocchio compreso “D”.

Io conosco una soluzione ottima SINV che soddisfa l’invariante, ossia contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora ma tutti gli altri sono già iniziati. Quindi la soluzione ottima della fatina non contiene altri divertimenti e quelli scelti finora da Pinocchio sono una soluzione ottima. Mumble… la soluzione ottima della fatina contiene tutti i divertimenti scelti finora e non ci sono altri divertimenti compatibili.

Problema della scelta delle attività Scelta attività Problema della scelta delle attività n attività a1,...,an usano la stessa risorsa (es: lezioni da tenere in una stessa aula). Ogni attività ai ha un tempo di inizio si ed un tempo di fine fi con si < fi. ai occupa la risorsa nell’intervallo temporale [si, fi). ai ed aj sono compatibili se [si, fi) ed [sj, fj) sono disgiunti. Problema: scegliere il massimo numero di attività compatibili.

Enunciato del problema Strategia che funziona SelezioneAttivita(A) AttScelte   , AttComp  A while AttComp   do - scegli l’attività a  AttComp che termina per prima - aggiungi a ad AttScelte - togli da AttComp tutte le attività incompatibili con a return AttScelte

Enunciato del problema Per implementarla supponiamo le attività a1,...,an ordinate per tempo di fine non decrescente f1 ... fn. Altrimenti le possiamo ordinare in tempo O(n log n). SelezioneAttivita(a, s, f, n) ► f1  ...  fn b1  a1, k  1, maxf  f1 for i  2 to n do if si  maxf then k  k+1, bk  ai, maxf  fi return b, k

Simulazione algoritmo fi 4 5 6 7 8 9 10 11 12 13 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a2 a2 a1 a1 a3 a3 a10 a10 maxf a5 a5 a4 a4 a6 a6 a7 a7 a8 a8 a9 a9 SelezioneAttivita(a,s,f,n) b1  a1, k  1, maxf  f1 for i  2 to n do if si  maxf then k  k+1, bk  ai, maxf  fi return b, k a11 a11 tempo

Enunciato del problema La soluzione trovata contiene quattro attività. Due domande: La soluzione trovata con l’algoritmo goloso è l’unica possibile che contiene quattro attività? La soluzione trovata con l’algoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività?

Altre soluzioni i 1 2 3 4 5 6 7 8 9 10 11 si 1 0 1 5 3 5 6 8 8 2 12 fi 4 5 6 7 8 9 10 11 12 13 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a2 a1 a2 a1 a3 a10 a5 a4 a6 a7 a9 a8 a8 a9 a11 tempo

Correttezza dell’algoritmo Cerchiamo di rispondere alla seconda domanda. La soluzione trovata con l’algoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività? SelezioneAttivita(a, s, f, n) ► f1  ...  fn b1  a1, k  1, maxf  f1 for i  2 to n do if si  maxf then k  k+1, bk  ai, maxf  fi return b, k

Invariante: Ad ogni stadio di esecuzione dell’algoritmo, la soluzione parziale corrente b1, …, bk si può estendere ad una soluzione ottima.

Base: L’algoritmo comincia con scegliere la prima attività a1 (quella con tempo di fine minimo). Siamo sicuri che questa scelta non possa compromettere il risultato? In altre parole: esiste sempre una soluzione ottima che contiene a1?

La risposta è affermativa. Sia b1, ..., bm una qualsiasi soluzione ottima (ne esiste certamente almeno una) che supponiamo ordinata per tempo di fine. b1 b2 ………………….. bm b2 bm ………………….. a1 a1

le attività b2, ... ,bm sono compatibili con b1 e terminano dopo b1. Esse hanno quindi tempo di inizio maggiore o uguale al tempo di fine f di b1. Ma a1 ha il tempo di fine f1 minimo in assoluto e quindi termina prima di b1. Quindi anche a1 è compatibile con b2, ... ,bm. Dunque a1, b2, ... ,bm è una soluzione ottima che contiene a1 (NB: a1 è certamente ≠ da b2, ... ,bm … perche?)

maxf viene posto ad f1 ed aggiornato ad fi ogni volta che si seleziona una nuova attività ai. SelezioneAttivita(a, s, f, n) b1  a1, k  1, maxf  f1 for i  2 to n do if si  maxf then k  k+1, bk  ai, maxf  fi return b, k Siccome le attività sono ordinate per tempo di fine non decrescente, maxf è il massimo tempo finale delle attività precedentemente selezionate.

Siamo sicuri che questa scelta non comprometta il risultato? Con il test: if si  maxf then k  k+1, bk  ai, maxf  fi l’algoritmo seleziona la prima attività ai il cui tempo di inizio si è maggiore o uguale di maxf. Siamo sicuri che questa scelta non comprometta il risultato? In altre parole: esiste sempre una soluzione ottima che contiene ai e le attività b1, ... ,bk finora scelte?

La risposta è ancora affermativa. Assumiamo induttivamente che esista una soluzione ottima b1, ..., bk, bk+1, ..., bm che estende le attività b1, ..., bk finora scelte e supponiamo b1, ..., bk e bk+1, ..., bm ordinate per tempo di fine. b1 bk bm ….. bk+1 bk+2 maxf b1 bk bm ….. bk+2 ai ai

Le attività scartate finora iniziano prima e hanno tempo di fine maggiore o uguale ad una delle attività precedentemente scelte. Esse sono quindi incompatibili con almeno una delle attività b1, ... ,bk finora scelte. bk+1, ... ,bm sono invece compatibili con tutte le attività b1, ... ,bk e quindi non sono tra quelle scartate precedentemente. bk+1, ... ,bm hanno sia tempo di fine che tempo di inizio maggiore o uguale di maxf.

L’attività ai è quella con tempo di fine fi minimo in assoluto tra quelle compatibili con b1, ... ,bk e quindi fi  f. Siccome bk+1 è compatibile con bk+2, ... ,bm i tempi di inizio di bk+2, ... ,bm sono maggiori o uguali di f e quindi anche di fi. Dunque anche ai è compatibile con bk+2, ... ,bm Pertanto b1, ... ,bk, ai ,bk+2, ... ,bm è una soluzione ottima contenente ai e b1, ... ,bk.

Sappiamo quindi che durante tutta l’esecuzione dell’algoritmo vale l’invariante: esiste sempre una soluzione ottima contenente le attività b1, ... , bk scelte fino a quel momento. Quando l’algoritmo termina non ci sono altre attività compatibili con b1, ... , bk e quindi le attività b1, ... , bk sono una soluzione ottima.

Perché goloso? L’algoritmo è goloso perchè ad ogni passo, tra tutte le attività compatibili con quelle già scelte, sceglie quella che termina prima. Questa scelta è localmente ottima (golosa) perché è quella che lascia più tempo a disposizione per le successive attività.

Mostrare che il seguente algoritmo risolve il problema: Esercizio 1 Esercizio 1. Problema dello “zaino” frazionario: Dati n tipi di merce M1,…, Mn in quantità rispettive q1,…, qn e con costi unitari c1,…, cn si vuole riempire uno zaino di capacità Q in modo che il contenuto abbia costo massimo. Mostrare che il seguente algoritmo risolve il problema: RiempiZaino(q, c, n, Q) ► c1  c2  ...  cn Spazio  Q , i  1 while i  n do if Spazio  qi then zi  qi, Spazio  Spazio - qi else zi  Spazio, Spazio  0 i  i + 1 return z

Esercizio 2. Problema dello “zaino” 0-1: Sono dati n tipi di oggetti O1,…, On in numero illimitato. Un oggetto di tipo Oi occupa un volume vi e costa ci. Si vuole riempire uno zaino di capacità Q in modo che il contenuto abbia costo massimo. Mostrare che il seguente algoritmo non risolve il problema RiempiZaino(v, c, n, Q) ► c1/v1  c2/v2  ...  cn /vn Spazio  Q , i  1 while i  n do zi   Spazio / vi  , Spazio  Spazio – zi vi , i  i + 1 return z

Esercizio 4 Esercizio 3. Siano a1,...,an attività didattiche aventi tempi di inizio s1,...,sn e tempi di fine f1,..., fn e supponiamo di avere un insieme sufficiente di aule in cui svolgerle. Trovare un algoritmo per programmare tutte le attività nel minimo numero possibile di aule.

Esercizio 4 Esercizio 4. Siano a1,...,an attività didattiche aventi tempi di inizio s1,...,sn e tempi di fine f1,..., fn e supponiamo di avere a disposizione m aule A1,...,Am. Trovare un algoritmo goloso per programmare il massimo numero di attività nelle m aule.