Jak odstranit z Max-haldy?

hlasů
0

Když dáme 15 v kořeni, co by se proces heapify?

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

Jaký by měl být způsob, jak odstranit 85 z haldy?

Položena 10/07/2011 v 10:53
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Chcete-li přidat si dát novou hodnotu jako poslední (vpravo až 20 v příkladu), a pak se pokusit opravit haldy, že je porovnat ji s jeho rodiči, pokud je větší odkládací a znovu srovnat, dokud není nutná výměna ( nebo se dostat do kořenového adresáře)

Za účelem odstranění vyjmete nahradit poslední objekt (15 ve vás například) a opravit haldy dolů.

Odpovězeno 10/07/2011 v 11:05
zdroj uživatelem

hlasů
1

Pokud smažete 85 a nahradit ji 15, otočíte semi-haldu zpět do hromady podle downheaping, tedy 15 u kořene bude „potopit“ na cestě větších dětí. V tomto případě se vymění s 70 pak 65 let.

Edit: protože jsme vždy vymění s větší dítě, je zajištěno, skončíme s platným haldy (například pokud jsme vyměnili náš 15 s 55 namísto 70, budeme mít 70 jako dítě 55, který je k ničemu)

Odpovězeno 10/07/2011 v 11:08
zdroj uživatelem

hlasů
4

Jak jste ji vždy vymění s větší ze dvou (haldy majetku znamená, že rodič je vždy větší než jeho děti):

            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
Odpovězeno 10/07/2011 v 11:09
zdroj uživatelem

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