Progettazione di Algoritmi Corso di laurea in Informatica Prof. De Prisco Prova scritta del: 29/01/2016 Inserire i propri dati nell’apposito spazio. Non voltare la pagina finché non sarà dato il via. Dal via avrai 3 ore di tempo per rispondere alle domande. La prova consta di 8 domande a risposta multipla e 3 domande aperte. Per le domande a risposta multipla occorre rispondere inserendo la lettera scelta nell’apposito quadratino accanto al numero della domanda. In caso di ripensamento, cancellare la risposta data e scrivere la nuova risposta nel successivo quadratino. Ogni risposta esatta vale 4 punti; ogni risposta errata vale ︎-1 punto; ogni domanda lasciata in bianco vale 0 punti. Le domande a risposta multipla valgono in tutto 32 punti, quelle aperte 68 punti per un totale di 100 punti. NOME: _________________________________ COGNOME:_____________________________ MATRICOLA: _____________________________ Quesito Punti risposta multipla /32 uso di un algoritmo /18 problema 1 /25 problema 2 /25 Totale /100 Progettazione di algoritmi Prova scritta Quesito 1 29/01/2016 Prof. DE PRISCO 1. ☐☐☐☐ Un algoritmo è efficiente? A. B. C. D. Se riesce ad esaminare l’input in tempo polinomiale Se risolve il problema indipendentemente dalla grandezza dell’input Se risolve il problema in tempo polinomiale Se riesce a verificare una soluzione in tempo polinomiale 2. ☐☐☐☐ Un algoritmo risolve un problema in 3×10n millisecondi, dove n è la grandezza dell’input. Usando l’algoritmo su un’istanza di grandezza 12, l’algoritmo termina in A. B. C. D. circa 1 giorno e mezzo quasi 3 anni quasii 1 millennio Un tempo incalcolabile 3. ☐☐☐☐ Sia T un albero DFS di un grafo G=(V,E) e siano x e y nodi di T tali che esiste l’arco (x,y)∈E. A. B. C. D. x e y possono essere due nodi qualsiasi nell’albero T x e y devono essere due foglie dell’albero T x e y uno dei due deve essere un antenato dell’altro nell’albero T x e y uno dei due deve essere la radice dell’albero T 4. ☐☐☐☐ Stiamo costruendo un MST di un grafo G=(V,E). Abbiamo già selezionato un sottoinsieme proprio S⊂E degli archi. Il prossimo arco che selezioniamo per la costruzione del MST è A. B. C. D. l’arco di peso minimo (v,w) con v ∈V e w∈V-S l’arco di peso minimo fra quelli rimanenti l’arco di peso minimo (v,w) con v ∈V e w∈V l’arco di peso minimo (v,w) con v ∈S e w∈V-S 5. ☐☐☐☐ Esiste una implementazione della struttura dati Union-Find per un insieme di n elementi e k operazioni di Union con i seguenti tempi di esecuzione? A. B. C. D. Make: O(log n), Union: O(k) in media, e Find: O(log n) Make: O(n), Union: O(1) e Find: O(log log n) Make: O(n), Union: O(1) e Find: O(1) in media Make: O(log n), Union: O(log n), Find: O(log n) 6. ☐☐☐☐ In uno schema di codifica a lunghezza variabile conviene (se si può) A. B. C. D. Assegnare parole brevi a tutti i simboli Assegnare parole lunghe a simboli meno frequenti e parole brevi per simboli più frequenti Assegnare parole lunghe a tutti i simboli Assegnare parole lunghe a simboli più frequenti e parole brevi per simboli meno frequenti 7. ☐☐☐☐ Sia f un flusso f:E→ℜ+. Quali delle seguenti affermazioni è vera A. B. C. D. Il valore di f è la somma di f(u,v) su tutti gli archi uscenti da un qualsiasi nodo u Il valore di f è la somma di f(s, v) su tutti gli archi uscenti da dalla sorgente s Il valore di f è la somma di f(v, s) su tutti gli archi entranti nella sorgente s Il valore di f è la somma di f(u,v) su tutti gli archi in un cammino dalla sorgete s al pozzo t. 8. ☐☐☐☐ La programmazione dinamica sfrutta: A. B. C. D. L‘impossibilità di usare un algoritmo greedy La possibilità di suddividere il problema originale in tanti sottoproblemi La possibilità di risolvere un numero polinomiale di sottoproblemi per risolvere tutto il problema originale L’impossibilità di risolvere in modo efficiente un problema usando la forza bruta pagina 1 Progettazione di algoritmi Prova scritta Quesito 2 29/01/2016 Prof. DE PRISCO Applicazione algoritmo Usa l’algoritmo di Huffman per calcolare il codice ottimale per una sorgente di simboli le cui frequenze sono (0.3, 0.20, 0.15, 0.07, 0.05, 0.04, 0.03, 0.02, 0.02, 0.01, 0.01) Mostra la costruzione dell’albero ad ogni passo. pagina 2 Progettazione di algoritmi Prova scritta Quesito 3 29/01/2016 Prof. DE PRISCO Problema 1 Un gruppo di amici astrofili pianifica nottate di osservazioni di eventi interessanti (passaggi di comete, allineamento di pianeti, etc). Durante ogni nottata sono previsti molti eventi e per semplicità assumeremo che ci siano n eventi ognuno separato da esattamente un minuto: quindi l’evento j ha luogo al minuto j; se non l’osservano al minuto j lo perdono. Per osservare un evento devono girare il telescopio e di nuovo per semplicità assumeremo che la posizione del telescopio sia misurato in gradi da 0 a 360: per posizionare correttamente il telescopio per l’osservazione dell’evento j occorre “spostarlo” nella posizione dj. Purtroppo non potranno vedere tutti gli eventi in quanto il telescopio, che è abbastanza grande e complesso, può spostarsi solo alla velocità di un grado per minuto. Ad esempio, se si osserva un evento alla posizione d=355, per osservare un evento alla posizione d=7 occorreranno 12 minuti per spostare il telescopio. Quindi se si decide di vedere un particolare evento si dovranno saltare altri eventi. L’ultimo evento n è quello più importante quindi questo evento non deve essere perso. Aiuta gli amici astrofili a ideare un algoritmo che permetta loro di pianificare in modo ottimale, cioè selezionando il massimo numero di eventi da vedere con il vincolo che l’evento n sia sempre incluso, le nottati di osservazioni astronomiche. pagina 3 Progettazione di algoritmi Prova scritta Quesito 4 29/01/2016 Prof. DE PRISCO Problema 2 Ti hanno assunto come consulente presso un azienda che produce parti meccaniche per aerei. L’azienda ha molti dipendenti ognuno capace di svolgere un determinato sottoinsieme di compiti fra i tanti di cui l’azienda ha bisogno. Per semplicità assumeremo che l’azienda ha n dipendenti e che ci sono n compiti diversi da svolgere e che un dipendente è sufficiente a svolgere un compito. Il tuo obiettivo è quello di trovare un modo per rappresentare le competenze dei singoli dipendenti e poi un algoritmo efficiente per assegnare a ciascuno dei dipendenti uno specifico compito da svolgere in modo tale da minimizzare il numero di dipendenti che rimangono senza un compito. pagina 4