Πώς να διαγράψει από Max-Heap;

ψήφοι
0

Αν βάλουμε 15 στη ρίζα, ποια θα είναι η διαδικασία της heapify;

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

Τι θα πρέπει να είναι ο τρόπος για να διαγράψετε 85 από το σωρό;

Δημοσιεύθηκε 10/07/2011 στις 10:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

Για να προσθέσετε βάζετε τη νέα τιμή τελευταία (δικαίωμα 20 στο παράδειγμά σας), και στη συνέχεια προσπαθήστε να διορθώσετε το σωρό, που είναι το συγκρίνουμε με τη μητρική του, αν είναι μεγαλύτερη η ανταλλαγή και συγκρίνετε ξανά μέχρι να απαιτείται καμία ανταλλαγής ( ή μπορείτε να πάρετε για να root)

Για να διαγράψετε την κατάργηση αντικαταστήσετε το τελευταίο αντικείμενο (15 στο παράδειγμα μπορείτε) και να διορθώσετε το σωρό προς τα κάτω.

Απαντήθηκε 10/07/2011 στις 11:05
πηγή χρήστη

ψήφοι
1

Εάν διαγράψετε 85 και να την αντικαταστήσει με 15, θα μετατρέψει την ημι-σωρός πίσω σε ένα σωρό από downheaping, δηλαδή το 15 στη ρίζα θα «βυθιστεί» κατά μήκος της διαδρομής των μεγαλύτερων παιδιών. Σε αυτή την περίπτωση θα ανταλλάξουν με 70 και στη συνέχεια με 65.

Επεξεργασία: επειδή είμαστε πάντα αλλάζουν με το μεγαλύτερο παιδί, εξασφαλίζει μπορούμε να καταλήξουμε σε μια έγκυρη σωρού (π.χ. αν έχουμε ανταλλάξει μας 15 με 55 αντί για 70, θα είχαμε 70 ως παιδί του 55 το οποίο δεν είναι καλό)

Απαντήθηκε 10/07/2011 στις 11:08
πηγή χρήστη

ψήφοι
4

Όπως σας είναι πάντα αλλάζουν με το μεγαλύτερο από τα δύο (σωρός ιδιότητα σημαίνει ότι ο γονέας είναι πάντα μεγαλύτερο από τα παιδιά του):

            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
Απαντήθηκε 10/07/2011 στις 11:09
πηγή χρήστη

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