>> [Παίζει μουσική]
>> ROB BOWDEN: Hi.
Είμαι Rob.
Και ας αυτή τη λύση έξω.
Έτσι, εδώ θα πάμε να εφαρμόσει ένα γενικό πίνακα.
Βλέπουμε ότι ο κόμβος του struct μας πίνακας πρόκειται να μοιάζει με αυτό.
Έτσι πρόκειται να έχουν μια λέξη char πίνακας μεγέθους ΜΗΚΟΣ + 1.
Μην ξεχνάτε το + 1, δεδομένου ότι η μέγιστη λέξη στο λεξικό είναι 45
χαρακτήρων.
Και μετά θα πάμε να χρειαστεί ένα επιπλέον χαρακτήρα για το μηδέν backslash.
>> Και τότε hashtable μας σε κάθε κάδος πρόκειται να αποθηκεύσετε ένα
συνδεδεμένη λίστα των κόμβων.
Εμείς δεν κάνουμε γραμμική σχολαστικά εδώ.
Και έτσι, ώστε να συνδεθεί με την επόμενη στοιχείο στον κάδο, χρειαζόμαστε μια
struct node * επόμενο.
OK.
Έτσι, αυτό είναι ένας κόμβος μοιάζει.
>> Τώρα εδώ είναι η δήλωση της hashtable μας.
Είναι πρόκειται να έχει 16.834 κάδους.
Αλλά αυτός ο αριθμός δεν έχει τόση σημασία.
Και τέλος, θα πάμε να έχουν το καθολική μεταβλητή μέγεθος hashtable, η οποία
πρόκειται να ξεκινήσει ως μηδέν.
Και πρόκειται να παρακολουθείτε το πώς τα πολλά λόγια είναι στο λεξικό μας.
>> Έτσι, ας ρίξουμε μια ματιά στο φορτίο.
Παρατηρήστε ότι το φορτίο, επιστρέφει μια bool.
Θα επιστρέψει true αν ήταν επιτυχία φορτώνονται και ψεύτικες διαφορετικά.
Και παίρνει ένα const char * λεξικό, το οποίο είναι το λεξικό
ότι θέλουμε να ανοίξουμε.
Έτσι, αυτό είναι το πρώτο πράγμα που θα πάμε να κάνουμε.
>> Εμείς πάμε για να το fopen λεξικό για την ανάγνωση.
Και θα πάμε να πρέπει να κάνει βεβαιωθείτε ότι πέτυχε.
Έτσι, αν επιστρέψει NULL, τότε δεν είχαμε επιτυχία ανοίξτε το λεξικό.
Και εμείς πρέπει να επιστρέψει false.
Αλλά και αν υποτεθεί ότι το έκανε με επιτυχία ανοιχτό, τότε θα θέλετε να διαβάσετε το
λεξικό.
Γι 'αυτό κράτα looping μέχρι να βρούμε κάποια λόγος για να ξεφύγει από αυτόν τον βρόχο,
οποίο και θα δούμε.
Γι 'αυτό κράτα looping.
>> Και τώρα θα πάμε να malloc έναν μεμονωμένο κόμβο.
Και φυσικά χρειαζόμαστε στον αέρα ελέγξτε ξανά.
Έτσι, αν mallocing δεν πετύχει, τότε θέλουμε να ξεφορτώσουν κάθε κόμβο που
συνέβη με malloc πριν, κλείστε το λεξικό και επιστρέφει false.
Αλλά αγνοώντας ότι, αν υποτεθεί ότι καταφέρει, τότε θα θέλετε να χρησιμοποιήσετε fscanf
να διαβάσει μια λέξη από μας λεξικό στο κόμβο μας.
Έτσι, να θυμάστε ότι η καταχώρηση> λέξη είναι ο char ρυθμιστικό λέξη του μεγέθους Lenghth + 1
ότι θα πάμε για να αποθηκεύσετε τη λέξη μέσα
>> Έτσι fscanf πρόκειται να επιστρέψει 1, εφ ' καθώς ήταν σε θέση να με επιτυχία
διαβάστε μια λέξη από το αρχείο.
Αν συμβεί είτε ένα λάθος, ή εμείς φτάσετε στο τέλος του αρχείου,
δεν θα επιστρέψει 1.
Σε αυτή την περίπτωση δεν επιστρέφει 1, είμαστε επιτέλους να ξεφύγει από
αυτό το βρόχο, ενώ.
Έτσι, βλέπουμε ότι από τη στιγμή που έχουμε με επιτυχία διαβάστε μια λέξη σε
entry> λέξη, τότε θα πάμε σε αυτό λέξη χρησιμοποιώντας τη λειτουργία hash μας.
>> Ας ρίξουμε μια ματιά η συνάρτηση κατακερματισμού.
Έτσι, δεν πρέπει πραγματικά να το καταλάβουμε αυτό.
Και στην πραγματικότητα απλά τράβηξε αυτό το κλειδί λειτουργεί από το διαδίκτυο.
Το μόνο πράγμα που πρέπει να αναγνωρίσουμε είναι ότι αυτό παίρνει const char * λέξη.
Γι 'αυτό παίρνει ένα string ως πρώτη ύλη, και επιστρέφοντας ένα unsigned int ως έξοδο.
Έτσι ώστε να είναι όλα μια συνάρτηση κατακερματισμού, είναι παίρνει σε μια είσοδο και σας δίνει μια
δείκτη στο hashtable.
>> Παρατηρήστε ότι είμαστε moding από NUM_BUCKETS, έτσι ώστε η τιμή επέστρεψε
στην πραγματικότητα είναι ένας δείκτης στο hashtable και δεν δείκτη πέρα ​​από το
όρια της συστοιχίας.
Έτσι, δεδομένου ότι η λειτουργία, θα πάμε για τον κατακερματισμό της λέξης που διαβάζουμε το
λεξικό.
Και μετά θα πάμε να χρησιμοποιούν ότι hash για να εισάγετε το
είσοδο στο hashtable.
>> Τώρα hashtable hash είναι η τρέχουσα συνδεδεμένη λίστα στον πίνακα.
Και είναι πολύ πιθανό ότι είναι ακριβώς NULL.
Θέλουμε να εισάγετε την είσοδό μας κατά τη ξεκινώντας από αυτήν την συνδεδεμένη λίστα.
Και έτσι θα πάμε να διαθέτουν ισχύουσα μας σημείο εισόδου σε ό, τι το hashtable
επισημαίνει σήμερα με.
Και μετά θα πάμε για την αποθήκευση, στο hashtable κατά τη
hash, η τρέχουσα καταχώρηση.
Έτσι, αυτές οι δύο γραμμές εισάγουν επιτυχώς Η είσοδος κατά την έναρξη της
συνδεδεμένη λίστα σε αυτό το ευρετήριο στο hashtable.
>> Μόλις τελειώσετε με αυτό, γνωρίζουμε ότι βρήκαμε μια άλλη λέξη στο
λεξικό, και θα αυξήσετε και πάλι.
Έτσι κρατάμε το κάνουμε αυτό μέχρι fscanf τελικά επέστρεψε κάτι μη-1 στους
που το σημείο να θυμάστε ότι θα πρέπει να ελευθερώσετε την είσοδο.
Έτσι, εδώ έχουμε malloced μια καταχώρηση.
Και προσπαθήσαμε να διαβάσω κάτι από το λεξικό.
Και εμείς δεν διαβάστηκε επιτυχώς κάτι από το λεξικό, σε
ποια περίπτωση θα πρέπει να ελευθερώσετε την είσοδο ότι στην πραγματικότητα ποτέ δεν έχουν τεθεί σε η
Hashtable, και τελικά να σπάσουν.
>> Μόλις ξεσπάσει πρέπει να δούμε, επίσης, δεν έχουμε σπάσει, επειδή εκεί έξω
ήταν ένα σφάλμα κατά την ανάγνωση από το αρχείο;
Ή μήπως έχουμε ξεφύγει από γιατί φτάσει στο τέλος του αρχείου;
Αν υπήρχε κάποιο σφάλμα, τότε θέλουμε να επιστρέψει false.
Επειδή το φορτίο δεν τα κατάφερε.
Και στη διαδικασία θέλουμε να ξεφορτώσουν όλες οι λέξεις που διαβάζονται, και
κλείστε το αρχείο λεξικού.
>> Υποθέτοντας ότι τα κατάφερε, τότε απλά πρέπει ακόμα να κλείσει το λεξικό
αρχείο, και τελικά επιστρέφει αληθές, δεδομένου ότι φορτώθηκε με επιτυχία το λεξικό.
Και αυτό είναι για το φορτίο.
Έτσι ελέγχουν τώρα, δίνεται ένα φορτωμένο hashtable, πρόκειται να μοιάζει με αυτό.
Έτσι ελέγχετε, επιστρέφει μια bool, η οποία είναι πρόκειται να αναφέρουν αν το περάσει
σε char * λέξη, αν η περάσει το string είναι στο λεξικό μας.
Έτσι, αν υπάρχει στο λεξικό, εάν είναι σε hashtable μας,
θα επιστρέψει true.
Και αν δεν είναι, θα επιστρέψει false.
>> Λαμβάνοντας υπόψη αυτό πέρασε στη λέξη, είμαστε πρόκειται για τον κατακερματισμό της λέξης.
Τώρα, ένα σημαντικό πράγμα που πρέπει να αναγνωρίσουμε είναι ότι σε φορτίο ξέραμε ότι όλα τα
λέξεις θα πάμε να είναι πεζά.
Αλλά εδώ δεν είμαστε τόσο σίγουροι.
Αν ρίξουμε μια ματιά σε συνάρτηση κατακερματισμού μας, μας λειτουργία hash πραγματικότητα
είναι κάτω περίβλημα κάθε χαρακτήρα της λέξης.
Έτσι, ανεξάρτητα από την κεφαλαιοποίηση λέξη, hash λειτουργία μας είναι η επιστροφή
ο ίδιος δείκτης για ό, τι το κεφαλαιοποίηση είναι, όπως θα έπρεπε
Επέστρεψε για μια εντελώς πεζά εκδοχή της λέξης.
Εντάξει.
Αυτός είναι ο δείκτης μας είναι μέσα η Hashtable για αυτή τη λέξη.
>> Τώρα αυτό για βρόχο πρόκειται να επαναλήψεις πάνω από την συνδεδεμένη λίστα
ότι ήταν λόγω δείκτη.
Έτσι παρατηρούμε εμείς την προετοιμασία εισόδου να οδηγούν σε αυτό το δείκτη.
Εμείς πάμε για να συνεχίσει ενώ η είσοδος! = NULL.
Και να θυμάστε ότι η ενημέρωση του δείκτη σε συνδεδεμένη μας καταχώριση στη λίστα εισόδου => επόμενο.
Έτσι, έχουν τρέχον σημείο εισόδου μας στο το επόμενο στοιχείο στη συνδεδεμένη λίστα.
>> Έτσι, για κάθε καταχώρηση στη συνδεδεμένη λίστα, θα πάμε να χρησιμοποιήσετε strcasecmp.
Δεν είναι strcomp.
Επειδή για άλλη μια φορά, θέλουμε να κάνουμε τα πράγματα περίπτωση insensitively.
Έτσι χρησιμοποιούμε strcasecmp να συγκρίνουμε τις λέξη που διήλθε μέσω αυτού
λειτουργία κατά το λόγο ότι είναι σε αυτή την καταχώρηση.
Αν επιστρέφει μηδέν, αυτό σημαίνει ότι υπήρχε έναν αγώνα, οπότε θέλουμε να
return true.
Βρήκαμε επιτυχώς η λέξη hashtable μας.
>> Εάν δεν υπάρχει αντιστοιχία, τότε είμαστε πρόκειται να βρόχο και πάλι και να δούμε το
επόμενη καταχώρηση.
Και θα συνεχίσουμε looping, ενώ υπάρχει είναι καταχωρήσεις σε αυτήν την συνδεδεμένη λίστα.
Τι θα συμβεί αν σπάσει έξω από αυτό για βρόχο;
Αυτό σημαίνει ότι δεν κατάφερε να βρει μια καταχώρηση που συμφωνημένα αυτή τη λέξη, στην οποία περίπτωση
θα επιστρέψει false για να δείξει ότι μας hashtable δεν περιέχουν αυτή τη λέξη.
Και αυτό είναι μια επιταγή.
>> Έτσι, ας ρίξουμε μια ματιά στο μέγεθος.
Τώρα το μέγεθος θα είναι αρκετά απλή.
Από θυμάστε του φορτίου, για κάθε λέξη βρήκαμε, είμαστε αυξάνεται σε παγκόσμιο επίπεδο
μεταβλητό μέγεθος hashtable.
Έτσι, η λειτουργία μέγεθος είναι ακριβώς πρόκειται να επιστρέψει global μεταβλητή.
Και αυτό είναι όλο.
>> Τώρα επιτέλους, θα πρέπει να ξεφορτώσουν το λεξικό φορά κάνει τα πάντα.
Λοιπόν, πώς θα πάμε να το κάνουμε αυτό;
Εδώ είμαστε looping πάνω κουβάδες του πίνακα μας.
Έτσι, υπάρχουν NUM_BUCKETS κουβάδες.
Και για κάθε συνδεδεμένη λίστα σε μας hashtable, θα πάμε να στρέφονται
το σύνολο της συνδεδεμένης λίστας, ελευθερώνοντας κάθε στοιχείο.
>> Τώρα πρέπει να είμαστε προσεκτικοί.
Έτσι, εδώ έχουμε μια προσωρινή μεταβλητή ότι είναι αποθήκευση του δείκτη προς την επόμενη
στοιχείο στην συνδεδεμένη λίστα.
Και μετά θα πάμε στην ελεύθερη το τρέχον στοιχείο.
Πρέπει να είμαστε σίγουροι ότι κάνουμε αυτό από τότε που Δεν μπορούμε απλά να απελευθερώσει το τρέχον στοιχείο
και στη συνέχεια προσπαθήστε να μεταβείτε στον επόμενο δείκτη, δεδομένου ότι μόλις το έχουμε απελευθερωθεί,
η μνήμη καθίσταται άκυρη.
>> Πρέπει, λοιπόν, να κρατήσει γύρω από ένα δείκτη για το επόμενο στοιχείο, τότε μπορούμε να ελευθερώσουμε το
τρέχον στοιχείο, και στη συνέχεια μπορούμε να ενημερώσετε τρέχον στοιχείο μας να υποδεικνύουν
Το επόμενο στοιχείο.
Θα βρόχο ενώ υπάρχουν στοιχεία σε αυτή την συνδεδεμένη λίστα.
Θα το κάνουμε αυτό για όλα τα συνδεδεμένα καταλόγους στο hashtable.
Και όταν θα τελειώσετε με αυτό, έχουμε εντελώς ξεφόρτωσε το hashtable, και
τελειώσαμε.
Έτσι είναι αδύνατο για ξεφορτώσουν ποτέ να επιστρέψει false.
Και όταν τελειώσουμε, θα μόλις επιστρέψει αλήθεια.
>> Ας δώσει σε αυτό μια δοκιμή λύση.
Έτσι, ας ρίξουμε μια ματιά στο τι μας struct κόμβος θα μοιάσει.
Εδώ βλέπουμε θα πάμε να έχουν μια bool λέξη και ένας κόμβος struct * παιδιά
βραχίονα ΑΛΦΑΒΗΤΟ.
Έτσι, το πρώτο πράγμα που θα μπορούσε να είναι αναρωτιούνται, γιατί είναι ALPHABET
ed ορίζεται ως 27;
Λοιπόν, να θυμάστε ότι θα πάμε να χρειαστεί να χειρίζεται την απόστροφο.
Έτσι, αυτό πρόκειται να είναι κάπως από μια ειδική περίπτωση σε ολόκληρο το πρόγραμμα.
>> Τώρα θυμηθείτε πώς μια trie λειτουργεί πραγματικά.
Ας πούμε ότι είμαστε ευρετηρίαση τη λέξη "Γάτες". Στη συνέχεια, από τη ρίζα του trie,
θα πάμε να δούμε τα παιδιά σειρά, και θα πάμε να δούμε το
δείκτη που αντιστοιχεί στο γράμμα C. Έτσι, η οποία θα πρέπει να αναπροσαρμόζονται 2.
Έτσι, δεδομένου ότι, η βούληση να μας δώσει ένα νέο κόμβο.
Και τότε θα εργαστούν από αυτόν τον κόμβο.
>> Έτσι, δεδομένου ότι κόμβο, είμαστε για άλλη μια φορά πρόκειται να εξετάσουμε το φάσμα των παιδιών.
Και θα πάμε να δούμε δείκτη μηδέν να αντιστοιχεί στο Α γάτας.
Έτσι, τότε θα πάμε για να πάει σε αυτόν τον κόμβο, και δεδομένου ότι ο κόμβος θα πάμε
για να δούμε στο τέλος είναι ένα αντιστοιχεί στο T. Και, προχωρώντας σε αυτόν τον κόμβο,
Τέλος, έχουμε εντελώς κοίταξε μέσω του λόγου μας "γάτα". Και τώρα bool
λέξη έπρεπε να αναφέρει κατά πόσον Αυτό συγκεκριμένη λέξη είναι στην πραγματικότητα μια λέξη.
>> Έτσι, γιατί χρειαζόμαστε ότι η ειδική περίπτωση;
Λοιπόν, τι τη λέξη "καταστροφή" είναι στο λεξικό μας, αλλά η
λέξη "γάτα" δεν είναι;
Έτσι και ψάχνει να δει αν η λέξη "γάτα" είναι στο λεξικό μας, είμαστε
πρόκειται να δούμε με επιτυχία μέσα από οι δείκτες C-Α-Τ στην περιοχή του κόμβου.
Αλλά αυτό είναι μόνο επειδή καταστροφή έτυχε να δημιουργήσουν κόμβους στο δρόμο
από το C-Α-Τ, σε όλη τη διαδρομή προς το τέλος της λέξης.
Έτσι, bool λέξη χρησιμοποιείται για να δηλώσει αν η συγκεκριμένη θέση
πραγματικότητα δείχνει μια λέξη.
>> Εντάξει.
Έτσι, τώρα που ξέρουμε τι είναι trie πρόκειται να μοιάσει με, ας δούμε το
load για τη συνάρτηση.
Έτσι, το φορτίο πρόκειται να επιστρέψει μια bool για το αν επιτυχώς ή
ανεπιτυχώς φορτωθεί το λεξικό.
Και αυτό πρόκειται να είναι το λεξικό ότι θέλουμε να φορτώσει.
>> Έτσι, το πρώτο πράγμα είμαστε να κάνετε είναι να ανοίξετε μέχρι το συγκεκριμένο λεξικό για την ανάγνωση.
Και θα πρέπει να βεβαιωθείτε δεν είχαμε αποτύχει.
Έτσι, αν το λεξικό δεν ήταν άνοιξε με επιτυχία, θα επιστρέψει
null, στην οποία περίπτωση είμαστε πρόκειται να επιστρέψει false.
Αλλά και αν υποτεθεί ότι με επιτυχία ανοιχτεί, τότε μπορούμε πραγματικά να διαβάσετε
μέσω του λεξικού.
>> Έτσι το πρώτο πράγμα που θα πάμε να θέλετε να κάνετε είναι να έχουμε αυτό το
καθολική μεταβλητή root.
Τώρα ρίζα πρόκειται να είναι ένας κόμβος *.
Είναι η κορυφή του trie μας που είμαστε πρόκειται να την επανάληψη μέσα.
Έτσι, το πρώτο πράγμα που θα πάμε να θέλουμε να κάνουμε είναι να διαθέσει
μνήμη για την ρίζα μας.
Παρατηρήστε ότι είμαστε με τη calloc λειτουργία, η οποία είναι βασικά η ίδια
ως συνάρτηση malloc, εκτός του ότι είναι εγγυημένη για να επιστρέψει κάτι που είναι
εντελώς μηδενίζεται έξω.
Έτσι, αν χρησιμοποιούσαμε malloc, θα πρέπει να περάσουν από όλα από τους δείκτες σε μας
κόμβο, και βεβαιωθείτε ότι γιατί όλα αυτά είναι null.
Έτσι calloc θα το κάνει αυτό για εμάς.
>> Τώρα, όπως ακριβώς malloc, πρέπει να κάνουμε βέβαιος ότι η κατανομή ήταν πραγματικά
επιτυχής.
Αν αυτό δεν επέστρεψε null, τότε πρέπει να κλείσει ή να λεξικό
αρχείο και να επιστρέψει false.
Έτσι, υποθέτοντας ότι η κατανομή αυτή επιτυχής, θα πάμε να χρησιμοποιήσετε ένα κόμβο *
δρομέα για να μετακινηθείτε μέσα από trie μας.
Έτσι, οι ρίζες μας, ποτέ δεν πρόκειται να αλλάξει, αλλά θα πάμε να χρησιμοποιήσετε το δρομέα στην
πραγματικά να πάει από κόμβο σε κόμβο.
>> Έτσι, σε αυτό το βρόχο for διαβάζουμε μέσα από το αρχείο λεξικού.
Και είμαστε χρησιμοποιώντας fgetc.
Fgetc πρόκειται να αρπάξει ένα ενιαίο χαρακτήρα από το αρχείο.
Εμείς πάμε για να συνεχίσει την αρπαγή χαρακτήρες ενώ δεν φθάνουν το
τέλος του αρχείου.
>> Υπάρχουν δύο περιπτώσεις που πρέπει να χειριστεί.
Το πρώτο, αν ο χαρακτήρας δεν ήταν μια νέα γραμμή.
Έτσι ξέρουμε αν ήταν μια νέα γραμμή, στη συνέχεια, είμαστε έτοιμοι να προχωρήσουμε σε μια νέα λέξη.
Αλλά αν υποτεθεί ότι δεν ήταν μια νέα γραμμή, στη συνέχεια, εδώ θέλουμε να καταλάβουμε το
δείκτη θα πάμε στο δείκτη σε στο παιδικό πίνακα που
κοιτάξαμε πριν.
>> Έτσι, όπως είπα και πριν, θα πρέπει να ειδική περίπτωση απόστροφο.
Ανακοίνωση είμαστε με την τριμερή χειριστή εδώ.
Έτσι θα πάμε για να διαβάσετε αυτό που, αν ο χαρακτήρας που διαβάζονται ήταν
απόστροφο, τότε θα πάμε να θέσει index = "ΑΛΦΑΒΗΤΟ" -1, η οποία θα
είναι ο δείκτης 26.
>> Αλλιώς, αν δεν ήταν μια απόστροφο, εκεί θα πάμε για να ρυθμίσετε το δείκτη
ίση με c - a.
Έτσι θυμηθείτε πίσω από τα προηγουμένως p-ομάδες, c - a πρόκειται να μας το δώσει
αλφαβητική θέση του C. Έτσι, αν C είναι το γράμμα Α, αυτό θα
να μας δώσει δείκτη μηδέν.
Για το γράμμα Β, θα δώσει μας ο δείκτης 1, και ούτω καθεξής.
>> Έτσι, αυτό μας δίνει ο δείκτης στον παιδιά πίνακα που θέλουμε.
Τώρα, αν ο δείκτης είναι σήμερα ανενεργές τα παιδιά, αυτό σημαίνει ότι ένας κόμβος
δεν υπάρχει προς το παρόν από αυτό το μονοπάτι.
Γι 'αυτό και πρέπει να διαθέσουν ένας κόμβος για αυτή τη διαδρομή.
Αυτό είναι τι θα κάνουμε εδώ.
>> Έτσι θα πάμε να χρησιμοποιήσετε ξανά το calloc λειτουργία, έτσι ώστε να μην χρειάζεται να
μηδέν όλες τις κατευθύνσεις.
Και εμείς πάλι πρέπει να ελέγξετε calloc ότι δεν απέτυχε.
Αν calloc είχε αποτύχει, τότε θα πρέπει να ξεφορτώσουν τα πάντα, κλείστε μας
λεξικό, και να επιστρέψει false.
Έτσι, υποθέτοντας ότι δεν αποτύχει, τότε Αυτό θα δημιουργήσει ένα νέο παιδί για μας.
Και μετά θα πάμε σε αυτό το παιδί.
Δρομέας μας θα επαναλάβει προβλέπονται γι 'αυτό το παιδί.
>> Τώρα, αν αυτό δεν ήταν null για να αρχίσει με, Στη συνέχεια ο δρομέας μπορεί να επαναλάβει μόνο
προβλέπονται γι 'αυτό το παιδί, χωρίς στην πραγματικότητα χρειάζεται να διαθέσει τίποτα.
Αυτή είναι η περίπτωση όπου αρχικά έγινε κατανέμει τη λέξη "γάτα". Και
αυτό σημαίνει ότι όταν πάμε να διαθέσει "Καταστροφή", δεν χρειάζεται να δημιουργήσετε
κόμβων για το C-Α-Τ και πάλι.
Έχουν ήδη υπάρχουν.
>> Τι είναι αυτό το άλλο;
Αυτή είναι η κατάσταση όπου το c ήταν backslash n, όπου c ήταν μια νέα γραμμή.
Αυτό σημαίνει ότι έχουμε επιτυχία ολοκλήρωσε μια λέξη.
Τώρα τι θέλουμε να κάνουμε όταν ολοκλήρωσε με επιτυχία μια λέξη;
Εμείς πάμε για να χρησιμοποιήσετε αυτό το πεδίο λέξη εσωτερικό του struct node μας.
Θέλουμε να ορίσετε ότι για να είναι αληθινό.
Έτσι ώστε να δείχνει ότι αυτός ο κόμβος υποδηλώνει μια επιτυχή
λέξη, μια πραγματική λέξη.
>> Τώρα που ότι για να είναι αληθινό.
Θέλουμε να επαναφέρετε τον κέρσορα μας στο σημείο στην αρχή του trie πάλι.
Και τέλος, αυξήσετε λεξικό μας μέγεθος, δεδομένου ότι βρήκε άλλη δουλειά.
Έτσι θα πάμε για να συνεχίσουμε να το κάνουμε αυτό, ανάγνωση στο χαρακτήρα προς χαρακτήρα,
κατασκευή νέων κόμβων στην trie μας και για κάθε λέξη στο λεξικό, μέχρις ότου
φτάνουμε C! = ΕΟΦ, στον οποίο περίπτωση που ξεφύγει από το αρχείο.
>> Τώρα υπάρχουν δύο περιπτώσεις σύμφωνα με που θα μπορούσε να έχει χτυπήσει ΕΟΦ.
Το πρώτο είναι αν υπήρξε ένα λάθος ανάγνωση από το αρχείο.
Έτσι, αν υπήρχε ένα λάθος, Πρέπει να κάνουμε το τυπικό.
Ξεφορτώνουν τα πάντα, κοντά το αρχείο, επιστρέφει false.
Υποθέτοντας ότι δεν υπήρχε κάποιο σφάλμα, ότι απλά σημαίνει ότι χτύπησε πραγματικά το τέλος του
το αρχείο, στην οποία περίπτωση, κλείνουμε την αρχείο και να επιστρέψει αληθές, δεδομένου ότι
φορτωθεί με επιτυχία λεξικό σε trie μας.
>> Έτσι τώρα ας ελέγξει έξω έλεγχο.
Κοιτάζοντας τη λειτουργία ελέγχου, βλέπουμε ο έλεγχος πρόκειται να επιστρέψει μια bool.
Επιστρέφει true αν αυτή η λέξη ότι είναι που διαβιβάζονται είναι σε trie μας.
Επιστρέφει false διαφορετικά.
Λοιπόν, πώς να προσδιορίσετε αν αυτή η λέξη είναι trie μας;
>> Βλέπουμε εδώ ότι, όπως και πριν, θα πάμε να χρησιμοποιήσετε το δρομέα για να μετακινηθείτε
μέσω trie μας.
Τώρα εδώ θα πάμε για να μετακινηθείτε σε ολόκληρη τη λέξη μας.
Έτσι επανάληψη πάνω από τη λέξη είμαστε το παρελθόν, θα πάμε για τον προσδιορισμό της
δείκτη στην συστοιχία των παιδιών που αντιστοιχεί στη λέξη βραχίονα Ι. Έτσι, αυτό
πρόκειται να δούμε ακριβώς όπως φορτίο, όπου αν λέξη [i]
είναι μια απόστροφο, τότε θέλουμε να χρησιμοποιήσει δείκτη «αλφάβητο» - 1.
Επειδή διαπιστώσαμε ότι είναι όπου θα πάμε για να αποθηκεύσετε
αποστρόφους.
>> Αλλιώς θα πάμε να χρησιμοποιούν δύο κάτω λέξη βραχίονα Ι. Έτσι, να θυμάστε ότι η λέξη μπορεί
έχουν αυθαίρετα κεφαλαιοποίηση.
Και έτσι θέλουμε να βεβαιωθείτε ότι είμαστε χρησιμοποιώντας έναν πεζό έκδοση των πραγμάτων.
Και στη συνέχεια, αφαιρέστε από το ότι «ένα» για μια φορά και πάλι να μας δώσει την αλφαβητική
θέση αυτού του χαρακτήρα.
Έτσι, αυτό πρόκειται να είναι ευρετήριό μας στον πίνακα των παιδιών.
>> Και τώρα, αν ο δείκτης στα παιδιά πίνακας είναι μηδενική, αυτό σημαίνει ότι
δεν μπορεί πλέον να συνεχίσει την επανάληψη κάτω trie μας.
Αν αυτή είναι η περίπτωση, αυτή η λέξη δεν μπορεί να ενδεχομένως να είναι σε trie μας.
Δεδομένου ότι αν ήταν, ότι θα σημαίνει ότι θα υπάρξει ένα μονοπάτι
μέχρι αυτή τη λέξη.
Και ποτέ δεν θα αντιμετωπίσετε null.
Έτσι αντιμετωπίζουν μηδενική, επιστρέφει false.
Η λέξη δεν υπάρχει στο λεξικό.
Αν δεν ήταν μηδενική, τότε είμαστε πρόκειται να συνεχίσει την επανάληψη.
>> Έτσι θα πάμε εκεί έξω δρομέα στο σημείο σε αυτό το συγκεκριμένο
κόμβο στο εν λόγω δείκτη.
Κρατάμε το κάνουμε αυτό σε όλη ολόκληρη η λέξη, υποθέτοντας
εμείς ποτέ δεν χτύπησε null.
Αυτό σημαίνει ότι ήμασταν σε θέση να περάσει ολόκληρη η λέξη και να βρει
ένας κόμβος στην προσπάθειά μας.
Αλλά δεν είμαστε αρκετά γίνονται ακόμα.
>> Δεν θέλουμε απλά να επιστρέψουν αλήθεια.
Θέλουμε να επιστρέψουμε κέρσορα> λέξη.
Από το θυμηθείτε και πάλι, είναι "γάτα" δεν είναι στο λεξικό μας, και "καταστροφή"
είναι, τότε θα έχουμε επιτυχία μέσα από τη λέξη «γάτα». Αλλά δρομέα
λέξη θα είναι ψευδής και δεν είναι αλήθεια.
Έτσι επιστρέφουμε λέξη δρομέα για να δείξει αν ο κόμβος αυτός είναι στην πραγματικότητα μια λέξη.
Και αυτό είναι για έλεγχο.
>> Έτσι, ας ελέγξει έξω μέγεθος.
Έτσι, το μέγεθος θα είναι αρκετά εύκολο δεδομένου ότι, θυμηθείτε το φορτίο, είμαστε
προσαύξηση του μεγέθους λεξικό για κάθε λέξη που συναντάμε.
Έτσι, το μέγεθος είναι ακριβώς πρόκειται να επιστρέψει λεξικό μέγεθος.
Και αυτό είναι όλο.
>> Έτσι, τέλος, έχουμε ξεφορτώσουν.
Έτσι ξεφορτώσουν, θα πάμε να χρησιμοποιήσετε ένα αναδρομική συνάρτηση για να κάνει πραγματικότητα όλα
των εργασιών μας.
Έτσι, η λειτουργία μας πρόκειται να να κληθούν εκφορτωτής.
Τι αποφόρτισης πρόκειται να κάνει;
Βλέπουμε εδώ ότι ο εκφορτωτής πρόκειται να επαναλάβετε σε όλα τα παιδιά σε
Αυτό το συγκεκριμένο κόμβο.
Και αν ο κόμβος παιδί δεν είναι null, τότε θα πάμε να
ξεφορτώνουν τον κόμβο παιδί.
>> Έτσι, αυτό είναι που αναδρομικά ξεφορτώσουν όλα τα παιδιά μας.
Μόλις είμαστε σίγουροι ότι όλα τα παιδιά μας έχουν εκφορτωθεί, τότε
μπορούμε να απελευθερωθούμε, έτσι ξεφορτώνουν τους εαυτούς μας.
Αυτό θα λειτουργήσει αναδρομικά ξεφορτώσουν το σύνολο trie.
Και στη συνέχεια, μόλις γίνει αυτό, μπορούμε απλά να επιστρέψουμε αλήθεια.
Ξεφορτώσουν δεν μπορεί να αποτύχει.
Εμείς απλά απελευθερώνοντας τα πράγματα.
Συνεπώς, μόλις τελειώσαμε την απελευθέρωση τα πάντα, να επιστρέψει αλήθεια.
Και αυτό είναι όλο.
Το όνομά μου είναι Rob.
Και αυτό ήταν ορθογράφος.
>> [Παίζει μουσική]