next up previous contents
Next: Operazioni - Estrazione del Up: Gli Heap di Fibonacci Previous: Operazioni - Ricerca del   Indice

Operazioni - Unione di due Heap di Fibonacci

Viene ritornato uno Heap che rappresenta l'unione dei due passati per indirizzo:

   UNIONE(FH1, FH2) {
     FH = allocoNuovoFHeap();
    
     FH->min = FH1->min;
     concatena le liste di FH1 e FH2;
     
     if(FH->min == NULL) oppure ((FH2->min != NULL)and(FH2->min < FH1->min))
       FH->min = FH2->min;
    
     FH->nnodi = FH1->nnodi + FH2->nnodi;  
     FH->nalberi = FH1->nalberi + FH2->nalberi;  
     
     rilascia memoria occupata da FH1 e FH2;
    
     return FH;
   }

Questa funzione prevede la creazione di un nuovo Heap di Fibonacci, la concatenazione delle liste dei due Heap passati per indirizzo e l'aggiornamento dei campi min, nnodi e nalberi.

Come nel caso dell' inserimento di un nuovo nodo, questa operazione non necessita della ristrutturazione dello Heap.
La differenza di potenziale è

         $\Phi(FH) - (\Phi(FH1)+\Phi(FH2))$

         $= (t(FH) + 2m(FH)) - [(t(FH1) + 2m(FH1)) + (t(FH2) + 2m(FH2))]$

        $= 0$
dal momento che $t(FH)=t(FH1)+t(FH2)$    e      $m(FH)=m(FH1)+m(FH2)$;
il costo ammortizzato dell'operazione di unione è quindi costante, come per altro il suo costo reale.



Paolo Larcheri 2002-01-26