ΤΕΣΤ (ΑΣΚΗΣΕΙΣ) ONLINE
98 Tests / Διαγωνίσματα

Κεφάλαιο 15.6 – Σελίδα 58-63 – ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ΄ ΛΥΚΕΙΟΥ – Απαντήσεις – Λύσεις

Ερωτήσεις - Ασκήσεις

Άσκηση 1 (σελ. 58)

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

Σκέψη / Μεθοδολογία: Ερώτηση εφαρμογής — αναζητούμε καθημερινά σενάρια όπου η μονόδρομη ή αμφίδρομη διάτρεξη είναι το καθοριστικό χαρακτηριστικό. (Ενδεικτική απάντηση.)

Λύση:

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

Απάντηση: Απλά συνδεδεμένη λίστα: (α) η λίστα αναπαραγωγής (playlist) ενός τραγουδιού μετά το άλλο, που παίζει μόνο προς τα εμπρός· (β) το ιστορικό ενεργειών «αναίρεσης» (undo) σε ένα πρόγραμμα, όπου διατρέχουμε τις ενέργειες με τη σειρά που έγιναν. Διπλά συνδεδεμένη λίστα: (α) το ιστορικό πλοήγησης ενός browser με κουμπιά «Πίσω» και «Μπροστά»· (β) οι διαδοχικοί σταθμοί μιας γραμμής μετρό, όπου ο επιβάτης μπορεί να ταξιδέψει και προς τις δύο κατευθύνσεις.

Πρόσεξε:

  • Το κρίσιμο σημείο δεν είναι το «είδος δεδομένων» αλλά το αν το σενάριο χρειάζεται μονόδρομη ή αμφίδρομη διάτρεξη.

Άσκηση 2 (σελ. 58)

Χαρακτηρίστε τις παρακάτω προτάσεις ως Σωστές ή Λάθος, δικαιολογώντας τις λανθασμένες:

  1. Μια απλά συνδεδεμένη λίστα μπορούμε να τη διατρέξουμε και προς τις δύο κατευθύνσεις.
  2. Σε μία λίστα δε χρειάζεται να οριστεί ένα αρχικό μέγεθος.
  3. Δεν είναι δυνατό να υπάρχει «τυχαία» πρόσβαση σε μια απλά συνδεδεμένη λίστα.
  4. Σε μια λίστα, τα στοιχεία δεν μπορούν να προστεθούν ή να αφαιρεθούν από τη μέση της λίστας, παρά μόνο από την αρχή ή το τέλος της.
  5. Στη διπλά συνδεδεμένη λίστα τα περιεχόμενα των κόμβων προσπελαύνονται και από τις δύο κατευθύνσεις.

Σκέψη / Μεθοδολογία: Ελέγχουμε κάθε πρόταση ξεχωριστά έναντι των βασικών ιδιοτήτων απλά/διπλά συνδεδεμένης λίστας.

Λύση:

Πρόταση 1: η απλά συνδεδεμένη λίστα έχει δείκτες μόνο προς τον επόμενο κόμβο. Πρόταση 2-3: συγκρίνουμε λίστα με πίνακα ως προς μέγεθος και τυχαία πρόσβαση. Πρόταση 4-5: εξετάζουμε πού επιτρέπεται εισαγωγή/διαγραφή και πώς προσπελαύνονται οι κόμβοι σε κάθε τύπο λίστας.

Απάντηση: 1. Λάθος — η απλά συνδεδεμένη λίστα διατρέχεται μόνο προς μία κατεύθυνση (προς τα εμπρός), αφού κάθε κόμβος δείχνει μόνο τον επόμενο. 2. Σωστό — η λίστα είναι δυναμική δομή, δεν χρειάζεται να δηλωθεί εκ των προτέρων το μέγεθός της, όπως στον πίνακα. 3. Σωστό — για να φτάσουμε σε έναν κόμβο πρέπει να διατρέξουμε διαδοχικά όλους τους προηγούμενους από την αρχή· δεν υπάρχει άμεση πρόσβαση με δείκτη/ευρετήριο όπως στον πίνακα. 4. Λάθος — ακριβώς το αντίθετο ισχύει: ένα βασικό πλεονέκτημα της λίστας έναντι του πίνακα είναι ότι επιτρέπει εισαγωγή/διαγραφή και στη μέση της, με απλή αλλαγή δεικτών, χωρίς μετατόπιση όλων των υπόλοιπων στοιχείων. 5. Σωστό — αυτό είναι το ορισμού χαρακτηριστικό της διπλά συνδεδεμένης λίστας: κάθε κόμβος έχει δείκτη και προς τον επόμενο και προς τον προηγούμενο.

Πρόσεξε:

  • Μην συγχέεις «δεν χρειάζεται αρχικό μέγεθος» (πρόταση 2, Σωστό) με «δεν επιτρέπεται εισαγωγή στη μέση» (πρόταση 4, Λάθος) — είναι διαφορετικές ιδιότητες.

