Μετάβαση στο περιεχόμενο

Διωνυμικός σωρός

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Στην πληροφορική, διωνυμικός σωρός είναι μία σωρός που επιτρέπει την αποδοτική υλοποίηση πολλών λειτουργιών της χρησιμοποιώντας διωνυμικά δέντρα.[1][2][3]

Οι διωνυμικοί σωροί παρουσιάστηκαν από τον Jean Vuillemin το 1978.[1][4]

Ο διωνυμικός σωρός αποτελείται από μία συλλογή από διωνυμικά δέντρα διαφορετικής τάξης. Το διωνυμικό δέντρο -οστής τάξης αποτελείται από στοιχεία.

Διωνυμικά δέντρα για k=0,1,2,3,4.

Μία διωνυμική σωρός με στοιχεία αποτελείται από διωνυμικά δέντρα, ένα για κάθε άσσο στην δυαδική αναπαράσταση του . Για παράδειγμα, αν τότε ο διωνυμικός σωρός αποτελείται από τρία δέντρα τάξης καθώς στην δυαδική του αναπαράσταση το είναι .

Παράδειγμα διωνυμικού σωρού με στοιχεία. Αποτελείται από τρία διωνυμικά δέντρα.

Τα στοιχεία σε κάθε διωνυμικό δέντρο είναι διατεταγμένα ώστε να ικανοποιούν την εξής ιδιότητα:

Το στοιχείο ενός κόμβου είναι μικρότερο ή ίσο από όλα τα παιδιά του.

Θα χρησιμοποιήσουμε επιπλέον τις εξής τους ιδιότητες

  • Η ένωση δύο διωνυμικών δέντρων ίδιας τάξης μπορεί να γίνει σε χρόνο. Εισάγουμε το ένα δέντρο με το μεγαλύτερο στοιχείο στη λίστα με τα παιδιά της ρίζας του άλλου δέντρου.
  • Η αφαίρεση της ρίζας ενός διωνυμικού δέντρου τάξης δημιουργεί διωνυμικά δέντρα τάξης .
  • Το ύψος ενός διωνυμικού δέντρου τάξης είναι .

Η διωνυμική σωρός υποστηρίζει τις εξής λειτουργίες με τις εξής χρονικές πολυπλοκότητες, όπου είναι το πλήθος των στοιχείων. Η αποδοτική υλοποίηση πολλών από αυτών των λειτουργιών στηρίζεται στην αποδοτική υλοποίηση της ένωσης δύο διωνυμικών σωρών.

Λειτουργία Πολυπλοκότητα
Δημιουργία
Εισαγωγή στοιχείου
Ένωση σωρών
Εύρεση ελάχιστου στοιχείου
Αφαίρεση ελάχιστου στοιχείου
Μείωση κλειδιού

Ένωση διωνυμικών σωρών

[Επεξεργασία | επεξεργασία κώδικα]

Η ένωση δύο διωνυμικών σωρών με και στοιχεία αντίστοιχα γίνεται με τρόπο ισομορφικό της πρόσθεσης των αριθμών και στην δυαδική τους αναπαράσταση. Ξεκινάμε από την μικρότερη τάξη αν έχουν και οι δύο σωροί δέντρο αυτής της τάξης τότε τα ενώνουμε και τα προσθέτουμε με αυτά της πρώτης τάξης. Αν είναι

Η ένωση λοιπόν χρειάζεται το πολύ να διατρέξει μία φορά από όλα τα δέντρα του κάθε σωρού, δηλαδή χρειάζεται χρόνο.

Εισαγωγή στοιχείου

[Επεξεργασία | επεξεργασία κώδικα]

Η εισαγωγή ενός στοιχείου προκύπτει ως ειδική περίπτωση της ένωσης δύο διωνυμικών σωρών: της αρχικής και μίας που αποτελείται από ένα στοιχείο, το στοιχείο που θέλουμε να εισάγουμε.

Επομένως, η εισαγωγή χρειάζεται χρόνο.

Η κατασκευή ενός σωρού με στοιχεία μπορεί να γίνει με την χρήση εισαγωγών. Από την παραπάνω ανάλυση, ο χρόνος που χρειάζεται είναι . Η παρακάτω πιο προσκεκτική ανάλυση δείχνει ότι είναι .

Εύρεση ελάχιστου στοιχείου

[Επεξεργασία | επεξεργασία κώδικα]
Για την εύρεση του ελάχιστου στοιχείου αρκεί να κοιτάξουμε τις ρίζες των διωνυμικών δέντρων.

Η ρίζα ενός διωνυμικού δέντρου είναι μικρότερη από κάθε άλλο στοιχείο του δέντρου. Επομένως, το ελάχιστο στοιχείο του σωρού είναι η ρίζα κάποιου από τα διωνυμικά δέντρα. Επομένως, διατρέχοντάς τα διωνυμικά δέντρα, μπορούμε σε χρόνο να εντοπίσουμε το ελάχιστο στοιχείο.

Επίσης, μπορούμε στο τέλος κάθε μίας από τις προηγούμενες πράξεις να ανανεώνουμε το ελάχιστο στοιχείο, και έτσι η εύρεση να γίνεται σε χρόνο.

Αφαίρεση ελάχιστου στοιχείου

[Επεξεργασία | επεξεργασία κώδικα]

Βρίσκουμε το διωνυμικό δέντρο που περιέχει το ελάχιστο στοιχείο. Έστω ότι είναι ένα δέντρο τάξης . Αφαιρώντας την ρίζα του λαμβάνουμε διωνυμικά δέντρα τάξης . Έπειτα, ενώνουμε την υπολοιπόμενη σωρό με την σωρό που σχηματίζουν τα καινούργια διωνυμικά δέντρα. Αυτή η ένωση μας δίνει μία διωνυμική σωρό με όλα τα στοιχεία εκτός του ελαχίστου.

Γνωρίζουμε ότι , επομένως η αφαίρεση της ρίζας και η ένωση χρειάζονται συνολικά χρόνο.

Όταν μειώσουμε ένα στοιχείο, τότε μπορεί να γίνει μικρότερο από τον πατέρα του, επομένως του αλλάζουμε θέση με τον πατέρα του έως ότου να μην ισχύει αυτό. Κάθε δέντρο έχει ύψος άρα μείωση κλειδιού μπορεί να υλοποιηθεί σε χρόνο.

  1. 1 2 Cormen, Thomas H.· =Leiserson, Charles Eric· Rivest, Ronald Linn· Stein, Clifford. «Binomial heaps». Introduction to algorithms (3η έκδοση). Cambridge, Massachusetts London, England: MIT Press. ISBN 978-0262033848.
  2. ↑ Vuillemin, Jean (1 April 1978). «A data structure for manipulating priority queues». Communications of the ACM 21 (4): 309–315. doi:10.1145/359460.359478.
  3. ↑ Georgiadis, Loukas (2012). «Ουρές προτεραιότητας» (PDF).
  4. ↑ Vuillemin, Jean (1 April 1978). «A data structure for manipulating priority queues». Communications of the ACM 21 (4): 309–315. doi:10.1145/359460.359478.