COGNOME: _________________ Nome: ___________________ Algoritmi Matricole dispari – Prof.ssa Anselmo Appello straordinario del 17 Aprile 2015 Attenzione: Inserire i propri dati nell’apposito spazio soprastante e sottostante. Non voltare la pagina finché non sarà dato il via. Dal via avrai 2 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 disegnare accanto un nuovo quadratino con la lettera scelta. Inoltre: 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. Si è ammessi all’orale se si totalizzano almeno 40/100 punti di cui almeno 10/32 nelle domande a risposta multipla. COGNOME: ………….......................................... Nome: …………..................................................... Numero di matricola: …………............................. multiple/32 quesito1 /22 quesito2 /24 quesito3 /22 Totale/100 1) 1 Qual è la corretta successione delle funzioni seguenti affinché compaiano da sinistra a destra in ordine crescente di crescita asintotica (si supponga che la base del logaritmo sia 2): n4 +log n, (log n)2, 2log n ? 4 2 log n A. n +log n, (log n) , 2 C. n4+log n, 2 log n, (log n)2 2 log n 4 B. (log n) , 2 , n +log n D. Nessuna delle risposte precedenti. 2) Qual è il tempo di esecuzione del seguente frammento di pseudocodice? for i=1 to n/2 A. O(log n) if x>y then B. (n) x=x-y C. (n2) return x D. Nessuna delle risposte precedenti 2 3) Se T(n) = 2 T(n 1) + 3, con T(1) = 1, allora A. T(4) = 28 B. T(4) = 26 3 4 C. T(4) = 5 D. Nessuna delle risposte precedenti 4) Il tempo di esecuzione dell’algoritmo MERGESORT è: A. (n log n) B. O(n log n), ma non (n log n) C. (n log n), ma non (n log n) D. Nessuna delle risposte precedenti 5) 5 L’algoritmo di Huffman calcola un codifica prefissa binaria γ per un alfabeto C con frequenze f, che minimizza: A. | (c) | C. f (c) | (c) | D. Nessuna delle risposte precedenti. cC B. f (c) (c) cC cC 6) Un minimo albero di copertura (MST) per un grafo pesato G=(V,E) è: A. Un sottografo di peso totale minimo B. Un insieme aciclico di archi di peso totale minimo C. Un albero col minimo numero di archi il cui insieme di vertici è V D. Nessuna delle risposte precedenti 6 7) 7 2 Se un algoritmo di programmazione dinamica lavora con una tabella di dimensione (n ), il suo tempo di esecuzione sarà A. (n2) B. O(n2) C. O(n4) D. (n3) 8) 8 Gli algoritmi di Dijkstra e di Bellman-Ford risolvono il problema dei cammini minimi in un grafo orientato e pesato. Inoltre: A. Entrambi funzionano correttamente per qualsiasi tipo di grafo (orientato e pesato) B. L’algoritmo di Dijkstra funziona correttamente per tutti i grafi (orientati e pesati) in cui non vi siano cicli di costo negativo C. L’algoritmo di Bellman-Ford funziona correttamente per tutti i grafi (orientati e pesati) in cui non vi siano archi di costo negativo D. Nessuna delle risposte precedenti Quesito 1 (22 punti) Si consideri il problema di determinare se, dato un array M[1, …, n] di caratteri dell’alfabeto italiano A e un carattere x di A, esiste o meno un indice i tale che M[i] = x, per qualche i=1, …, n. a) Descrivere almeno due algoritmi che risolvono il problema. Gli algoritmi devono essere sostanzialmente diversi. b) Analizzare il tempo di esecuzione di ogni algoritmo. c) Confrontare gli algoritmi per valutare quale (se ve ne è uno) possa essere considerato il migliore. Quesito 2 (24 punti) E’ domenica pomeriggio, piove e non avete voglia di studiare (né di vedere le partite!). Coi vostri amici decidete di fare una “maratona” di film. Potete scegliere fra un certo numero di film, di cui conoscete la durata esatta, e volete vedere il maggior numero di film possibili nelle ore che avete a disposizione. Il vostro problema è ora di selezionare i film. Ognuno di voi ha un’idea differente, dalla più semplice alla più complicata, ma nessuno riesce a convincere gli altri che la propria soluzione è la migliore. E il tempo passa. Vi ricordate allora che al corso di Algoritmi vi avevano tempestato con le varie tecniche di progettazione di algoritmi, sui modi per dimostrarne la correttezza e valutarne la bontà: potranno esservi utili (almeno una volta nella vita)? Formalizzate il problema reale in un problema computazionale e risolvetelo nella maniera più efficiente possibile e in modo che, soprattutto, riusciate a convincere gli altri che la vostra soluzione funziona perfettamente. Giustificate le risposte. Quesito 3 (22 punti) a) Definire cos'è un grafo bipartito. b) Definire cos'è un matching massimale in un grafo bipartito. Si consideri il grafo G =(V,E) con V={1, 2, 3, 4, 5, 6, 7}, definito dalla seguente matrice di adiacenza: 0 1 1 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 1 0 c) Dimostrare che G è bipartito, eseguendo l'algoritmo di test studiato. d) Determinare un matching massimale di G, eseguendo l'algoritmo studiato. Pagina per appunti