Università degli Studi di Roma Tre - Facoltà di Ingegneria C. S. Ing. Informatica Algoritmi e Strutture Dati – (Fondamenti di Informatica 2, II modulo) Prova del 28 novembre 2005 COMPITO ROSA Indicare su tutti i fogli in alto a destra, con chiarezza, cognome e nome. Tempo a disposizione: 3 ore. REGOLE: Niente libri, quaderni o appunti: solo documento di riconoscimento, matita, penna gomma, etc.../ I fogli verranno distribuiti successivamente al testo./ Se ci si ritira non si può portare fuori il foglio con il testo./ Non si può uscire durante la prova./ Cellulari spenti. Esercizio n.1 (4 punti) Descrivere, senza scrivere la pseudocodifica, l’algoritmo di ordinamento quicksort e dire qual è la sua complessità asintotica giustificando l’affermazione. Dire, inoltre, se è un algoritmo di ordinamento stabile1 (servendosi eventualmente di un esempio). Esercizio n.2 (4 punti) Illustrare le operazioni principali definite sulla struttura coda con priorità. Spiegare, senza scrivere la pseudocodifica, l’inserimento di un elemento in una coda con priorità (servendosi eventualmente di un esempio). Spiegare qual è la complessità asintotica dell’operazione di inserimento. Esercizio n.3 (4 punti) Dato il seguente albero binario di ricerca T : T 15 6 3 20 18 12 16 19 illustrare come viene modificato dalle seguenti operazioni di rotazione, inserimento e cancellazione: • TREE-INSERT(T, z), dove z è il puntatore al record che deve essere inserito e key[z] = 17; • TREE-DELETE(T, x), dove x è il puntatore al record di T che deve essere eliminato, che contiene la chiave 15; • RIGHT-ROTATE(T, x), dove x è il puntatore al nodo che contiene la chiave 16; • LEFT-ROTATE(T, x), dove x è il puntatore al nodo che contiene la chiave 16. Esercizio n.4 Dato un grafo orientato G di n nodi, etichettato con interi compresi tra 1 e n e data una lista L di interi, anch’essi compresi tra 1 e n, scrivere un algoritmo per verificare se gli elementi nella lista (presi esattamente nell’ordine dato) corrispondono ad un possibile percorso in G. 4.1 (11 punti) Scrivere la pseudocodifica dell’algoritmo proposto, utilizzando per la lista la rappresentazione mediante record e puntatori e per il grafo la rappresentazione mediante liste di adiacenza. 4.2 (4 punti) Calcolare la complessità asintotica dell’algoritmo scritto al punto 4.1. 4.3 (5 punti) Codificare l’algoritmo nel linguaggio C, senza codificare le funzioni di acquisizione e stampa dei dati. Iniziare a codificare l’algoritmo e successivamente le funzioni di supporto. 1 Un algoritmo di ordinamento si dice stabile se i numeri con lo stesso valore si presentano in output nello stesso ordine in cui si trovano nell’array di input