Αλγόριθμος Συμπλήρωσης
σωρού(σ.σ)
|
|
Αλγόριθμος σ.σ(r,n)
Είσοδος: Αναπαράσταση
δομής
σωρού μέσω πίνακα L με δείκτη ρίζας τον r, με N
στοιχεία, όπου κάθε ένα από τα
υποδέντρα της ρίζας είναι σωρός.
Έξοδος: Ίδιο δέντρο, τώρα σωρός
Ο
αλγόριθμος αυτός μετατρέπει ένα
υποδέντρο σε σωρό. Για να εφαρμοστεί
όμως θα πρέπει τα παιδιά ( ένα ή δύο
υποδέντρα) της ρίζας του υποδέντρου να
αποτελούν σωρό, να έχουν δηλαδή την ιδιότητα
του σωρού.
Ο αλγόριθμος αυτός ουσιαστικά
συμπληρώνει τον σωρό μια που τοποθετεί
τη ρίζα r του υποδέντρου στη σωστή θέση μέσα
στο υποδέντρο. Αν αρχικά η ρίζα του
υποδέντρου περιέχει τιμή μεγαλύτερη από
τα παιδιά της τότε ο
αλγόριθμος τερματίζει. Διαφορετικά η
ρίζα μετακινείται προς τα κάτω και εναλλάσσεται
με τους απογόνους της
μέχρι να τοποθετηθεί στη σωστή θέση.
Για
καλύτερη κατανόηση των αλγορίθμων κ.σ
και σ.σ δείτε το Applet.
|
|
Ψευδοκώδικας σ.σ(r,N) |
|
|
x=L(r) //το
x έχει τη Ποσότητα της ρίζας |
|
|
rleft=2r //δείκτης
προς αριστερό παιδί |
|
|
while rleft£N
do //όσο το rleft είναι φύλλο |
|
|
max=rleft
//το max θα πάρει το μεγαλύτερο παιδί |
|
|
rright=rleft+1 |
|
|
if rright£N
and L(right)³L(rleft) then max=rright; |
|
|
if x<L(max) then
do else break //έξοδος από while |
|
|
L(r)=L(max)
//το μεγαλύτερο παιδί
παίρνει |
|
|
r=max //τη θέση του πατέρα |
|
|
rleft=2max |
|
end if
|
end while
|
L(r)=x
//η αρχική ποσότητα της ρίζας x πάει
στο r
|