Άσκηση 3 (σελ. 58)

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

Σκέψη / Μεθοδολογία: Αναγνωρίζουμε ότι η σχέση χώρα→νομός→πόλη είναι αυστηρά ιεραρχική (κάθε πόλη ανήκει σε έναν μόνο νομό, κάθε νομός σε μία μόνο χώρα) — άρα μοντελοποιείται φυσικά ως δένδρο. (Ενδεικτική απάντηση.)

Λύση:

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

Απάντηση: Ενδεικτικό δένδρο: ρίζα «Ελλάδα» → παιδιά οι νομοί «Αττική», «Θεσσαλονίκη», «Ηράκλειο» → κάθε νομός έχει ως παιδιά τις πόλεις του, π.χ. η «Αττική» έχει παιδιά «Αθήνα», «Πειραιάς», «Ελευσίνα», η «Θεσσαλονίκη» έχει παιδί την πόλη «Θεσσαλονίκη», η «Ηράκλειο» έχει παιδιά «Ηράκλειο», «Άγιος Νικόλαος». Κάθε πόλη είναι φύλλο (δεν έχει άλλα παιδιά), κάθε νομός έχει έναν και μοναδικό γονέα (τη χώρα) και η ρίζα «Ελλάδα» δεν έχει γονέα.

Πρόσεξε:

  • Πρόσεξε να μην τοποθετήσεις μια πόλη κάτω από δύο διαφορετικούς νομούς — κάθε κόμβος σε δένδρο έχει ακριβώς έναν γονέα.

Άσκηση 4 (σελ. 58)

Στην Εικόνα 1.3.31 δίνονται τέσσερις δομές κόμβων-ακμών: α. Τρεις κόμβοι· μία κατευθυνόμενη ακμή ενώνει δύο από αυτούς, ο τρίτος είναι πλήρως απομονωμένος (χωρίς καμία σύνδεση). β. Τρεις κόμβοι σε τρίγωνο, με κατευθυνόμενες ακμές που σχηματίζουν κλειστό κύκλο (κόμβος1→κόμβος2→κόμβος3→κόμβος1). γ. Τέσσερις κόμβοι σε διάταξη ρόμβου: ο πάνω κόμβος συνδέεται με τον αριστερό και τον δεξιό, και τόσο ο αριστερός όσο και ο δεξιός συνδέονται (με ξεχωριστές ακμές) προς τον κάτω κόμβο. δ. Τέσσερις κόμβοι σε δύο ανεξάρτητα ζεύγη· σε κάθε ζεύγος ο ένας κόμβος συνδέεται με τον άλλον, αλλά τα δύο ζεύγη δεν συνδέονται μεταξύ τους. Ποιες από τις δομές αυτές είναι δένδρα και ποιες είναι γράφοι; Εξηγήστε το γιατί.

Σκέψη / Μεθοδολογία: Ελέγχουμε για κάθε σχήμα τις δύο θεμελιώδεις ιδιότητες του δένδρου: (1) μοναδική ρίζα/συνεκτικότητα, (2) κάθε κόμβος να έχει το πολύ έναν γονέα, χωρίς κύκλους.

Λύση:

α: ελέγχουμε αν όλοι οι κόμβοι συνδέονται μεταξύ τους (συνεκτικότητα). β: ελέγχουμε αν υπάρχει κύκλος στις ακμές. γ: ελέγχουμε αν κάποιος κόμβος έχει περισσότερους από έναν γονείς. δ: ελέγχουμε ξανά τη συνεκτικότητα ολόκληρης της δομής.

Απάντηση: α: Δεν είναι (ενιαίο) δένδρο, γιατί η δομή είναι ασύνδετη — ο τρίτος κόμβος δεν συνδέεται καθόλου με τους άλλους δύο, ενώ σε ένα δένδρο κάθε κόμβος πρέπει να έχει μοναδική διαδρομή από τη ρίζα. Είναι, ωστόσο, γράφος (ένας ασύνδετος γράφος με δύο συνιστώσες)· το συνδεδεμένο κομμάτι των δύο κόμβων, μεμονωμένα, θα ήταν δένδρο. β: Δεν είναι δένδρο, γιατί οι ακμές σχηματίζουν κύκλο (κόμβος1→κόμβος2→κόμβος3→κόμβος1) — σε δένδρο δεν επιτρέπονται κύκλοι. Είναι κατευθυνόμενος γράφος. γ: Δεν είναι δένδρο, γιατί ο κάτω κόμβος έχει δύο γονείς (τόσο τον αριστερό όσο και τον δεξιό κόμβο τον συνδέουν με ξεχωριστή ακμή) — υπάρχουν δύο διαφορετικές διαδρομές από την «ρίζα» (πάνω κόμβο) προς αυτόν, κάτι που απαγορεύεται σε δένδρο. Είναι γράφος. δ: Δεν είναι ένα ενιαίο δένδρο, γιατί η δομή είναι ασύνδετη (δύο ανεξάρτητα ζεύγη χωρίς σύνδεση μεταξύ τους) — είναι στην πραγματικότητα ένα «δάσος» δύο ξεχωριστών δένδρων μαζί, όχι ένα ενιαίο δένδρο. Κάθε ζεύγος από μόνο του, όμως, ΕΙΝΑΙ ένα (μικρό) δένδρο.

