Come eliminare da un Max-Heap?

voti
0

Se mettiamo 15 nella radice, quale sarebbe il processo di heapify?

            85
            /\
           /  \
          /    \
        55      70
        /\      /\
       /  \    /  \
      22  33  30  65
     /\   /
   14 15 15

Quale dovrebbe essere il modo per eliminare 85 dal mucchio?

È pubblicato 10/07/2011 alle 10:53
fonte dall'utente
In altre lingue...                            


3 risposte

voti
0

Per aggiungere si inserisce il nuovo valore come ultima (diritto di 20 nel tuo esempio), e quindi si tenta di risolvere il cumulo, cioè confrontare con il suo genitore, se è più grande dello swap e confrontare di nuovo fino a quando non è necessaria alcuna swap ( o si arriva a root)

Al fine di eliminare la rimozione si sostituisce l'ultimo oggetto (15 in te esempio) e fissare il mucchio verso il basso.

Risposto il 10/07/2011 a 11:05
fonte dall'utente

voti
1

Se si elimina 85 e sostituirlo con 15, si accende il semi-mucchio di nuovo in un mucchio da downheaping, vale a dire il 15 alla radice sarà "affondare" lungo il percorso dei bambini più grandi. In questo caso sarà scambiare con 70 poi con 65.

Edit: perché siamo sempre scambio con il bambino più grande, assicura che finire con un mucchio valido (ad esempio, se ci siamo scambiati il ​​nostro 15 con 55 invece di 70, avremmo 70 come un figlio di 55 che non va bene)

Risposto il 10/07/2011 a 11:08
fonte dall'utente

voti
4

Come si sta sempre scambiandolo con il più grande dei due (proprietà di heap significa che il genitore è sempre più grande dei suoi figli):

            15
            /\
           /  \
          /    \
        55      70
        /\      /\
       /  \    /  \
      22  33  30  65
     /\   
   14 15

            70
            /\
           /  \
          /    \
        55      15
        /\      /\
       /  \    /  \
      22  33  30  65
     /\   
   14 15

            70
            /\
           /  \
          /    \
        55      65
        /\      /\
       /  \    /  \
      22  33  30  15
     /\   
   14 15
Risposto il 10/07/2011 a 11:09
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more