[Powered by Google Translate] [Δυαδική Αναζήτηση]
[Patrick Schmid - Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50. - CS50.TV]
>> Αν σας έδωσα μια λίστα με τα ονόματα των χαρακτήρων της Disney σε αλφαβητική σειρά
και σας ζήτησε να βρείτε Μίκυ Μάους,
πώς θα μπορείτε να κάνετε για αυτό;
Ένας προφανής τρόπος θα ήταν να σαρώσει τη λίστα από την αρχή
και ελέγξτε κάθε όνομα για να δείτε αν είναι Μίκυ.
Αλλά, όπως μπορείτε να διαβάσετε Aladdin, Alice, Ariel, και ούτω καθεξής,
γρήγορα θα συνειδητοποιήσετε ότι ξεκινώντας από το μπροστινό μέρος του καταλόγου δεν ήταν μια καλή ιδέα.
Εντάξει, ίσως θα πρέπει να αρχίσουμε να εργαζόμαστε προς τα πίσω από το τέλος της λίστας.
Τώρα μπορείτε να διαβάσετε Ταρζάν, Stitch, Χιονάτη, και ούτω καθεξής.
Παρόλα αυτά, αυτό δεν φαίνεται σαν ο καλύτερος τρόπος να πάει για αυτό.
>> Λοιπόν, ένας άλλος τρόπος που θα μπορούσε να πάει για να κάνει αυτό είναι να προσπαθήσουμε να περιορίσετε
ο κατάλογος των ονομάτων που θα πρέπει να εξετάσουμε.
Από τη στιγμή που γνωρίζουμε ότι είναι σε αλφαβητική σειρά,
θα μπορούσατε ακριβώς να δούμε τα ονόματα στη μέση της λίστας
και ελέγξτε αν Μίκυ Μάους είναι πριν ή μετά από αυτό το όνομα.
Κοιτάζοντας το τελευταίο όνομα στη δεύτερη στήλη
τότε θα συνειδητοποιήσετε ότι για Μ Mickey έρχεται μετά από J για Jasmine,
έτσι θα αγνοήσουν απλά το πρώτο ήμισυ του καταλόγου.
Στη συνέχεια, θα ήθελα ίσως δούμε στην κορυφή της την τελευταία στήλη
και να δούμε ότι αυτή η διαδικασία αρχίζει με Ραπουνζέλ.
Mickey έρχεται πριν Ραπουνζέλ? Μοιάζει μπορούμε να αγνοήσουμε την τελευταία στήλη, καθώς και.
Συνεχίζοντας τη στρατηγική αναζήτησης, θα δείτε ότι γρήγορα Mickey
είναι στο πρώτο μισό του εναπομένοντος λίστα των ονομάτων
και, τέλος, βρείτε Mickey κρύβονται μεταξύ Merlin και Minnie.
>> Αυτό που μόλις έκανε ήταν ουσιαστικά δυαδική αναζήτηση.
Όπως το όνομα υπονοεί, εκτελεί αναζήτηση στρατηγική του σε ένα δυαδικό θέμα.
Τι σημαίνει αυτό;
Λοιπόν, δίνεται μια λίστα με ταξινομημένα στοιχεία, ο αλγόριθμος δυαδικής αναζήτησης κάνει μια δυαδική απόφαση -
αριστερά ή δεξιά, μεγαλύτερη ή μικρότερη από, αλφαβητικά πριν ή μετά - σε κάθε σημείο.
Τώρα που έχουμε ένα όνομα που πηγαίνει μαζί με αυτό τον αλγόριθμο αναζήτησης,
Ας δούμε ένα άλλο παράδειγμα, αλλά αυτή τη φορά με μια λίστα ταξινομημένο αριθμούς.
Πείτε ψάχνουμε για τον αριθμό 144 σε αυτή τη λίστα των αριθμών ταξινομημένο.
Όπως και πριν, θα βρούμε τον αριθμό που είναι στη μέση -
το οποίο στην περίπτωση αυτή είναι 13 - και να δούμε αν 144 είναι μεγαλύτερη ή μικρότερη από 13.
Δεδομένου ότι είναι σαφώς μεγαλύτερο από 13, δεν μπορούμε να αγνοήσουμε τα πάντα που είναι 13 ή λιγότερο
και να επικεντρώνονται απλώς στο υπόλοιπο μισό.
Δεδομένου ότι έχουμε τώρα ένα ακόμη αριθμό των ειδών που έφυγε,
επιλέγουμε απλώς έναν αριθμό που είναι κοντά στο κέντρο.
Σε αυτή την περίπτωση έχουμε επιλέξει 55.
Θα μπορούσαμε να είχαμε εξίσου εύκολα επιλέξει 89.
Εντάξει. Και πάλι, 144 είναι μεγαλύτερο από 55, έτσι ώστε να πάμε προς τα δεξιά.
Ευτυχώς για μας, ο επόμενος αριθμός μέση είναι 144,
αυτός που ψάχνουμε.
Έτσι, προκειμένου να βρει 144 χρησιμοποιώντας μια δυαδική αναζήτηση, είμαστε σε θέση να το βρείτε μόνο σε 3 βήματα.
Αν θα χρησιμοποιηθεί γραμμική αναζήτηση εδώ, θα έχουν 12 βήματα μας.
Ως Μάλιστα, εφόσον αυτή η μέθοδος αναζήτησης μειώνει στο μισό τον αριθμό των στοιχείων
πρέπει να δούμε σε κάθε βήμα, θα βρείτε το στοιχείο είναι που ψάχνουν για
περίπου στο αρχείο καταγραφής του αριθμού των στοιχείων στη λίστα.
Τώρα που έχουμε δει 2 παραδείγματα, ας ρίξουμε μια ματιά στο
κάποια ψευδοκώδικα για μια αναδρομική συνάρτηση που υλοποιεί δυαδική αναζήτηση.
Ξεκινώντας από την κορυφή, βλέπουμε ότι πρέπει να βρούμε μια λειτουργία που διαρκεί 4 επιχειρήματα:
κλειδί, σειρά, λεπτά, και max.
Το κλειδί είναι ο αριθμός που ψάχνουμε, έτσι 144 στο προηγούμενο παράδειγμα.
Array είναι η λίστα των αριθμών που ψάχνετε.
Ελάχιστο και μέγιστο είναι οι δείκτες των ελάχιστων και μέγιστων θέσεις
ότι αυτή τη στιγμή εξετάζουμε.
Έτσι, όταν αρχίσουμε, min θα είναι μηδέν και μέγιστη θα είναι το μέγιστο δείκτη του πίνακα.
Όπως περιορίσετε την αναζήτηση προς τα κάτω, θα ενημερώσουμε min και max
να είναι ακριβώς το εύρος που εξακολουθούν να ψάχνουν μέσα
>> Ας μεταβείτε στο ενδιαφέρον μέρος πρώτο.
Το πρώτο πράγμα που κάνουμε είναι να βρούμε το μέσο,
ο δείκτης που είναι στα μισά του δρόμου μεταξύ της ελάχιστης και της μέγιστης του πίνακα ότι είμαστε ακόμα εξεταστεί.
Στη συνέχεια θα εξετάσουμε την αξία του πίνακα στη συγκεκριμένη θέση μέσο
και να δούμε αν ο αριθμός που ψάχνουμε είναι μικρότερο από αυτό το κλειδί.
Εάν ο αριθμός σε αυτή τη θέση είναι μικρότερη,
τότε αυτό σημαίνει ότι το κλειδί είναι μεγαλύτερο από ό, τι όλων των αριθμών στα αριστερά της θέσεως αυτής.
Έτσι, μπορούμε να ονομάσουμε δυαδική λειτουργία αναζήτησης και πάλι,
αλλά αυτή τη φορά την ενημέρωση του min και max παραμέτρους για να διαβάσει μόνο το μισό
που είναι μεγαλύτερη ή ίση με την τιμή που μόλις κοίταξε.
Από την άλλη πλευρά, εάν το κλειδί είναι μικρότερο από τον αριθμό στο τρέχον μέσο της συστοιχίας,
θέλουμε να πάμε προς τα αριστερά και αγνοεί όλους τους αριθμούς που είναι μεγαλύτερες.
Και πάλι, καλούμε δυαδική αναζήτηση, αλλά αυτή τη φορά με τη σειρά του min και max ενημερωμένο
να περιλαμβάνει μόνο το κάτω μισό.
Αν η τιμή στο τρέχον μέσον της συστοιχίας είναι ούτε
ούτε μεγαλύτερο από μικρότερο από το κλειδί, τότε πρέπει να είναι ίσο με το κλειδί.
Έτσι, μπορούμε να επιστρέψουμε απλά τον ισχύοντα μέσο δείκτη, και τελειώσαμε.
Τέλος, αυτός ο έλεγχος είναι εδώ για την περίπτωση που ο αριθμός
δεν είναι στην πραγματικότητα στην διάταξη των αριθμών αναζητούμε.
Εάν η μέγιστη δείκτης της περιοχής που ψάχνουμε για
Είναι όλο και λιγότερο από το ελάχιστο, αυτό σημαίνει ότι έχουμε προχωρήσει πάρα πολύ.
Δεδομένου ότι ο αριθμός δεν ήταν στην διάταξη εισαγωγής, επιστρέφουμε -1
για να δείξει ότι τίποτα δεν βρέθηκε.
>> Μπορεί να έχετε παρατηρήσει ότι ο αλγόριθμος για να εργαστούν,
η λίστα των αριθμών πρέπει να ταξινομηθούν.
Με άλλα λόγια, μπορούμε να βρούμε μόνο 144 χρησιμοποιώντας δυαδική αναζήτηση
αν όλοι οι αριθμοί που διέταξε από το χαμηλότερο στο υψηλότερο.
Αν αυτό δεν συνέβαινε αυτό, δεν θα ήμασταν σε θέση να αποκλείσει το ήμισυ των αριθμών σε κάθε βήμα.
Έτσι έχουμε 2 επιλογές.
Είτε μπορούμε να πάρουμε μια λίστα και αδιαχώριστα ταξινομήσετε πριν από τη χρήση δυαδική αναζήτηση,
ή μπορούμε να βεβαιωθείτε ότι ο κατάλογος των αριθμών ταξινομημένο ως προσθέτουμε αριθμούς σε αυτό.
Έτσι, αντί της ταξινόμησης μόνο όταν έχουμε να αναζητήσετε,
γιατί να μην κρατήσει τη λίστα ταξινομημένη ανά πάσα στιγμή;
>> Ένας τρόπος για να διατηρήσετε μια λίστα με τους αριθμούς ταξινομημένο, ενώ ταυτόχρονα επιτρέπει
κάποιον να προσθέσετε ή να μετακινήσετε τους αριθμούς από αυτήν τη λίστα
είναι με τη χρήση κάτι που ονομάζεται ένα δυαδικό δέντρο αναζήτησης.
Ένα δέντρο δυαδική αναζήτηση είναι μια δομή δεδομένων που έχει 3 ιδιότητες.
Πρώτον, η αριστερή υποδένδρο κάθε κόμβος περιέχει μόνο τιμές που είναι λιγότερο από
ή ίση με την αξία του κόμβου.
Δεύτερον, η σωστή υποδένδρο ενός κόμβου περιέχει μόνο τιμές που είναι μεγαλύτερες από ό, τι
ή ίση με την αξία του κόμβου.
Και, τέλος, τόσο τα αριστερά και δεξιά υποδένδρων όλων των κόμβων
Είναι, επίσης, δυαδικά δέντρα αναζήτησης.
Ας δούμε ένα παράδειγμα με τους ίδιους αριθμούς που χρησιμοποιήσαμε νωρίτερα.
Για όσους από εσάς δεν έχουν δει ποτέ ένα δέντρο της επιστήμης των υπολογιστών πριν,
επιτρέψτε μου να ξεκινήσω λέγοντάς σας ότι ένα δέντρο επιστήμης των υπολογιστών μεγαλώνει προς τα κάτω.
Ναι, σε αντίθεση με τα δέντρα που έχετε συνηθίσει,
η ρίζα ενός δένδρου επιστήμης των υπολογιστών είναι στην κορυφή,
και τα φύλλα βρίσκονται στο κάτω μέρος.
Κάθε μικρό κουτί ονομάζεται ένας κόμβος, και οι κόμβοι συνδέονται μεταξύ τους με ακμές.
Έτσι, η ρίζα αυτού του δέντρου είναι ένας κόμβος αξία με την τιμή 13,
η οποία έχει 2 κόμβους παιδιά με τις τιμές 5 και 34.
Μια υποδέντρο είναι το δέντρο που σχηματίζεται ακριβώς με την εξέταση μια υποενότητα του ολόκληρο το δέντρο.
>> Για παράδειγμα, η αριστερή υποδένδρο του κόμβου 3 είναι το δέντρο που δημιουργήθηκε από τους κόμβους 0, 1 και 2.
Έτσι, αν πάμε πίσω στις ιδιότητες ενός δέντρου δυαδική αναζήτηση,
βλέπουμε ότι κάθε κόμβος στο δέντρο συμμορφώνεται με όλες τις 3 ιδιότητες, δηλαδή,
το αριστερό υποδέντρο περιέχει μόνο τιμές που είναι μικρότερες ή ίσες με την αξία του κόμβου?
υποδέντρο το δικαίωμα όλων των κόμβων
περιέχει μόνο τιμές που είναι μεγαλύτερες ή ίσες με την τιμή του κόμβου? και
τόσο αριστερά και δεξιά υποδένδρων όλων των κόμβων είναι επίσης δέντρα δυαδικής αναζήτησης.
Αν και αυτό το δέντρο φαίνεται διαφορετικό, αυτό είναι ένα έγκυρο δένδρο δυαδική αναζήτηση
για το ίδιο σύνολο αριθμών.
Ως Στην πραγματικότητα, υπάρχουν πολλοί τρόποι που μπορείτε να δημιουργήσετε
έγκυρο δέντρο δυαδικής αναζήτησης από αυτούς τους αριθμούς.
Λοιπόν, ας πάμε πίσω στο πρώτο δημιουργήσαμε.
Έτσι, αυτό που μπορούμε να κάνουμε με αυτά τα δέντρα;
Λοιπόν, μπορούμε πολύ απλά να βρείτε τις ελάχιστες και μέγιστες τιμές.
Οι ελάχιστες τιμές μπορούν να βρεθούν από πάντα θα τα αριστερά
μέχρι να μην υπάρχουν περισσότερους κόμβους για να επισκεφθείτε.
Αντίθετα, για να βρείτε το μέγιστο μία μόνο απλά κατεβαίνει προς τα δεξιά σε κάθε στιγμή.
>> Η εύρεση οποιοδήποτε άλλο αριθμό που δεν είναι το ελάχιστο ή το μέγιστο
είναι εξίσου εύκολη.
Πείτε ψάχνουμε για τον αριθμό 89.
Εμείς απλά ελέγξτε την αξία του κάθε κόμβου και να πάει προς τα αριστερά ή προς τα δεξιά,
ανάλογα με το αν η αξία του κόμβου είναι μικρότερη ή μεγαλύτερη από ό, τι
αυτός που ψάχνουμε.
Έτσι, ξεκινώντας από τη ρίζα του 13, βλέπουμε ότι το 89 είναι μεγαλύτερο,
και έτσι πάμε προς τα δεξιά.
Στη συνέχεια, βλέπουμε τον κόμβο για 34, και πάλι πάμε προς τα δεξιά.
89 είναι ακόμα μεγαλύτερη από το 55, έτσι ώστε να συνεχίζουν να πηγαίνουν προς τα δεξιά.
Στη συνέχεια έρχονται με ένα κόμβο με την αξία του 144 και πηγαίνετε προς τα αριστερά.
Lo και behold, 89 είναι ακριβώς εκεί.
>> Ένα άλλο πράγμα που μπορούμε να κάνουμε είναι να εκτυπώσετε όλα τα τηλέφωνα με την εκτέλεση μιας inorder διάσχισης.
Μια inorder διάσχιση σημαίνει να εκτυπώσετε τα πάντα στο αριστερό υποδέντρο
ακολουθείται από τύπωση το ίδιο το κόμβο
και στη συνέχεια ακολουθείται από τύπωση πάντα έξω στο δεξί υποδένδρο.
Για παράδειγμα, ας πάρουμε το αγαπημένο δέντρο μας δυαδική αναζήτηση
και να εκτυπώσετε τους αριθμούς σε ταξινομημένη σειρά.
Ξεκινάμε από τη ρίζα του 13, αλλά πριν από την εκτύπωση 13 έχουμε να εκτυπώσετε
πάντα στο αριστερό υποδέντρο.
Γι 'αυτό και πάμε στο 5. Έχουμε ακόμη να πάει βαθύτερα στο δέντρο μέχρι να βρούμε την πιο αριστερή κόμβο,
η οποία είναι μηδέν.
Μετά την εκτύπωση μηδέν, πάμε πίσω στο 1 και να εκτυπώσετε ότι έξω.
Στη συνέχεια, πάμε προς τα δεξιά υποδέντρο, η οποία είναι 2, και να εκτυπώσετε ότι έξω.
Τώρα που τελειώσαμε με αυτό το υποδένδρο,
μπορούμε να πάμε πίσω μέχρι το 3 και να το τυπώσετε έξω.
Συνεχίζοντας να δημιουργήσετε αντίγραφα ασφαλείας, να εκτυπώσετε το 5 και στη συνέχεια το 8.
Τώρα που έχουμε ολοκληρώσει το σύνολο αριστερά υποδένδρο,
μπορούμε να τυπώσουμε το 13 και να αρχίσει να εργάζεται για το δικαίωμα υποδέντρο.
Εμείς hop σε 34, αλλά πριν από την εκτύπωση 34 θα πρέπει να εκτυπώσετε το αριστερό υποδέντρο του.
Γι 'αυτό και εκτυπώσετε 21? Τότε έχουμε την ευκαιρία να εκτυπώσετε 34 και επισκεφθείτε το δικαίωμα υποδένδρο του.
Από 55 έχει κανένα αριστερό υποδέντρο, θα το εκτυπώσετε και να συνεχίσει προς τα δεξιά υποδέντρο του.
144 έχει ένα αριστερό υποδέντρο, και έτσι μπορούμε να εκτυπώσετε το 89, που ακολουθείται από τα 144,
και τέλος η πιο δεξιά κόμβο 233.
Εκεί το έχετε? Όλοι οι αριθμοί εκτυπώνονται με τη σειρά από τη χαμηλότερη στην υψηλότερη.
>> Η προσθήκη κάτι για το δέντρο είναι σχετικά ανώδυνη, καθώς και.
Το μόνο που έχετε να κάνετε είναι να βεβαιωθείτε ότι ακολουθούμε 3 ακίνητα δυαδικού δένδρου αναζήτησης
και στη συνέχεια τοποθετήστε την αξία όπου υπάρχει χώρος.
Ας πούμε ότι θέλετε να εισάγετε την αξία του 7.
Από το 7 είναι λιγότερο από 13, πάμε προς τα αριστερά.
Αλλά είναι μεγαλύτερος από 5, οπότε διασχίζουν προς τα δεξιά.
Δεδομένου ότι είναι λιγότερο από 8 και 8 είναι ένας κόμβος φύλλο, προσθέτουμε 7 στο αριστερό παιδί του 8.
Voila! Έχουμε προσθέσει έναν αριθμό σε δυαδικό δένδρο αναζήτησης.
>> Αν μπορούμε να προσθέσουμε τα πράγματα, καλύτερα να είναι σε θέση να διαγράψετε τα πράγματα, όπως καλά.
Δυστυχώς για εμάς, η διαγραφή είναι λίγο πιο περίπλοκη -
δεν είναι πολλά, αλλά ακριβώς λίγο.
Υπάρχουν 3 διαφορετικά σενάρια ότι πρέπει να εξετάσουμε
κατά τη διαγραφή στοιχείων από δυαδικά δέντρα αναζήτησης.
Πρώτον, η ευκολότερη περίπτωση είναι ότι το στοιχείο είναι ένα δικτυακό κόμβο.
Σε αυτή την περίπτωση, θα διαγράψετε και να πάει απλά με την επιχείρησή μας.
Πείτε μας θέλετε να διαγράψετε το 7 που μόλις προσθέσατε.
Λοιπόν, βρίσκουμε απλά, να το αφαιρέσετε, και αυτό είναι αυτό.
Η επόμενη περίπτωση είναι αν ο κόμβος έχει μόνο 1 παιδί.
Εδώ μπορούμε να διαγράψετε τον κόμβο, αλλά πρέπει πρώτα να βεβαιωθείτε
για να συνδέσετε το υποδένδρο που επαφίεται τώρα ορφανά
στη μητρική του κόμβου που μόλις διαγράφονται.
Πείτε μας θέλετε να διαγράψετε 3 από δέντρο μας.
Παίρνουμε το στοιχείο παιδί του κόμβου και να το επισυνάψετε στο γονέα του κόμβου.
Σε αυτή την περίπτωση, είμαστε προσάρτηση τώρα το 1 στο 5.
Αυτό λειτουργεί χωρίς πρόβλημα, διότι γνωρίζουμε, σύμφωνα με τη δυαδική αναζήτηση ακινήτων δέντρο,
ότι τα πάντα στο αριστερό υποδένδρο της 3 ήταν μικρότερο από 5.
Τώρα που 3 του υποδέντρο έχει ληφθεί μέριμνα, μπορούμε να το διαγράψετε.
Η τρίτη και τελευταία περίπτωση είναι η πιο πολύπλοκη.
Αυτή είναι η περίπτωση όταν ο κόμβος που θέλουμε να έχει διαγραφεί 2 παιδιά.
Για να γίνει αυτό, πρέπει πρώτα να βρει τον κόμβο που έχει την επόμενη μεγαλύτερη αξία,
ανταλλάξουν τα δύο, και στη συνέχεια να διαγράψετε τον κόμβο στην ερώτηση.
Παρατηρήστε τον κόμβο που έχει η αμέσως μεγαλύτερη τιμή δεν μπορεί να έχει το ίδιο 2 παιδιά
από το αριστερό παιδί του θα ήταν η καλύτερη υποψήφια για το επόμενο μεγαλύτερο.
Ως εκ τούτου, η διαγραφή ενός κόμβου με 2 παιδιά ανέρχεται σε εναλλαγή των 2 κόμβων,
και στη συνέχεια διαγραφή γίνεται από 1 από τα 2 παραπάνω κανόνες.
Για παράδειγμα, ας πούμε ότι θέλετε να διαγράψετε τον κόμβο ρίζα, 13.
Το πρώτο πράγμα που κάνουμε είναι να βρούμε την επόμενη μεγαλύτερη αξία στο δέντρο
το οποίο, σε αυτή την περίπτωση, είναι 21.
Θα ανταλλάξουν τα 2 κόμβους, κάνοντας φύλλο 13 α και 21 ο κεντρικός κόμβος της ομάδας.
Τώρα μπορούμε απλά να διαγράψετε 13.
>> Όπως αναφέρθηκε προηγουμένως, υπάρχουν πολλοί πιθανοί τρόποι για να κάνετε μια έγκυρη δέντρο δυαδική αναζήτηση.
Δυστυχώς για μας, μερικά είναι χειρότερα από ό, τι άλλες.
Για παράδειγμα, τι συμβαίνει όταν χτίζουμε ένα δυαδικό δέντρο αναζήτησης
από μια ταξινομημένη λίστα των αριθμών;
Όλοι οι αριθμοί απλώς προστίθεται στο δικαίωμα σε κάθε βήμα.
Όταν θέλουμε να αναζητήσετε έναν αριθμό,
δεν έχουμε άλλη επιλογή παρά μόνο να κοιτάξουμε το δικαίωμα σε κάθε βήμα.
Αυτό δεν είναι καλύτερη από γραμμική αναζήτηση σε όλα.
Παρά το γεγονός ότι εμείς δεν θα τους καλύψει εδώ, υπάρχουν και άλλες, πιο σύνθετες,
δομές δεδομένων που να βεβαιωθείτε ότι αυτό δεν θα συμβεί.
Ωστόσο, ένα απλό πράγμα που μπορεί να γίνει για να αποφευχθεί αυτό είναι
απλά να ανακατέψετε τυχαία τις τιμές εισόδου.
Είναι εξαιρετικά απίθανο ότι με τυχαία μια ευκαιρία ανακατεύονται λίστα των αριθμών είναι ταξινομημένο.
Αν συνέβαινε αυτό, οι χαρτοπαικτικές λέσχες δεν θα μείνουν στην επιχείρηση για μεγάλο χρονικό διάστημα.
>> Εκεί το έχετε.
Ξέρετε τώρα για δυαδική αναζήτηση και δέντρα δυαδικής αναζήτησης.
Είμαι Patrick Schmid, και αυτό είναι CS50.
[CS50.TV]
Ένας προφανής τρόπος θα ήταν να σαρώσει τη λίστα από ... [μπιπ]
... Ο αριθμός των αντικειμένων ... yep
[Γέλια]
Κόμβο ... μετά από 234 ... augh.
>> Yay! Αυτό ήταν -