>> SPEAKER 1: La oss gi denne løsningen en prøve.
Så la oss ta en titt på hva våre Struct node vil se ut.
Her ser vi at vi kommer til å ha en Bool Word og en Struct node stjerne
Barn brakett alfabetet.
Så første du kanskje lurer på, hvorfor er alfabetet hash definert som 27?
Vel, husk at vi kommer til å trenge å være håndtering av apostrof, så
som kommer til å være litt av en spesiell tilfelle i hele dette programmet.
>> OK, nå, husker hvordan en Trie faktisk fungerer.
La oss si at vi indekserer ordet katter, deretter fra roten av vårt Trie,
vi kommer til å se på barne matrise, og vi kommer til å se på
indeks som tilsvarer bokstaven C. Så som ville være index to.
Så gitt at, vil det gi oss en ny node, og så får vi
arbeide fra den noden.
>> Så gitt at node, er vi nok en gang kommer til å se på Barne-array,
og vi kommer til å se på indeksen null for å svare til en på katten.
Så da skal vi gå til den noden, og gitt at node, skal vi
å se på indeksen som tilsvarer til T. Og går videre til den noden,
endelig, har vi helt sett gjennom vårt ord Cat, og nå Bool
Word er ment å indikere om dette gitt ord er faktisk et ord.
>> Så hvorfor trenger vi den spesielle saken?
Vel, hva om ordet katastrofe er i vår ordbok, men
ordet katt er ikke?
Så i jakt for å se om ordet katt er i vår ordbok, kommer vi til å
hell ser gjennom indeksene C-A-T og nå en node, men det er
bare fordi katastrofen skjedde med lage noder på vei fra C-A-T all
helt til slutten av ordet.
Så Bool Word brukes indikere om denne spesielle beliggenheten faktisk
indikerer et ord.
>> Ok, så nå som vi vet hva en Trie kommer til å se ut, la oss se
på Load funksjon.
Så Load kommer til å returnere en Bool for om vi lykkes eller
uten hell lastet ordbok og dette kommer til å være ordlisten
at vi ønsker å laste.
Så det første vi kommer til å gjøre er å åpne opp at ordboken for lesing.
Vi må sørge for at vi ikke mislykkes, slik at hvis det ikke var ordboken
hell åpnet, vil den returnere Nei, i så fall vi kommer til å
returnere False.
Men forutsatt at det med hell åpnet, så kan vi faktisk lese
gjennom ordlisten.
>> Så det første vi kommer til å ønsker å gjøre er vi har dette
global variabel rot.
Nå er roten kommer til å være en node stjerne.
Det er toppen av vår Trie at vi er kommer til å bli itera gjennom.
Så det første vi kommer til å ønske å gjøre er å allokere minne for vår rot.
>> Legg merke til at vi bruker den Calloc funksjon, som er utgangspunktet det samme
som malloc funksjon, bortsett fra det er garantert å returnere noe som er
helt nullet ut.
Så hvis vi brukte malloc, ville vi trenger å gå gjennom alle pekere i vår
node og sørge for at de er alle null.
Så Calloc vil gjøre det for oss.
>> Nå, akkurat som malloc, trenger vi å gjøre sikker på at tildeling er faktisk
vellykket.
Hvis dette returneres null, så vi må lukke vår ordbok
fil og returnere False.
Så forutsatt at tildelingen ble vellykket, kommer vi til å bruke en node
stjerners Cursor å iterere gjennom vår Trie.
Så vår root kommer aldri til å forandre seg, men vi kommer til å bruke markøren til
faktisk gå fra node til node.
>> Greit, så i dette For loop, er vi lese gjennom ordlistefilen,
og vi bruker på fgetc.
Så fgetc kommer til å ta en enkelt karakter fra filen.
Vi kommer til å fortsette å gripe tegn, mens vi ikke når
slutten av filen, slik at det er to tilfeller vi trenger for å håndtere.
Den første, hvis karakter ikke var en ny linje, så vi vet ikke om det var en ny
linje, så vi er i ferd med å gå videre til et nytt ord.
Men forutsatt at det ikke var en ny linje, deretter her, ønsker vi å finne ut av
indeksen vi kommer til å indeksere inn i Barn array som
vi så på før.
>> Så som jeg sa før, må vi spesielt tilfelle apostrof.
Legg merke til at vi bruker den trefoldig operatøren her, så vi kommer til å lese
dette som om karakteren vi leste i var en apostrof, så vi kommer til å
satt indeks lik alfabetet minus 1, som vil være indeksen 26..
Else, hvis det ikke var en apostrof, så vi kommer til å sette indeksen
lik c minus en.
Så husker tilbake fra forrige p-apparater, c minus en kommer til å gi oss
alfabetisk plassering av c, så hvis c er bokstaven A, vil dette
gi oss indeks null.
For bokstaven B, vil det gi oss indeksen 1, og så videre.
>> Så dette gir oss indeksen inn i Barn array som vi ønsker.
Nå, hvis denne indeksen er for tiden null i Barna array, betyr det at
en node for øyeblikket ikke eksisterer fra den veien, så vi trenger å tildele en
node for denne banen.
Det er det vi gjør her.
Så vi kommer til, igjen, bruker Calloc funksjon slik at vi ikke har
til null ut alle tips, og vi, igjen, må du sjekke at Calloc
ikke mislykkes.
Hvis Calloc gjorde mislykkes, så vi trenger å lesse alt, lukke våre
ordbok, og returnere False.
>> Så forutsatt at det ikke mislykkes, da Dette vil skape et nytt barn for oss,
og da vil vi gå til det barnet.
Vår markøren vil iterere ned til at barnet.
Nå, hvis dette ikke var null til å begynne med, deretter markøren kan bare iterere
ned til at barnet uten å faktisk å måtte fordele noe.
Dette er tilfelle hvor vi først skjedd å fordele ordet katt, og
det betyr at når vi går å tildele katastrofe, trenger vi ikke å skape
noder for C-A-T på nytt.
De som allerede eksisterer.
>> OK, så hva er dette Else?
Dette er den tilstand hvor c var backslash n, der c var en ny linje.
Dette betyr at vi har lykkes gjennomført et ord.
Nå, hva vi ønsker å gjøre når vi fullført et ord?
Vi kommer til å bruke dette ordet feltet innsiden av våre Struct node.
>> Vi ønsker å sette det til True, slik at indikerer at denne noden indikerer en
vellykket ord en faktisk ord.
Nå satt det til True.
Vi ønsker å tilbakestille vår markøren til punkt til begynnelsen av den Trie nytt.
Og til slutt, øke vår ordbok størrelse siden vi fant et annet ord.
>> Greit, så vi kommer til å fortsette å gjøre at lesing i karakter etter
karakter, bygging av nye noder i vår Trie og for hvert ord i
ordbok, før vi endelig nå c tilsvarer EOF, i så fall, vi bryte
ut av filen.
Nå er det to tilfeller i henhold som vi kan ha truffet EOF.
Den første er om det var en feil lesing fra filen, så hvis det var
en feil, må vi gjøre den typiske losse alt, lukke filen,
returnere False.
Antar det ikke var en feil, at betyr bare at vi faktisk traff slutten av
filen, og i så fall, vi lukker fil og returnere sant siden vi
lastet ordlisten inn i vår Trie.
>> Greit, så la oss nå sjekk ut Check.
Ser på Check-funksjonen, ser vi at Check kommer til å returnere en Bool.
Den returnerer Sann hvis dette ordet at det er blir vedtatt er i vår Trie.
Den returnerer False ellers.
>> Så hvordan skal vi finne ut om dette ordet er i vår Trie?
Vi ser her at, akkurat som før, vi kommer til å bruke markøren til å reagere
gjennom vår Trie.
Nå, her kommer vi til å reagere over vår hele ord.
Så itera over ordet vi er passert, kommer vi til å bestemme
indeksen inn Barna array som tilsvarer ordet brakett jeg.
Så dette kommer til å se ut akkurat som Load, der hvis ordet brakett jeg er en
apostrof, da vi ønsker å bruke indeksen alfabetet minus ett fordi vi bestemt
det er der vi skal til å lagre apostrofer.
>> Else vi kommer til å bruke tolower Ordet brakett jeg.
Så husk at ord kan ha vilkårlig kapitalisering, og så vi
ønsker å sørge for at vi bruker inn en liten versjon av ting.
Og så trekke fra det med små bokstaver en til, nok en gang, gi oss
alfabetisk stilling av det tegnet.
Så det kommer til å bli vår hovedside inn i Children array.
>> Og nå, hvis at indeksen inn Barna matrise er null, betyr det at vi
kan ikke lenger fortsette itera ned vår Trie.
Hvis det er tilfelle, dette ordet kan ikke muligens være i vår Trie, siden hvis det
ble, som ville bety at det ville være en sti ned til det ordet, og du ville
aldri støter på null.
Så møter null, returnerer vi False.
Ordet er ikke i ordboken.
Hvis det ikke var null, så vi kommer til å fortsetter itera, så vi kommer
å oppdatere vår markøren til å peke på at spesiell knute på at indeksen.
>> Så vi fortsette med det hele hele ordet.
Antar vi aldri treffer null, det betyr vi var i stand til å komme gjennom hele
verden og finne en node i vår Trie, men vi er ikke helt ferdig ennå.
Vi ønsker ikke å bare returnere true.
Vi ønsker å returnere markøren feil ord siden, husker igjen, hvis katten er ikke
i vår ordbok og katastrofe er, da vil vi lykkes å komme gjennom
ordet katt, men markøren ord vil være False og ikke sant.
Så vi tilbake markøren ord for å indikere vidt denne noden er faktisk et ord,
og det er det for sjekk.
>> Så la oss sjekke ut størrelse.
Så størrelse kommer til å være ganske lett siden, husker i Load, er vi
økes ordbok størrelse for hvert ord som vi møter.
Så størrelse er bare kommer til å returnere ordbok størrelse, og det er det.
>> Greit, så til slutt, har vi losse.
Så losse, kommer vi til å bruke en rekursiv funksjon å faktisk gjøre alt
av arbeidet for oss, så vår funksjon kommer til å bli kalt losser.
Hva er losser kommer til å gjøre?
Vi ser her at losser kommer til å iterere over alle barna på
denne spesielle noden, og dersom barnet Noden er ikke null, så vi kommer til å
losse barnet node.
>> Så dette kommer til å rekursivt losse alle våre barn.
Når vi er sikker på at alle våre barn har blitt losset, så vi
kan frigjøre oss, så losse oss selv.
Så dette vil rekursivt losse Hele Trie, og deretter en gang det er
gjort, kan vi bare returnere true.
Losse kan ikke mislykkes, vi er bare frigjøre ting.
Så når vi er ferdig å frigjøre alt, returnere true.
Og det er det.
Mitt navn er Rob, og dette var [uhørbart].