COMPITO DI ALGORITMI E STRUTTURE DATI Esercizio 1 Si consideri la struttura dati pila su cui si possono effettuare le seguenti operazioni: - PUSH(P ,x). Inserisce l’elemento x in testa alla pila P ; - POP(P ). Estrae dalla pila P l’elemento in testa; - MULTIPOP(P ,k). Estrae dalla pila P i primi k elementi che si trovano in testa. 1.1 Si scriva lo pseudocodice di una implementazione della struttura dati pila con un vettore (di dimensione M ). Si implementino le operazioni PUSH, POP, MULTIPOP, segnalando errore in caso di “overflow” (pila contenente M elementi: piena) e “underflow” (pila vuota). 1.2 Si determini la complessità di: un’operazione di PUSH; un’operazione di POP; un’operazione MULTIPOP; 1.3 Si determini la complessità di m operazioni di PUSH, POP, MULTIPOP di cui n operazioni sono PUSH. Esercizio 2 Sia G un grafo orientato e pesato. 2.1 Si descriva tramite pseudocodice l’algoritmo di visita in ampiezza BFS(G,s) e se ne analizzi la complessità; 2.2 Si descriva un grafo G = (N, E, w) tale che esiste s ∈ N tale che non è possibile che BFS(G,s) determini l’albero dei cammini minimi da s; 2.3 Si descriva un grafo G = (N, E, w) tale che esiste s ∈ N tale che l’algoritmo di Dijkstra non determina i cammini minimi da s. Date: 5 Settembre 2008. 1