Domande (possibili domande all'esame) Fondamenti di Informatica II 2005-2006 Introduzione • • • • Cos’è un insieme? Cos’è la cardinalità di un insieme? Come si definisce una relazione. Come si definisce una funzione. Introduzione ai grafi • • Disegnami un grafo. Che differenza c’è fra un grafo orientato e un grafo non orientato (uguale a diretto o non diretto). Definire l’adiacenze e il grado di un nodo. Quando è che un grafo è connesso. Dato un grafo definiscimi e mostrami un cammino sul grafo. Cos’è un ciclo? Definire un albero. • • • • • • Elementi di complessità • • • • • • • • • Strutture dati elementari • • • • • • • Cos’è un sottografo? Come si valuta la complessità di un algoritmo. Come si definisce il tempo di esecuzione di un algoritmo? Cosa significa associare dei costi alle operazioni che esegue l’algoritmo. Notazione asintotica: Cosa significa O(n2)? Cosa significa Θ(log(n))? Cosa significa Ω(n3)? 5n + 100 è Θ di che cosa? 2 n3+ 10000 è O di che cosa? Quando un algoritmo ha una buona complessità? Come si definisce lo spazio di memoria utilizzato da un algoritmo? Cos’è il worst case? Descrivere il funzionamento di una pila. (Sai scriverlo in pseudocodice?) Che operazioni si possono effettuare su una coda. Che differenza c’è fra queste due strutture dati: coda (queue) e pila (stack). Descrivere una lista concatenata: struttura e operazioni. Che vantaggi ha l’uso della sentinella? Che vantaggi ha rispetto all’uso di una struttura dati come la pila? Che complessità hanno le operazioni su una lista concatenata? Inserimento? Rimozione? Ricerca di un elemento? 1 • • Cosa si intende per indirizzamento per indirizzamento diretto. Quale principio sta alla base dell’uso di una tabella Hash. Che novità apporta rispetto all’indirizzamento diretto. Definiscimi una funzione hash. Come vengono gestite le collisioni? Come avviene l’inserimento di elemento in una tabella Hash? Che costo ha? Come avviene la rimozione di elemento in una tabella Hash? Che costo ha? Analizzami il tempo medio di ricerca di un elemento in una tabella Hash. Descrivere il caso peggiore. Hai in mente qualche tipo di funzione hash. Come si può decidere se una funzione hash è buona? Parlare dell’indirizzamento aperto. Nell’indirizzamento aperto non ci sono più le liste concatenate, come vengono gestite le collisioni? Descrivere (se riesci in pseudo-codice) l’inserimento in una tabella ad indirizzamento aperto. Ti ricordi qualche tecnica di scansione nell’indirizzamento aperto? Nel caso peggiore quanti elementi della tabella vengono visitati? Alberi binari • • Descrivere un albero binario. Che altezza ha un albero binario pieno? Alberi binari di ricerca • • Descrivere le proprietà di un albero binario di ricerca. Come viene effettuata la visita inorder? Fammi una visita inorder del seguente albero… (si disegna un albero). Descrivere l’operazione di ricerca (se riesci in pseudo-codice). Che complessità ha questa operazione? E nel caso peggiore? Che operazioni si possono effettuare su albero binario di ricerca? Descrivere una operazione (se riesci in pseudo-codice). Descrivere la sua complessità. Fammi l’inserimento in un albero binario di ricerca vuoto della seguente sequenza <1,2, 3, 7, 8, 11, 4, 13>. Ora di una nuova sequenza <7, 11, 8, 2, 3, 4, 1, 13>. Che differenza c’è? Inserimento in un albero binario di ricerca vuoto della seguente sequenza <6,2, 3, 7, 8, 10, 5, 15>. Descrivere come avviene la ricerca del massimo (minimo, di un elemento, ...). Che complessità ha questo operazione? Nell’analisi di complessità delle operazioni su un albero binario di ricerca, quanto conta il fatto che l’albero sia bilanciato? Hash Tables • • • • • • • • • • • • • • • • • RB-alberi (RedBlack trees) • • • • • • • Quali sono le propriètà di un RB-albero? Che differenze ci sono tra un RB albero e un albero binario di ricerca? Fammi l'analisi dell'altezza di un RB-albero. L'altezza è O() di che cosa? Che operazioni si possono effettuare su RB-albero. Parlami delle rotazioni. Come vengono effettuate e a cosa servono. Come avviene l'inserimento (la rimozione) in RB-albero. Dammi una descrizioni a grandi linee (se riesci dettagliami alcuni passaggi). Che complessità hanno le operazioni in un RB-albero? 2 Rappresentazione dei grafi • • • • Breath-First Search (Visita in ampiezza di un grafo) • • • • • • • • Depht-First Search (Visita in profondità di un grafo) • • • • • • • • • • • Cammini minimi • • Come posso rappresentare un grafo? Quale è preferibile? Descrivere la rappresentazione con liste di adiacenza. Quanto spazio occupa? Descrivere la rappresentazione con una matrice di adiacenza. Quanto spazio occupa? Descrivere la rappresentazione con una matrice di incidenza. Quanto spazio occupa? Che tipo di operazione effettua la visita in ampiezza su un grafo? (BFS) Che dati utilizza? Descrivere in dettaglio la visita in ampiezza con un esempio (se riesci scriverlo in pseudo-codice). Fammi l'analisi di complessità della visita in ampiezza. Enunciami e dimostrami la proprietà dei nodi in coda. (Tutti i nodi che entrano nella coda Q sono tutti e soli i nodi u raggiungibili da s) Enunciami e dimostrami una delle proprietà della visita in ampiezza. (A volte si può chiedere una in specifico) Cos'è l’albero bsf? Come viene costruito? Dimostrami che il sottografo ottenuto dai p[] è un albero. Che tipo di operazione effettua la visita in profondità su un grafo? (DFS) Che dati utilizza? Descrivere in dettaglio la visita in profondità con un esempio (se riesci scriverlo in pseudo-codice). Fammi l'analisi di complessità della visita in profondità. Enunciami e dimostrami il teorema delle parentesi. Enunciami e dimostrami il teorema dei cammini bianchi. Nella visita in profondità come si possono classificare gli archi. Mi puoi fare un esempio. Cos'è un Tree-edge? Come si costruisce la foresta BFS? Cos'è un Back-edge? Dimostrami che quando c'è un back-edge c'è un ciclo nel grafo. Cos'è un DAG? Parlami dell'ordinamento topologico di un DAG. Come si ottiene un ordinamento topologico tramite l'algoritmo DFS. Quale è la complessità? Puoi dimostrarmi che l'algoritmo è corretto? Dato grafo G=(V,E) e una funzione che associa un peso reale su ogni arco, cosa significa cercare un cammino minimo tra due vertici del grafo? Come funziona l'algoritmo di Dijkstra? Che complessità ha? 3 Programmazione dinamica • • • • • • • • Quale tipologia di problemi vengono affrontati dalla tecnica di programmazione dinamica? Mi definisci il problema del prodotto di una sequenza di matrici, ossia trovare una sua parentizzazione ottima? Che costo ha il prodotto di due matrici? Quali sono le fasi affrontate nella programmazione dinamica? Che caratterizzazione ha una soluzione ottima nel problema del prodotto di una sequenza di matrici? Definire ricorsivamente una soluzione ottima nel problema del prodotto di una sequenza di matrici. (ricorsivamente: tramite dei suoi sottoproblemi) Descrivere il calcolo delle soluzioni ottime con una strategia bottomup nel problema del prodotto di una sequenza di matrici. Come si costruisce una parentizzazione ottima con i dati calcolati? Quando la programmazione dinamica risulta migliore di una ricerca esaustiva? (quando ci sono sottoproblemi comuni: spiega) Nella programmazione dinamica è importate la quantità di memoria utilizzata? Quanta memoria viene utilizzata per il problema del prodotto di una sequenza di matrici? 4