>> GARSIAKALBIS 1: Duokime šis sprendimas pabandyti.
Taigi galime pažvelgti, kas mūsų išvaizdą Struct mazgas atrodys.
Čia mes matome, mes ketiname turėti Bool Žodis ir struct mazgas žvaigždė
Vaikai laikiklis abėcėlę.
Taigi pirmas dalykas, jums gali būti įdomu, kodėl abėcėlė maišos apibrėžiamas kaip 27?
Na, nepamirškite, kad mes ketiname reikia reikia tvarkyti kabutes, todėl
tai bus šiek tiek ypatingą atveju visoje šioje programoje.
>> Gerai, dabar prisimenu, kaip Trie iš tiesų veikia.
Tarkime, mes indeksavimo žodį kačių, tada iš mūsų TRIE šaknis,
mes ketiname pažvelgti į vaikų masyvas, ir mes ketiname pažvelgti į
indeksas, kuris atitinka raide C. Taigi, kad būtų du indeksas.
Taigi, atsižvelgiant į tai, kad duos mums naujas mazgas, ir tada mes
dirbti nuo tos mazgas.
>> Taigi, atsižvelgiant į tai, mazgas, mes dar kartą ketiname pažvelgti į vaikų masyvas,
ir mes ketiname pažvelgti į nulinę indekso atitikti kačių A.
Taigi mes ketiname eiti į tą mazgą, ir atsižvelgiant į tai, kad mazgas, mes ketiname
pažvelgti į indeksą, kuris atitinka į T. juda į tą mazgą,
pagaliau, mes turime visiškai atrodė mūsų žodis katė, o dabar bool
Žodis turėtų nurodyti, ar turint mintyje tai žodis iš tikrųjų žodis.
>> Tad kodėl mes turime tą ypatingą bylą?
Na, ką daryti, jei žodis katastrofa yra mūsų žodyne, tačiau
žodis katė yra ne?
Taigi, pažiūrėkite, jei žodis katė mūsų žodyną, mes ketiname
sėkmingai ieškoti per indeksus C-T ir pasiekti viršūnę, bet tai
tik todėl, kad katastrofa atsitiko sukurti mazgų kelyje iš C-A-T visi
Kelias į žodžio pabaigą.
Taigi loginis žodis yra naudojamas nurodyti, ar tai pirma vieta tikrai
nurodo žodį.
>> Gerai, kad dabar, kad mes žinome, ką Trie ketina atrodyti, pažvelkime
esant apkrovai funkcija.
Taigi keliamoji ketina grįžti bool Dėl klausimo, ar mes sėkmingai arba
nesėkmingai pakrautas žodynas ir tai bus žodynas
kad mes norime įkelti.
Taigi pirmas dalykas, kurį mes ketiname padaryti, tai atidaryti iki to žodyne svarstymą.
Mes turime įsitikinti, kad mes nepamiršo, todėl, jei žodynas nebuvo
sėkmingai atidarytas, jis sugrįš Ne, tokiu atveju mes ketiname
return false.
Tačiau darant prielaidą, kad jis sėkmingai atidarytas, tada mes iš tiesų gali skaityti
per žodyną.
>> Taigi pirmas dalykas, kurį mes ketiname norite padaryti, tai turime tai
pasaulinį kintamąjį šaknis.
Dabar šaknis bus mazgas žvaigždė.
Tai mūsų TRIE viršų, kad mes bus iteravimu per.
Taigi pirmas dalykas, kurį mes ketiname norite padaryti yra paskirstyti atmintį mūsų šaknis.
>> Atkreipkite dėmesį, kad mes naudojame Calloc funkcija, kuri yra iš esmės tas pats
kaip malloc funkcijos, išskyrus tai garantuoja, kad grįžti kažką, kad yra
visiškai nulis iš.
Taigi, jei mes naudojome malloc, mums reikia eiti per visus iš rodyklės mūsų
mazgas ir įsitikinkite, kad jie visi null.
Taigi Calloc bus tai padaryti už mus.
>> Dabar, kaip malloc, mes turime padaryti įsitikinkite, kad paskirstymas iš tikrųjų
sėkmingas.
Jei tai grąžinami null, tada mes reikia uždaryti savo žodyną
failą ir grąžina false.
Taigi, darant prielaidą, kad asignavimai buvo sėkmingas, mes ketiname naudoti mazgas
star žymeklį į Iterate per mūsų TRIE.
Taigi, mūsų šaknis niekada nesiruošia keisti, bet mes ketiname naudoti žymeklį į
faktiškai eiti iš mazgo į mazgą.
>> Viskas gerai, todėl tai už linijos, mes Skaitydami žodyno failą,
ir mes naudojame ne fgetc.
Taigi fgetc ketina patraukti vieną simbolį iš failo.
Mes ketiname tęsti greiferiniai ženklai, o mes nepasiekia
failo pabaiga, todėl yra Dviem atvejais mes turime elgtis.
Pirma, jei personažas nebuvo nauja linija, todėl mes žinome, jeigu tai buvo nauja
linija, tada mes apie pereiti į naują žodį.
Tačiau darant prielaidą, kad tai buvo ne nauja eilutė, tada čia mes norime išsiaiškinti,
rodiklis mes ketiname indeksą į į vaikų matrica,
mes pažvelgė anksčiau.
>> Taigi, kaip ir minėjau anksčiau, mes turime Ypatingas atvejis kabutes.
Atkreipkite dėmesį, mes naudojame trijų komponentų operatorių čia, todėl mes ketiname skaityti
tai tarsi simbolis skaitome buvo Apostrofa, tada mes ketiname
nustatytas indeksas yra abėcėlės minus 1, kuris bus 26 indeksas.
Kitur, jei tai buvo ne Apostrofa, tada mes ketiname sukurti indeksą
lygi c minus.
Taigi nepamirškite grįžti iš ankstesnių p rinkinių, c atėmus ketina duoti mums
Abėcėlinis pozicija c, todėl, jei c yra raidė, tai bus
mums nulinį indeksą.
Dėl raide B, jis duos mums indeksas 1, ir pan.
>> Taigi, tai suteikia mums rodyklę į Vaikai masyvas, kad mes norime.
Dabar, jei šis rodiklis šiuo metu yra niekinis ir Vaikai masyvas, tai reiškia, kad
mazgas šiuo metu nėra iš tas kelias, todėl reikia skirti
mazgas šiuo keliu.
Štai ką mes čia.
Taigi, mes ketiname vėl naudoti Calloc funkcija, kad mes neturime
iki nulio iš visų patarimų, o mes, vėl, reikia patikrinti, kad Calloc
nepamiršo.
Jei Calloc dar nepavyksta, tada mes turime iškrauti viską, užmerkti
žodyną, ir return false.
>> Taigi, darant prielaidą, kad jis nepavyktų, tada tai sukurs naują vaiką už mus,
ir tada mes galėsime eiti į tą vaiką.
Mūsų žymeklis bus pakartoti iki to vaiko.
Dabar, jei tai buvo ne null prasideda, tada žymeklį galite tiesiog kartoti
žemyn į tą vaiką faktiškai turintys skirti nieko.
Tai atvejis, kai mes pirmą kartą atsitiko skirti žodis katė, ir
tai reiškia, kad, kai mes einame skirti katastrofa, mums nereikia kurti
mazgai C-A-T dar kartą.
Jie jau egzistuoja.
>> Gerai, kad kas tai yra kita?
Tai būklė, kai c buvo Backslash n, kur c buvo nauja linija.
Tai reiškia, kad mes sėkmingai baigė žodį.
Dabar, ką mes norime daryti, kai mes sėkmingai baigė žodį?
Mes ketiname naudoti šį žodį lauką viduje mūsų struct mazgas.
>> Mes norime nustatyti, kad "True, kad rodo, kad šis mazgas rodo
sėkmingas žodis tikrasis žodis.
Dabar nustatyta, kad True.
Mes norime, kad naujo mūsų žymeklį į tašką į TRIE pradžioje dar kartą.
Ir, pagaliau, prieaugio mūsų žodyną dydis, nes mes rasti kitą žodį.
>> Gerai, kad mes ketiname toliau daryti kad skaitymo pobūdį,
pobūdžio, statant naujus mazgų mūsų Trie ir kiekvieno žodžio
žodynas, kol mes pagaliau pasieks c Lygu EOF, tokiu atveju, mes pertraukos
iš failo.
Dabar yra du atvejai, pagal kurios mes galime nukentėjo EOF.
Pirma, jei ten buvo klaida skaitant iš failo, todėl, jei ten buvo
klaida, mes turime padaryti, tipiškas iškrauti viską, uždarykite failą,
return false.
Darant prielaidą, kad nebuvo klaida, kad tiesiog reiškia, kad mes iš tikrųjų pateko į pabaigą
failas, tokiu atveju, mes uždaryti failą ir grąžina true, nes mes
sėkmingai įkeltas žodyną į mūsų TRIE.
>> Viskas gerai, todėl dabar tegul patikrinti tikrinimas.
Pažvelgus Check funkcija, matome Tokį patikrinimą ketina grįžti bool.
Ji grąžina True, jei šis žodis, kad tai bus perduotas yra mūsų TRIE.
Tai False kitaip.
>> Taigi, kaip mes ketiname nustatyti, ar šis žodis yra mūsų TRIE?
Čia mes matome, kad, kaip ir anksčiau, mes ketiname naudoti žymeklį pakartoti
per mūsų TRIE.
Dabar, čia mes ketiname pakartoti per visą mūsų žodį.
Taigi Iteracja virš žodžio mes praėjo, mes ketiname nustatyti
rodyklė į vaikų matrica, atitinka žodžio kronšteino i.
Taigi, tai bus atrodo kaip Apkrova, kur, jei žodis laikiklis i
Apostrofa, tada mes norite naudoti indeksas abėcėlė minus 1, nes mes nustatėme
tai kur mes einame laikyti kabutes.
>> Dar mes ketiname naudoti tolower Žodis laikiklis i.
Taigi nepamirškite, kad žodis gali būti savavališkas kapitalizacija, ir todėl mes
norite įsitikinti, kad mes naudojame mažosiomis portalo dalykų.
Ir tada atimti iš tos mažosios kad dar kartą suteiktų mums
abėcėlės tvarka Šio pobūdžio.
Taigi, tai bus mūsų puslapis į vaikų masyvo.
>> Ir dabar, jei tai puslapis į vaikų masyvas yra tuščias, tai reiškia, kad mes
nebegali Iteracja žemyn mūsų TRIE.
Jei tai toks atvejis, šis žodis negali galbūt bus mūsų TRIE, nes jei ji
buvo, tai reikštų, kad būtų Kelias iki šio žodžio, ir jūs
niekada susidurti null.
Taigi iškyla null mes return false.
Žodžio nėra žodyne.
Jei tai buvo ne nulis, tada mes ketiname toliau Iteracja, todėl mes ketiname
atnaujinti savo žymeklį, kad rodytų į tai ypač mazgas tuo indeksu.
>> Taigi, mes nuolat tai daryti, kad per visą žodį.
Darant prielaidą, kad mes niekada hit null, tai reiškia, mes galėjome gauti visą
pasaulio ir rasti mūsų TRIE mazgas, bet mes ne visai padaryta dar.
Mes nenorime, tiesiog grįžti Tiesa.
Mes norime grįžti žymeklį klaidos žodį kadangi, nepamirškite vėl, jei katė nėra
į mūsų žodyną ir katastrofa, tada mes sėkmingai gauti per
žodis katė, bet žymeklis žodis bus False, o ne tiesa.
Taigi, mes grįžtame žymeklio žodį rodo ar šis mazgas yra iš tikrųjų žodis
ir viskas registruotis.
>> Taigi galime patikrinti dydis.
Taigi dydis bus gana lengva nes prisiminti, Load, mes
incrementing žodyno dydį kiekvienas žodis, kad mes susiduriame.
Taigi Dydis tik ketina grįžti žodynas dydis, ir viskas.
>> Viskas gerai, taip galiausiai, turime iškrauti.
Taigi Iškelti, mes ketiname naudoti grįžtamojo funkcija iš tiesų visi
iš mums, tiek mūsų funkcija darbo bus vadinama unloader.
Kas yra Kėlimo ketinate daryti?
Čia mes matome, kad Kėlimo ketina kartoti per visas vaikams
tai ypač mazgas, ir jei vaikas mazgas nėra lygus nuliui, tada mes ketiname
iškrauti vaikų mazgas.
>> Taigi, tai bus rekursyviai iškrauti visus mūsų vaikus.
Kai mes esame tikri, kad visi mūsų vaikai buvo iškrauti, tada mes
gali išsivaduoti, todėl iškrauti Save.
Taigi, tai bus rekursyviai iškrauti Visa Trie, ir tada, kai tai
padaryta, mes galime tiesiog grąžina true.
Iškelti negali žlugti, mes tiesiog išlaisvina dalykų.
Taigi, kai mes baigsime išlaisvinant viskas, grąžina true.
Štai ir viskas.
Mano vardas yra Rob, o tai buvo [nesigirdi].