Πρόσεξε:

  • Μια δομή μπορεί να αποτελείται από πολλά μικρά «σωστά» δένδρα (δάσος) και όμως να ΜΗΝ είναι η ίδια ένα ενιαίο δένδρο, αν δεν είναι συνολικά συνδεδεμένη.
  • Το κριτήριο «κάθε κόμβος έχει το πολύ έναν γονέα» είναι εξίσου σημαντικό με τη συνεκτικότητα — το γ αποτυγχάνει σε αυτό, όχι στη συνεκτικότητα.

Άσκηση 5 (σελ. 59)

  1. Ποια από τις βασικές δομές δεδομένων είναι η πιο κατάλληλη για να αναπαραστήσετε τη δομή των καταλόγων, των υποκαταλόγων και των αρχείων στον σκληρό σας δίσκο; (πίνακας / λίστα / δένδρο / ουρά / στοίβα)
  2. Ο κατάλογος των φοιτητών που εγγράφονται σε ένα μάθημα είναι ταξινομημένος αλφαβητικά με βάση το ονοματεπώνυμο και περιλαμβάνει στοιχεία όπως κωδικό φοιτητή, ημερομηνία γέννησης, φύλο, διεύθυνση, τηλέφωνο κ.λπ. Ποια δομή δεδομένων είναι καταλληλότερη γι' αυτόν τον κατάλογο; (στοίβα / δένδρο / λίστα / ουρά)

Σκέψη / Μεθοδολογία: Στο (1) αναγνωρίζουμε την αυστηρά ιεραρχική σχέση κατάλογος→υποκατάλογος→αρχείο. Στο (2) αναγνωρίζουμε ότι πρόκειται για μια απλή, γραμμική, ταξινομημένη ακολουθία εγγραφών χωρίς ιεραρχία μεταξύ τους.

Λύση:

1: η δομή καταλόγων/υποκαταλόγων/αρχείων έχει ρίζα (τον δίσκο) και κάθε στοιχείο έχει έναν μοναδικό «γονικό» κατάλογο. 2: ο κατάλογος φοιτητών είναι μια απλή σειρά εγγραφών, χωρίς σχέσεις γονέα-παιδιού μεταξύ των φοιτητών.

Απάντηση: 1. Δένδρο — η ιεραρχία καταλόγων/υποκαταλόγων/αρχείων έχει ακριβώς τη δομή ενός δένδρου: μία ρίζα (ο δίσκος), κάθε στοιχείο έχει έναν μοναδικό γονικό κατάλογο, και οι απλοί φάκελοι/αρχεία στο τέλος κάθε κλάδου είναι τα «φύλλα». 2. Λίστα — δεν υπάρχει ιεραρχική σχέση μεταξύ των φοιτητών, απλώς μια γραμμική, ταξινομημένη ακολουθία εγγραφών· η λίστα (ιδίως αν χρειάζεται συχνά εισαγωγή/διαγραφή φοιτητών διατηρώντας την αλφαβητική σειρά) είναι η φυσική επιλογή.

Πρόσεξε:

  • Στο 2, ο πίνακας θα ήταν επίσης τεχνικά εφικτός, αλλά η λίστα υπερτερεί όταν το σύνολο φοιτητών αλλάζει συχνά (εγγραφές/διαγραφές), αφού δεν χρειάζεται προκαθορισμένο μέγεθος.

Άσκηση 6 (σελ. 59)

Οι πληροφορίες σε μια εγκυκλοπαίδεια οργανώνονται σε θεματικές κατηγορίες (π.χ. Θετικές Επιστήμες, Ιστορία, Τέχνες), που η καθεμία υποδιαιρείται σε υποκατηγορίες σε διάφορα επίπεδα, με τα άρθρα στη βάση της δομής (π.χ. η κατηγορία «Θετικές Επιστήμες» περιλαμβάνει τις υποκατηγορίες Μαθηματικά, Φυσική, Χημεία, Πληροφορική κ.λπ.). Ποια δομή δεδομένων είναι καταλληλότερη για την αναπαράστασή τους; i) δένδρο ii) λίστα iii) πίνακας

Σκέψη / Μεθοδολογία: Η οργάνωση σε κατηγορίες→υποκατηγορίες→άρθρα είναι ξανά μια αυστηρά ιεραρχική δομή πολλαπλών επιπέδων.

Λύση:

Αναγνωρίζουμε ότι κάθε υποκατηγορία ανήκει σε ακριβώς μία «γονική» κατηγορία, με πολλαπλά επίπεδα βάθους — χαρακτηριστικό γνώρισμα δένδρου.

