Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Aniello Murano » 4.Esercitazione su Ricorsione e Code di Priorità


Torri di Hanoi

Quello delle Torri di Hanoi è un gioco che si svolge con tre paletti e alcuni dischi di diametro differente con un foro al centro in modo da poter essere infilati nei paletti.

Inizialmente i dischi sono tutti impilati a piramide sul primo paletto. Il disco più grande è in basso, il più piccolo in alto.

Torri di Hanoi

Torri di Hanoi


Torri di Hanoi

Scopo del gioco:

  • Lo scopo del gioco è quello di trasferire i dischi dal paletto di sinistra a quello di destra, senza mai mettere un disco su un altro di dimensione più piccola.

Regole del gioco:

  • È possibile spostare un solo disco alla volta; tutti i dischi devono essere sempre infilati nei paletti.

Strategia:

  • La strategia consiste nel considerare uno dei paletti come origine e un altro come destinazione. Il terzo paletto sarà utilizzato come deposito temporaneo.

Strategia

Supponiamo di avere n dischi, numerati dal più piccolo al più grande. Inizialmente sono tutti impilati nel paletto di sinistra.

Il problema di spostare n dischi sul paletto di destra può essere descritto in modo ricorsivo così:

  • Spostare i primi n-1 dischi dal paletto di sinistra a quello di centro.
  • Spostare il disco n-esimo (il più grande) sul paletto di destra.
  • Spostare i rimanenti n-1 dischi dal paletto di centro a quello di destra.

In questo modo il problema può essere risolto per qualsiasi valore di n>0 (n=0 è la condizione di stop della ricorsione).

Programma

Vogliamo un programma che ci dia la strategia da seguire dato il numero di dischi

  • il primo paletto (quello di sinistra) con Sorgente
  • il secondo paletto (quello di centro) con Aux
  • il terzo paletto (quello di destra) con Destinazione

Definiamo la procedura ricorsiva transfer, che trasferisce n dischi da un paletto all’altro.

Esercitazione su Heap

Si consideri una coda di priorità per la gestione della coda di stampa di una rete implementata con una struttura dati heap H[MAX].

Si implementino le seguenti funzioni:

  • void Heapify(int H[MAX], int el); \\ el è un indice di H
  • void BuildHeap(int H[MAX]);
  • void HeapSort(int H[MAX]);
  • int ricerca (int H[MAX], int el); \\ restituisce l’indice del vettore in cui si trova l’elemento el; e -1 se l’elemento non è presente nel vettore

Esercitazione su Heap

Si consideri una coda di priorità per la gestione della coda di stampa di una rete realizzata con una struttura dati heap H[MAX].

Sia heapsize la variabile che memorizza la dimensione dell’heap

Si implementi la funzioni

void annulla_lavoro(int H[MAX], int el),

che presi in input l’heap e un lavoro el (intero) da eliminare provveda ad eliminare el dall’heap.

Descrivere la complessità della funzione implementata.
L’esercizio, completo di una breve documentazione (1 pagina), va consegnato via mail al tutor entro 3 giorni lavorativi

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion