>> ZVUČNIK 1: Dajmo ovo rješenje pokušati.
Tako ćemo pogledati što naši Struct node će izgledati.
Ovdje vidimo da ćemo imati Bool Word i Struct čvor zvijezda
Djeca zagrada abecedu.
Dakle, prva stvar koju možda se pitate, zašto je abeceda hash definira kao 27.?
Pa, sjetite se da ćemo morati biti rukovanja apostrof, pa
to će biti nešto posebno slučaj u cijelom ovom programu.
>> OK, sada, sjetite se kako je Trie zapravo radi.
Recimo da smo indeksiranje Riječ mačke, zatim iz korijena našeg trie,
idemo gledati na djecu polje, a mi ćemo gledati na
indeks koji odgovara na pisma C. Tako da bi indeks dva.
Dakle, s obzirom da je, da će nam dati novi čvor, a onda ćemo
rade od tog čvora.
>> Dakle, s obzirom da je čvor, mi smo još jednom ide gledati na djecu polje,
a mi ćemo gledati na indeks nula odgovarati A Cat.
Pa onda ćemo ići u tom čvoru, as obzirom da je čvor, idemo
gledati na indeksu koji odgovara na T. i kreće na tom čvoru,
Konačno, potpuno smo gledali kroz naše riječi Cat, a sada Bool
Riječ je trebao naznačiti da li to dao riječ je zapravo riječ.
>> Pa zašto nam je potrebna da poseban slučaj?
Pa, što ako je riječ katastrofa je u našem rječniku, ali
Riječ mačka nije?
Dakle, u potrazi za vidjeti ako je riječ mačka je u našem rječniku, idemo u
Uspješno gledati kroz indekse C--T i doći čvor, ali to je
samo zato što je katastrofa dogodilo stvoriti čvorove na putu iz C-A-T sve
način kraj riječi.
Dakle Bool Riječ je korišten ukazuju li ovo posebno mjesto zapravo
ukazuje na riječ.
>> U redu, tako da sada znamo što Trie će izgledati, pogledajmo
na funkciju opterećenja.
Dakle Load će vratiti Bool za li uspješno ili
neuspješno učitava rječnik i ovo će biti rječnik
da želimo učitati.
Dakle, prvo što ćemo učiniti je otvoriti do tog rječnik za čitanje.
Moramo se pobrinuti da ne uspiju, pa ako rječnik nije bio
uspješno je otvorio, ona će se vratiti No, u tom slučaju ćemo
vratiti False.
No, uz pretpostavku da je uspješno otvorila, onda zapravo možemo čitati
kroz rječniku.
>> Dakle, prva stvar koju ćemo želite učiniti je da imamo ovo
Globalna varijabla korijena.
Sada, korijen će biti čvor zvijezda.
To je vrh naše trie da smo će biti iterating putem.
Dakle, prva stvar koju ćemo željeti to je alocirati memoriju za naš korijen.
>> Uočite da smo pomoću Calloc funkcija, što je u osnovi isti
kao funkcija malloc, osim što je jamčiti da se vrati nešto što je
potpuno nulu out.
Dakle, ako ćemo koristiti malloc, mi bi trebao proći kroz sve naputke u našim
čvora i uvjerite se da oni su svi null.
Dakle Calloc će to učiniti za nas.
>> Sada, baš kao i malloc, moramo napraviti sigurni da je dodjela je zapravo
uspješna.
Ako se to vrati null, onda smo morati zatvoriti naš rječnik
podnijeti i vratiti False.
Dakle, pod pretpostavkom da je dodjela uspješna, idemo koristiti čvor
glumit kursor na ponoviti kroz naše trie.
Tako je naš korijen nikad neće promijeniti, ali ćemo koristiti kursor na
zapravo ići od čvora do čvora.
>> U redu, tako da u ovom Za petlju, mi smo čitanja kroz rječniku datoteku,
i mi koristimo na fgetc.
Dakle fgetc će zgrabite jednu lik iz spisa.
Mi ćemo nastaviti grabbing likovi, dok se ne postigne
kraju datoteke, tako da postoje dva slučaja moramo nositi.
Prvo, ako nije lik Nova linija, tako da znamo je li to nova
liniju, onda ćemo da prelazak na novu riječ.
No, pod pretpostavkom da nije nova linija, a zatim ovdje, želimo shvatiti
Indeks ćemo indeksa u Djeca u nizu koji
Gledali smo i prije.
>> Dakle, kao što sam već rekao, moramo Poseban slučaj apostrof.
Obavijest koristimo ternarnom operatera ovdje, pa ćemo čitati
ovo kao da je lik čitamo u bilo apostrof, onda ćemo
postaviti indeks jednak abeceda minus 1, koja će se indeks 26.
Inače, da nije bilo apostrof, onda ćemo postaviti indeksa
jednaka c minus.
Pa sjetite se vratio iz prethodnih p seta, c minus će nam dati
abecedni položaj c, pa ako c je pismo, to će
daju nam indeks nula.
Za slovom B, to će dati us indeks 1, i tako dalje.
>> Dakle, to nam daje indeks u Djeca niz koji želimo.
Sada, ako je ovaj indeks je trenutno nula u Djeca polje, to znači da
čvora trenutno ne postoji iz taj put, tako da ćemo morati izdvojiti
čvor za taj put.
To je ono što mi radimo ovdje.
Tako ćemo, opet, koristite Calloc funkcija, tako da nemamo
na nulu iz sve upućuje, a mi, opet, trebate provjeriti da Calloc
ne uspjeti.
Ako Calloc doživio neuspjeh, onda moramo iskrcati sve, zatvoriti
rječnik, i vratiti False.
>> Dakle, pod pretpostavkom da ne uspiju, onda to će stvoriti novo dijete za nas,
a onda ćemo ići u tom djetetu.
Naš kursor će ponoviti do tog djeteta.
Sada, ako to nije bilo null za početak, zatim kursor mogu samo ponoviti
do tog djeteta, bez zapravo moraju izdvojiti ništa.
Ovo je slučaj gdje smo prvi put se dogodilo izdvojiti riječ mačku, a
to znači da kad idemo na dodjelu Katastrofa, ne trebamo stvoriti
čvorovi za C-A-T opet.
Oni već postoje.
>> OK, pa što je ovo drugo?
To je stanje u kojem je c backslash n, gdje je c je nova linija.
To znači da smo uspješno završio je riječ.
Sada, što želimo učiniti, kada smo Uspješno završen riječ?
Mi ćemo koristiti ove riječi polje unutar našeg struct čvor.
>> Želimo postaviti da bi Istina, tako da označava da se ovaj čvor ukazuje
uspješna Riječ stvarna riječ.
Sada, postavite da na True.
Želimo resetirati našu kursor na točku na početku trie ponovno.
I na kraju, povećava, naš rječnik veličina jer smo pronašli još jednu riječ.
>> U redu, tako da ćemo nastaviti raditi da, čitanje karaktera od strane
karakter, izgradnje novih čvorova u naš Trie i za svaku riječ u
rječnik, dok konačno ne dođete do c jednaka EOF, u tom slučaju, lomimo
iz datoteke.
Sada, postoje dva slučaja pod što smo mogli pogoditi EOF.
Prvi je, ako je došlo do pogreške čitanje iz spisa, pa ako postoji
pogreška, moramo napraviti tipični iskrcati sve, zatvorite datoteku,
vratiti False.
Pod pretpostavkom da nije bilo pogrešaka, da samo znači da mi zapravo pogodio kraj
file, u kojem slučaju, možemo zatvoriti podnijeti i vratiti True, jer smo
Uspješno učita rječnik u našu trie.
>> Dobro, sad idemo check out provjera.
Gledajući na check funkciju, vidimo Provjerite da će se vratiti bool.
To vraća True ako je to riječ koja je bude donesen je u našoj trie.
To vraća False drugačije.
>> Pa kako ćemo utvrditi je li ova riječ u našem trie?
Ovdje vidimo da je, baš kao i prije, ćemo koristiti kursor se ponoviti
kroz naše trie.
Sada, ovdje, idemo ponoviti tijekom cijele naše riječi.
Dakle iterating iznad riječi smo prošlo, idemo utvrditi
indeks u djece niz koji odgovara riječi nosača i.
Dakle, to će izgledati točno kao Load, gdje li riječ bracket sam je
apostrof, onda želimo koristiti indeksa abeceda minus jedan, jer smo utvrdili
to je mjesto gdje idemo pohraniti apostrofe.
>> Inače ćemo koristiti tolower Riječ nosač ja.
Dakle, ne zaboravite da je riječ može imati proizvoljan kapitalizacije, i tako smo
želite biti sigurni da smo pomoću mala verzija stvari.
A onda oduzmite od toga malim slovima da, još jednom, da nam daju
abecedni položaj tog lika.
Tako da će to biti naš index Djeca u nizu.
>> A sad, ako je indeks u djece Niz je nula, da mi znači
više ne može nastaviti iterating niz naše trie.
Ako je to slučaj, ta riječ ne može možda se u našem trie, jer ako je to
su, to bi značilo da ne bi bilo Put prema dolje na tu riječ, a što bi
Nikada se susresti null.
Tako nailazi null, vraćamo False.
Riječ je nema u rječniku.
Da nije bilo null, onda ćemo nastaviti Ponavljanje, pa idemo
ažurirati naš pokazivač ukazati na to Posebno čvor u tom indeksu.
>> Tako smo zadržati taj događaj u cijeloj Cijeli riječ.
Pod pretpostavkom da nikada pogodio null, to znači bili smo u mogućnosti da se kroz cijeli
Svijet i naći čvor u našoj trie, ali nismo sasvim gotova.
Mi ne želimo samo vratiti True.
Želimo da se vrati kursor pogrešci riječ jer, ne zaboravite opet, ako je mačka nije
u naš rječnik i katastrofa, onda ćemo uspješno proći
Riječ mačka, ali kursor riječ će biti lažna i nije istina.
Tako smo se vratili kursor riječ za označavanje je li to čvor je zapravo riječ,
i to je to za provjeru.
>> Tako ćemo provjeriti Veličina.
Dakle, veličina će biti prilično jednostavan jer, ne zaboravite, uz punjenje, mi smo
povećavanjem rječnik veličinu svaka riječ koju susrećemo.
Dakle, veličina tek će se vratiti rječnik veličina, i to je to.
>> U redu, tako da na kraju, moramo iskrcati.
Dakle zasićuju ćemo koristiti rekurzivna funkcija zapravo učiniti sve
dio posla za nas, tako da naše funkcije će se zvati desiliranje.
Što se desiliranje će učiniti?
Ovdje vidimo da desiliranje će ponoviti tijekom sva djeca na
Ovaj čvor, a ako je dijete čvora nije NULL, onda ćemo
iskrcati dijete čvora.
>> Dakle, ovo će rekurzivno iskrcati sve naše djece.
Jednom smo bili sigurni da su sva djeca su iskrcali, onda smo
možemo osloboditi, tako rasteretiti sebe.
Dakle, ovo će rekurzivno iskrcati Cijeli Trie, a zatim nakon što je to
učinjeno, mi samo možemo vratiti True.
Iskrcati se ne može uspjeti, da smo Samo oslobađajući stvari.
Dakle, nakon što smo gotovi oslobađajući sve, vratiti True.
I to je to.
Moje ime je Rob, a to bio [nečujan].