Απάντηση: (i) Δένδρο — κάθε θεματική κατηγορία μπορεί να έχει πολλές υποκατηγορίες (παιδιά), κάθε υποκατηγορία ανήκει σε ακριβώς μία «γονική» κατηγορία, και τα άρθρα βρίσκονται στα φύλλα της δομής, ακριβώς όπως προβλέπει ο ορισμός του δένδρου.

Άσκηση 7 (σελ. 59)

Τα περιεχόμενα ενός βιβλίου είναι: Βιβλίο → Γ1, Γ2, Γ3. Το Γ1 έχει υποενότητες Γ1.1, Γ1.2. Το Γ2 έχει υποενότητες Γ2.1, Γ2.2, Γ2.3. Το Γ2.1 έχει, με τη σειρά του, τις υποενότητες Γ2.1.1, Γ2.1.2. Το Γ3 δεν έχει άλλες υποενότητες. Δίνεται ένα μερικό δένδρο που δείχνει μόνο: ρίζα «Βιβλίο» → παιδιά «Γ1», «Γ2» → και ένα μόνο παιδί του Γ1, το «Γ1.1». Συμπληρώστε το δένδρο ώστε να απεικονίζει πλήρως τη δομή του βιβλίου.

Σκέψη / Μεθοδολογία: Αντιγράφουμε την ιεραρχία του πίνακα περιεχομένων απευθείας σε δενδρική μορφή: κάθε ενότητα γίνεται κόμβος-παιδί της ενότητας στην οποία ανήκει.

Λύση:

Προσθέτουμε το Γ1.2 ως δεύτερο παιδί του Γ1 (δίπλα στο ήδη σχεδιασμένο Γ1.1). Προσθέτουμε τα Γ2.1, Γ2.2, Γ2.3 ως παιδιά του Γ2. Προσθέτουμε τα Γ2.1.1, Γ2.1.2 ως παιδιά του Γ2.1. Προσθέτουμε τον κόμβο Γ3 ως τρίτο παιδί της ρίζας «Βιβλίο» — παραμένει φύλλο, χωρίς δικά του παιδιά, αφού δεν έχει υποενότητες.

Απάντηση: Το πλήρες δένδρο είναι: ρίζα «Βιβλίο» με τρία παιδιά, «Γ1», «Γ2», «Γ3». Το «Γ1» έχει παιδιά «Γ1.1» και «Γ1.2» (και τα δύο φύλλα). Το «Γ2» έχει παιδιά «Γ2.1», «Γ2.2», «Γ2.3» (φύλλα τα Γ2.2, Γ2.3)· το «Γ2.1» έχει με τη σειρά του παιδιά «Γ2.1.1» και «Γ2.1.2» (φύλλα). Το «Γ3» είναι φύλλο, χωρίς κανένα παιδί.

Πρόσεξε:

  • Μην ξεχάσεις τον κόμβο Γ3 — στο μερικό δένδρο δεν είχε καν σχεδιαστεί ως παιδί της ρίζας, αν και υπάρχει ρητά στα περιεχόμενα του βιβλίου.

Άσκηση 8 (σελ. 60)

Το τμήμα ψευδοκώδικα «ΟΣΟ x < 2 ΕΠΑΝΑΛΑΒΕ / x ← x + 2 / ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ» αναπαρίσταται ως δένδρο: ρίζα «Όσο», με αριστερό παιδί τον κόμβο «συνθήκη: <» (ο οποίος έχει τα δικά του δύο παιδιά: «μεταβλητή: x» και «σταθερά: 2») και δεξί παιδί τον κόμβο «κύριο μπλοκ εντολών», ο οποίος οδηγεί σε έναν κόμβο «ανάθεση τιμής». Ο κόμβος «ανάθεση τιμής» έχει δύο παιδιά: ένα ΚΕΝΟ πλαίσιο (αριστερά) και έναν κόμβο «+» (δεξιά)· ο κόμβος «+» έχει με τη σειρά του δύο παιδιά: ένα ΚΕΝΟ πλαίσιο (αριστερά) και τον κόμβο «σταθερά 2» (δεξιά). Συμπληρώστε το περιεχόμενο των δύο κενών πλαισίων.

Σκέψη / Μεθοδολογία: Αναλύουμε την εντολή ανάθεσης x ← x + 2 σαν δένδρο έκφρασης: ο τελεστής ανάθεσης «←» έχει αριστερά τη μεταβλητή που παίρνει τιμή (x) και δεξιά την έκφραση x + 2, που με τη σειρά της έχει αριστερά το x και δεξιά τη σταθερά 2.

Λύση:

Στον κόμβο «ανάθεση τιμής», το αριστερό (κενό) παιδί είναι αυτό που δέχεται την τιμή — δηλαδή η μεταβλητή x. Στον κόμβο «+», το αριστερό (κενό) παιδί είναι ο πρώτος τελεστέος της πρόσθεσης x + 2 — δηλαδή ξανά η μεταβλητή x.

