ΑΛΓΟΡΙΘΜΟΙ ΜΕ C ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής CMOR Lab Computational Methodologies and Operations Research
Δέντρα (5) Τ ένα δέντρο i ένας κόμβος στο επίπεδο k j ένας κόμβος στο επίπεδο k+1 } : (i, j) Τ ή (j, i) T Κόμβος i ονομάζεται πατέρας (father) ή αμέσως προηγούμενος (immediate predecessor) του κόμβου j Κόμβος j ονομάζεται παιδί (child) ή αμέσως επόμενος (immediate successor) του κόμβου i. 2
Δέντρα (6) 1 2 3 4 (2, 5) Τ, Κόμβος 2 πατέρας του κόμβου 5 Κόμβος 5 παιδί του κόμβου 2 5 6 7 (7, 4) Τ, Κόμβος 4 πατέρας του κόμβου 7 Κόμβος 7 παιδί του κόμβου 4 8 9 3
Δέντρα (7) Αν κάθε κόμβος ενός δέντρου Τ έχει το πολύ δυο παιδιά, το δέντρο ονομάζεται δυαδικό (binary) 1 1 2 3 2 3 4 5 6 7 4 5 6 7 8 Δυαδικά Δέντρα 4
Δέντρα (8) Δομή ενός κόμβου σε συνδεδεμένη αναπαράσταση Δεδομένα Left Right Ρίζα αριστερού υποδένδρου Ρίζα δεξιού υποδένδρου αριστερό υποδένδρο δεξί υποδένδρο 5
Δέντρα (9) Αν κάθε επίπεδο βάθους t, 1 t h 1, ενός δέντρου Τ αποτελείται από το μέγιστο δυνατό πλήθος κόμβων 2 t το δέντρο Τ ονομάζεται πλήρες (complete tree) 1 Βάθος{Τ} = 3 2 3 4 5 6 7 Επίπεδο (βάθος) 2 Πλήθος κόμβων 2 2 = 4 8 9 10 6
Δέντρα (10) Κάθε διαδικασία επίσκεψης όλων των κόμβων ενός δένδρου, ακριβώς μια φορά τον καθένα, ονομάζεται διαπέραση ή διάσχιση (traversal). Προδιατεταγμένη διαπέραση (pre-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τον ίδιο τον κόμβο, έπειτα τους κόμβους του αριστερού του υποδένδρου και στη συνέχεια τους κόμβους του δεξιού του υποδένδρου. Μεταδιατεταγμένη διαπέραση (post-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τους κόμβους του αριστερού του υποδένδρου, έπειτα τους κόμβους του δεξιού του υποδένδρου και στη συνέχεια τον ίδιο τον κόμβο. Ενδοδιατεταγμένη διαπέραση (in-order): Για κάθε κόμβο, επισκεπτόμαστε πρώτα τους κόμβους του αριστερού του υποδένδρου, έπειτα τον ίδιο τον κόμβο και στη συνέχεια τους κόμβους του δεξιού του υποδένδρου. Κατά σειρά επιπέδων διαπέραση (level-order): Διασχίζουμε τα επίπεδα του δένδρου, στη σειρά από πάνω προς τα κάτω, και σε κάθε επίπεδο επισκεπτόμαστε τους κόμβους από αριστερά προς τα δεξιά. 7
Δέντρα (11) Διάσχιση δυαδικού δέντρου 8
Δέντρα (12) Προδιατεταγμένη διάσχιση (preorder traversal) 9
Δέντρα (13) Ενδοδιατεταγμένη διάσχιση (inorder traversal) 10
Δέντρα (14) Μεταδιατεταγμένη διάσχιση (postorder traversal) 11
Δέντρα (15) Άσκηση. Δίνεται το διπλανό δυαδικό δέντρο Θεωρήστε ότι το δέντρο σαρώνεται κατά την προδιατεταγμένη διαπέραση (preorder traversal) και τα δεδομένα των κόμβων του εισάγονται σε μια στοίβα. Γράψτε τη στοίβα μετά τη διαπέραση. 12
Δέντρα (16) 38 40 33 35 20 15 18 2 5 14 30 13
Δέντρα (17) Ένα δέντρο παράστασης (expression tree) είναι ένα δυαδικό δέντρο με τις ακόλουθες ιδιότητες: Κάθε φύλλο είναι και ένας τελεστέος. Η ρίζα και οι εσωτερικοί κόμβοι είναι τελεστές. Τα υποδέντρα είναι δευτερεύουσες παραστάσεις, των οποίων η ρίζα είναι τελεστής. ενδοδιατεταγμένη (inorder) - ενθεματική παράσταση μεταδιατεταγμένη (postorder) - επιθεματική παράσταση προδιατεταγμένη (preorder) -προθεματική παράσταση 14
Δέντρα (18) Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Το αριστερό υποδένδρο κάθε κόμβου έχει τιμές μικρότερες από την τιμή του κόμβου. Το δεξί υποδένδρο κάθε κόμβου έχει τιμές μεγαλύτερες από την τιμή του κόμβου. Χρησιμοποιούνται στην αναζήτηση στοιχείων, όπου ενδέχεται να βελτιώσουν σημαντικά το χρόνο (αντίστοιχα με τη δυαδική αναζήτηση σε ταξινομημένο πίνακα). Με ενδοδιατεταγμένη διαπέραση παίρνουμε τα στοιχεία ταξινομημένα κατά αύξουσα σειρά. 15
Δέντρα (19) Δυαδικό Δέντρο Αναζήτησης Διαπέραση ΔΔΑ 16
Δέντρα (20) εισαγωγή στοιχείων σε ΔΔΑ: 8, 4, 12, 2, 6, 14, 18, 13 8 4 12 2 6 14 13 18 17
Αναζήτηση του στοιχείου 5. Δέντρα (21) 8 4 12 2 6 14 Δεν βρέθηκε 13 18 18
Δέντρα (22) Άσκηση: αναζητήστε ένα προς ένα όλα τα στοιχεία του δένδρου. Καταγράψτε το πλήθος συγκρίσεων μεταξύ των στοιχείων που απαιτούνται. στοιχείο συγκρίσεις 8 1 4 2 2 3 6 3 12 2 14 3 13 4 18 4 8 4 12 2 6 14 13 18 19
Δέντρα (23) Διαγραφές 1. Ο κόμβος που διαγράφεται δεν έχει υποδένδρα. 2. Ο κόμβος που διαγράφεται έχει μόνο ένα υποδένδρο. 3. Ο κόμβος που διαγράφεται έχει δύο υποδένδρα. 20
Δέντρα (24) Διαγραφή του 18: ο κόμβος που περιέχει το 18 δεν έχει υποδένδρα 8 8 4 12 4 12 2 6 14 2 6 14 13 18 13 21
Δέντρα (25) Διαγραφή του 12: ο κόμβος που περιέχει το 12 έχει μόνο δεξί υποδένδρο 8 8 4 12 4 14 2 6 14 2 6 13 13 22
Δέντρα (26) Διαγραφή του 8. Αντικατάσταση με το μεγαλύτερο του αριστερού υποδένδρου ή με το μικρότερο του δεξιού υποδέντρου. 8 6 4 12 4 12 2 6 14 2 14 13 18 13 18 23
Quiz-[10] Hitting a Battleship Ποιος είναι ο ελάχιστος αριθμός χτυπημάτων που απαιτούνται στο παιχνίδι Ναυμαχία προκειμένου να χτυπηθεί ένα θωρηκτό (battleship)? Ένα θωρηκτό καταλαμβάνει χώρο 4 Χ 1 σε μια επιφάνεια 10x10. Το θωρηκτό μπορεί να τοποθετηθεί οπουδήποτε, είτε οριζόντια είτε κάθετα, στην επιφάνεια. Υποθέστε ότι δεν υπάρχουν άλλα πλοία στην επιφάνεια. 24
Quiz-[10] 25