Απάντηση: Και τα δύο κενά πλαίσια συμπληρώνονται με «μεταβλητή: x». Το πρώτο κενό (αριστερό παιδί του «ανάθεση τιμής») είναι το x στα αριστερά του βέλους ανάθεσης (αυτό στο οποίο ανατίθεται η νέα τιμή). Το δεύτερο κενό (αριστερό παιδί του «+») είναι το x μέσα στην έκφραση x + 2 (ο πρώτος τελεστέος της πρόσθεσης).

Πρόσεξε:

  • Το ίδιο σύμβολο x εμφανίζεται δύο φορές στο δένδρο, με διαφορετικό ρόλο κάθε φορά: μία ως «προορισμός» της ανάθεσης και μία ως «τελεστέος» μέσα στην αριθμητική έκφραση.

Άσκηση 9 (σελ. 61)

Χαρακτηρίστε τις παρακάτω προτάσεις ως Σωστές ή Λάθος:

  1. Η ρίζα ενός δένδρου δεν μπορεί ποτέ να είναι φύλλο.
  2. Σε ένα δυαδικό δένδρο, φύλλα συναντάμε μόνο στο αριστερό υποδένδρο.
  3. Σε ένα δυαδικό δένδρο, κάθε κόμβος-γονέας μπορεί να έχει το πολύ δύο παιδιά.
  4. Δεν είναι δυνατό να υπάρχουν δύο διαφορετικές διαδρομές από την ρίζα προς έναν άλλον κόμβο ενός δένδρου.
  5. Σε ένα δυαδικό δένδρο, κάθε κόμβος έχει μηδέν, ένα ή δύο υποδένδρα.
  6. Η ρίζα ενός δένδρου είναι ο μόνος κόμβος ενός δένδρου που δεν έχει γονέα.
  7. Τα φύλλα ενός δένδρου είναι απομονωμένοι κόμβοι που δε συνδέονται με άλλους κόμβους.
  8. Σε ένα δένδρο, κάθε κόμβος-γονέας μπορεί να έχει οποιονδήποτε αριθμό παιδιών.
  9. Μπορούν να υπάρχουν διαφορετικές δομές δυαδικών δένδρων αναζήτησης που αποθηκεύουν τα ίδια στοιχεία.
  10. Κάθε δένδρο είναι γράφος.

Σκέψη / Μεθοδολογία: Ελέγχουμε κάθε πρόταση με βάση τους τυπικούς ορισμούς δένδρου, δυαδικού δένδρου και BST.

Λύση:

1: σκέψου την περίπτωση δένδρου με έναν μόνο κόμβο. 2-5: εφαρμόζουμε τον ορισμό του δυαδικού δένδρου. 6-8: εφαρμόζουμε τον γενικό ορισμό του δένδρου. 9: σκέψου δύο διαφορετικές σειρές εισαγωγής των ίδιων στοιχείων σε BST. 10: θυμήσου τη σχέση δένδρου-γράφου του §1.3.3.

Απάντηση: 1. Λάθος — σε ένα δένδρο με έναν μόνο κόμβο, αυτός ο κόμβος είναι ταυτόχρονα ρίζα (δεν έχει γονέα) ΚΑΙ φύλλο (δεν έχει παιδιά). 2. Λάθος — φύλλα μπορεί να υπάρχουν σε οποιοδήποτε υποδένδρο (αριστερό ή δεξί), όχι μόνο στο αριστερό. 3. Σωστό — αυτό είναι ακριβώς ο ορισμός του δυαδικού δένδρου. 4. Σωστό — η μοναδικότητα της διαδρομής ρίζα→κόμβος είναι θεμελιώδης ιδιότητα του δένδρου. 5. Σωστό — κάθε κόμβος δυαδικού δένδρου έχει 0, 1 ή 2 παιδιά, άρα 0, 1 ή 2 υποδένδρα. 6. Σωστό — αυτός είναι ο ορισμός της ρίζας. 7. Λάθος — τα φύλλα συνδέονται κανονικά με τον γονέα τους· απλώς δεν έχουν δικά τους παιδιά. «Απομονωμένος» θα σήμαινε χωρίς καμία σύνδεση, κάτι που δεν ισχύει για τα φύλλα ενός δένδρου. 8. Σωστό — σε ένα γενικό (μη δυαδικό) δένδρο δεν υπάρχει όριο στον αριθμό παιδιών ενός κόμβου. 9. Σωστό — τα ίδια στοιχεία μπορούν να οργανωθούν σε διαφορετικές δομές BST (π.χ. πιο «ισορροπημένες» ή πιο «επιμηκυμένες»), ανάλογα με τη σειρά εισαγωγής τους. 10. Σωστό — κάθε δένδρο είναι μια ειδική περίπτωση γράφου (χωρίς κύκλους, με μοναδική ρίζα).

Πρόσεξε:

  • Η πρόταση 7 είναι μια συνηθισμένη παγίδα: «φύλλο» δεν σημαίνει «απομονωμένος κόμβος» — σημαίνει «κόμβος χωρίς παιδιά».

Άσκηση 10 (σελ. 61)

Το δένδρο απόφασης της Εικόνας 1.3.34 κατηγοριοποιεί φρούτα με βάση χρώμα, μέγεθος, σχήμα και γεύση: ρίζα «Πράσινο χρώμα;» → (ΝΑΙ) «Μεγάλο μέγεθος;» → (ΝΑΙ) [κενό φύλλο Α]· (ΟΧΙ) «Μεσαίο μέγεθος;» → (ΝΑΙ) Μήλο, (ΟΧΙ) Γκρέιπφρουτ. Ρίζα → (ΟΧΙ) «Κίτρινο χρώμα;» → (ΝΑΙ) «Στρογγυλό σχήμα;» → (ΝΑΙ) [κενό φύλλο Β], (ΟΧΙ) Μπανάνα· «Κίτρινο χρώμα;» → (ΟΧΙ) «Μικρό μέγεθος;» → (ΝΑΙ) «Γλυκιά γεύση;» → (ΝΑΙ) Κεράσι, (ΟΧΙ) Μούρο· «Μικρό μέγεθος;» → (ΟΧΙ) [κενό φύλλο Γ]. Τα φρούτα καρπούζι, πορτοκάλι και λεμόνι δεν έχουν ακόμα τοποθετηθεί. Ονομάστε τα κενά φύλλα Α, Β, Γ με τα φρούτα αυτά.

Σκέψη / Μεθοδολογία: Ακολουθούμε τη διαδρομή κάθε φρούτου μέσα στο δένδρο απόφασης, απαντώντας διαδοχικά τις ερωτήσεις χρώματος/μεγέθους/σχήματος/γεύσης με βάση τα γνωστά χαρακτηριστικά του.

Λύση:

Το καρπούζι είναι πράσινο και μεγάλο → ακολουθεί τη διαδρομή ΝΑΙ(πράσινο)-ΝΑΙ(μεγάλο) → φτάνει στο κενό φύλλο Α. Το πορτοκάλι δεν είναι πράσινο, είναι κίτρινο/πορτοκαλί και στρογγυλό → ακολουθεί τη διαδρομή ΟΧΙ(πράσινο)-ΝΑΙ(κίτρινο)-ΝΑΙ(στρογγυλό) → φτάνει στο κενό φύλλο Β. Το λεμόνι δεν είναι πράσινο, είναι κίτρινο αλλά όχι στρογγυλό (οβάλ) και μικρό, με ξινή (όχι γλυκιά) γεύση → ακολουθεί τη διαδρομή ΟΧΙ(πράσινο)-ΟΧΙ(κίτρινο→...)-ΟΧΙ(μικρό)... και καταλήγει στο κενό φύλλο Γ.

Απάντηση: Κενό φύλλο Α (πράσινο + μεγάλο) = Καρπούζι. Κενό φύλλο Β (κίτρινο/πορτοκαλί + στρογγυλό) = Πορτοκάλι. Κενό φύλλο Γ (όχι πράσινο, όχι στρογγυλό-κίτρινο, μικρό, όχι γλυκιά γεύση) = Λεμόνι.

Πρόσεξε:

  • Το δένδρο απόφασης δεν έχει «σωστή» ή «λάθος» δομή a priori — απλώς εφαρμόζουμε διαδοχικά τα κριτήρια που ήδη υπάρχουν στους εσωτερικούς κόμβους μέχρι να φτάσουμε σε ένα φύλλο.

Άσκηση 11 (σελ. 62)

Στην Εικόνα 1.3.35 δίνονται επτά δυαδικά δένδρα (τέσσερα στην πάνω σειρά α-δ, τρία στην κάτω σειρά α-γ). Πάνω σειρά — α: ρίζα 42, αριστερό παιδί 32, αριστερό παιδί του 32 ο 12 (αλυσίδα προς τα αριστερά). β: ρίζα 42, αριστερό παιδί 12, δεξί παιδί 32. γ: ρίζα 42 με τρία παιδιά 12, 32, 65 (ο 32 έχει επιπλέον παιδιά 30, 38). δ: ρίζα 42, αριστερό παιδί 32, δεξί παιδί 56· ο 32 έχει παιδιά 12 και 45. Κάτω σειρά — α: ρίζα 4 με παιδιά 7 και 2· ο 7 έχει παιδιά 5, 8, ο 5 έχει παιδί 6, ο 2 έχει παιδιά 1, 3. β: ρίζα 4, αριστερό παιδί 3, δεξί παιδί 7· ο 3 έχει αριστερό παιδί 2, ο 2 αριστερό παιδί 1· ο 7 έχει αριστερό παιδί 5, ο 5 δεξί παιδί 6. γ: ρίζα 5 με παιδιά 2 και 8· ο 2 έχει παιδιά 1, 3· ο 8 έχει αριστερό παιδί 6, ο 6 έχει παιδιά 4, 7. Ποια από αυτά τα δένδρα είναι έγκυρα δυαδικά δένδρα αναζήτησης (BST); Εξηγήστε το γιατί.

Σκέψη / Μεθοδολογία: Για κάθε κόμβο u ενός υποψήφιου BST πρέπει ΟΛΟΙ οι κόμβοι του αριστερού υποδένδρου του να έχουν τιμή μικρότερη από το u, και ΟΛΟΙ οι κόμβοι του δεξιού υποδένδρου να έχουν τιμή μεγαλύτερη — όχι μόνο τα άμεσα παιδιά, αλλά όλοι οι απόγονοι.

Λύση:

Πάνω-α: 42 > 32 > 12, αλυσίδα αριστερών παιδιών με φθίνουσες τιμές — έλεγχος BST ικανοποιείται σε κάθε επίπεδο. Πάνω-β: ο 32 είναι δεξί παιδί του 42, αλλά 32 < 42 — παραβιάζει τον κανόνα (το δεξί υποδένδρο πρέπει να έχει τιμές ≥ τη ρίζα). Πάνω-γ: ο κόμβος 42 έχει τρία παιδιά — αυτό παραβιάζει ήδη τον ορισμό του δυαδικού δένδρου (το πολύ 2 παιδιά ανά κόμβο), άρα δεν μπορεί να είναι ούτε καν δυαδικό δένδρο, πόσο μάλλον BST. Πάνω-δ: ελέγχουμε το δεξί παιδί του 32, τον κόμβο 45 — αν και τοπικά 45>32 (σωστό ως δεξί παιδί του 32), ο 45 βρίσκεται μέσα στο ΑΡΙΣΤΕΡΟ υποδένδρο της ρίζας 42 (μέσω του 32), οπότε θα έπρεπε να είναι < 42. Όμως 45 > 42 — παραβίαση του καθολικού κανόνα. Κάτω-β: αριστερό υποδένδρο της ρίζας 4 είναι το {3,2,1}, όλα <4 ✓· δεξιό υποδένδρο είναι το {7,5,6}, όλα >4 ✓. Μέσα στο αριστερό: 3>2>1, φθίνουσα αλυσίδα αριστερών παιδιών, έγκυρη. Μέσα στο δεξί: 7 με αριστερό παιδί 5 (5<7 ✓) και ο 5 με δεξί παιδί 6 (6>5 ✓, και 6<7 ✓ αφού είναι στο αριστερό υποδένδρο του 7). Όλοι οι έλεγχοι περνούν. Κάτω-γ: η ρίζα είναι 5, με «δεξιό» κλάδο τον 8 (8>5 ✓) που οδηγεί, μέσω του 6, στον κόμβο 4. Όμως ο 4 βρίσκεται στο υποδένδρο του 8 (δηλαδή στο δεξί/μεγαλύτερο υποδένδρο της ρίζας 5), οπότε θα έπρεπε να είναι >5 — όμως 4<5. Παραβίαση του καθολικού κανόνα, ανεξάρτητα από το πώς ακριβώς είναι τοποθετημένος ο 4 κάτω από τον 6.

Απάντηση: Έγκυρα BST: πάνω-α και κάτω-β. Μη έγκυρα: πάνω-β (ο 32<42 είναι στο δεξί υποδένδρο), πάνω-γ (δεν είναι καν δυαδικό δένδρο — 3 παιδιά στη ρίζα), πάνω-δ (ο 45>42 βρίσκεται στο αριστερό υποδένδρο της ρίζας) και κάτω-γ (ο 4<5 βρίσκεται στο δεξί/«μεγαλύτερο» υποδένδρο της ρίζας 5). Για το κάτω-α, η εγκυρότητα εξαρτάται από την ακριβή αριστερή/δεξιά τοποθέτηση του 7-κλάδου και του 2-κλάδου γύρω από τη ρίζα 4, καθώς και του 6 γύρω από τον 5 — οι τιμές το επιτρέπουν (ομαδοποιούνται σωστά σε {2,1,3}<4 και {7,5,8,6}>4), αλλά χρειάζεται επιβεβαίωση από το ακριβές σχήμα του βιβλίου για να βεβαιωθεί η σωστή αριστερή/δεξιά τοποθέτηση.

Πρόσεξε:

  • Ο έλεγχος BST πρέπει να γίνεται σε ΟΛΟΥΣ τους απογόνους ενός κόμβου, όχι μόνο στα άμεσα παιδιά του — το πάνω-δ και το κάτω-γ αποτυγχάνουν ακριβώς σε αυτό το σημείο (τοπικά φαίνονται σωστά, καθολικά όχι).
  • Πριν καν ελέγξεις την ταξινόμηση τιμών, βεβαιώσου ότι το σχήμα είναι δυαδικό δένδρο (το πολύ 2 παιδιά ανά κόμβο) — το πάνω-γ αποτυγχάνει ήδη σε αυτό το πρώτο, πιο βασικό κριτήριο.

Άσκηση 12 (σελ. 63)

Στο δυαδικό δένδρο αναζήτησης με ρίζα «Ε», αριστερό παιδί «Β» (με παιδιά «Α» και «Γ») και δεξί παιδί «Μ» (με παιδιά «Λ» και «Ξ»), αφού συγκρίνετε το στοιχείο «Π» (αυτό που ψάχνετε) με τη ρίζα «Ε» και διαπιστώσετε ότι δεν είναι ίσα, σε ποια κατεύθυνση θα συνεχίσετε την αναζήτηση; □ Στα αριστερά του Ε □ Στα δεξιά του Ε □ Και προς τις δύο κατευθύνσεις

Σκέψη / Μεθοδολογία: Στο BST τα στοιχεία συγκρίνονται με βάση την αλφαβητική τους σειρά (όπως τα αριθμητικά στοιχεία συγκρίνονται με το μέγεθός τους). Συγκρίνουμε τη θέση του Π με του Ε στην αλφαβητική σειρά.

Λύση:

Στο ελληνικό αλφάβητο, μετά το Ε ακολουθούν Ζ, Η, Θ, Ι, Κ, Λ, Μ, Ν, Ξ, Ο, Π — το Π έρχεται πολύ αργότερα από το Ε. Άρα το Π είναι αλφαβητικά «μεγαλύτερο» από το Ε. Στο BST, τιμές μεγαλύτερες από τη ρίζα βρίσκονται πάντα στο δεξί υποδένδρο.

Απάντηση: Στα δεξιά του Ε — αφού το Π έρχεται αλφαβητικά μετά το Ε, και στο δυαδικό δένδρο αναζήτησης όλες οι τιμές μεγαλύτερες της ρίζας βρίσκονται στο δεξί υποδένδρο (εδώ, στο υποδένδρο με ρίζα το Μ).

Πρόσεξε:

  • Μην μπερδέψεις τη φορά: «μεγαλύτερο» = δεξιά, «μικρότερο» = αριστερά, ακριβώς όπως στα αριθμητικά BST.

Άσκηση 13 (σελ. 63)

Ένα κέντρο ταξί έχει 6 διαθέσιμα ταξί που μπορούν να έρθουν να παραλάβουν έναν πελάτη: Α απέχει 12 χλμ., Β 5 χλμ., Γ 10 χλμ., Δ 7 χλμ., Ε 13 χλμ., ΣΤ 20 χλμ. (i) Σχεδιάστε τον γράφο που αναπαριστά το πρόβλημα (με τα χιλιόμετρα πάνω στις ακμές). (ii) Ποιον τύπο γράφου χρησιμοποιήσατε; (iii) Ποιο ταξί θα επιλέξει το κέντρο, αν το μόνο κριτήριο είναι η χιλιομετρική απόσταση;

Σκέψη / Μεθοδολογία: Μοντελοποιούμε τον πελάτη και τα 6 ταξί ως κόμβους ενός γράφου με «αστεροειδή» (star) μορφή: ένας κεντρικός κόμβος (ο πελάτης/το κέντρο) συνδέεται με κάθε ταξί μέσω μίας ακμής, με «βάρος» την απόσταση σε χιλιόμετρα. Το κατάλληλο ταξί είναι αυτό με τη μικρότερη τιμή βάρους.

Λύση:

(i) Σχεδιάζουμε έναν κεντρικό κόμβο «Πελάτης» και έξι κόμβους Α, Β, Γ, Δ, Ε, ΣΤ, με μία ακμή από το «Πελάτης» προς κάθε ταξί, με βάρος την αντίστοιχη απόσταση: 12, 5, 10, 7, 13, 20. (ii) Αναγνωρίζουμε ότι οι ακμές δεν έχουν φορά (η απόσταση πελάτη-ταξί είναι ίδια και προς τις δύο μεριές) αλλά έχουν αριθμητική τιμή (βάρος). (iii) Συγκρίνουμε τις έξι τιμές βάρους και επιλέγουμε την ελάχιστη.

Απάντηση: (i) Γράφος-«αστέρι»: κεντρικός κόμβος «Πελάτης», με 6 ακμές προς τους κόμβους Α (βάρος 12), Β (βάρος 5), Γ (βάρος 10), Δ (βάρος 7), Ε (βάρος 13), ΣΤ (βάρος 20). (ii) Μη κατευθυνόμενος, ζυγισμένος γράφος (weighted graph) — οι ακμές δεν έχουν κατεύθυνση, αλλά φέρουν αριθμητική τιμή (την απόσταση). (iii) Το κέντρο θα επιλέξει το ταξί Β, αφού απέχει μόλις 5 χιλιόμετρα — τη μικρότερη απόσταση από όλα τα διαθέσιμα ταξί.

Πρόσεξε:

  • Το «βάρος» μιας ακμής δεν είναι πάντα απόσταση — μπορεί να είναι κόστος, χρόνος ή οποιοδήποτε άλλο αριθμητικό μέγεθος· εδώ είναι χιλιόμετρα.