>> SPEAKER 1: Ni donu tiu solvo provu.
Do ni rigardu kion niaj Struct nodo aspektos.
Tie, ni vidas ni tuj havos Bool Vorto kaj struct nodo stelo
Infanoj heligas alfabeto.
Do unue vi povus scivolante, kial alfabeto hash difinita kiel la 27?
Nu, memoru, ke ni tuj bezonas esti la uzado de la apostrofo, tiel
ke Iĝos iom pri speciala kazo laŭlonge de ĉi tiu programo.
>> OK, nun memoru, kiamaniere oni Trie efektive funkcias.
Diru ni indeksante la vorto katojn, tiam el la radiko de nia Trie,
Ni tuj rigardi la Infanoj tabelo, kaj ni iras por rigardi la
indekso kiu respondas al la letero C. Por ke estus indekso du.
Do pro tio ke, kiu donos al ni nova nodo, kaj tiam ni
labori el tiu nodo.
>> Do pro tio ke nodo, ni estas denove tuj rigardi la Infanoj tabelo,
kaj ni iras rigardi indekso nulo respondi al la A en katon.
Tial do ni tuj iru al tiu nodo, kaj donita ke nodo, ni iras
rigardi la indekso kiu respondas al T. Kaj movanta al tiu nodo,
fine, ni tute rigardis tra nia vorto kato, kaj nun Bool
Vorto supozas indiki ĉu tiu vorto donita estas fakte unu vorto.
>> Do kial ni bezonas ke speciala kazo?
Nu, kio, se la vorto katastrofo Estas en nia vortaro, sed
la vorto kato estas ne?
Do rigardante vidi se la vorto kato estas en nia vortaro, ni iras al
sukcese trarigardi la indeksoj C-A-T kaj atingi nodon, sed tio estas
nur pro katastrofo okazis krei nodojn sur la vojo de C-A-T ĉiuj
la vojo al la fino de la vorto.
Do Bool Vorto uzas indiki ĉu tiu aparta situo reale
indikas vorton.
>> Enorde, do nun kiam ni scias kio estas Trie tuj aspekti, ni rigardu
ĉe la Laŭdu funkcio.
Do Laŭdu tuj resendas Bool cxar se ni sukcese aŭ
sensukcese ŝarĝita vortaro kaj ĉi tiu tuj estos la vortaro
ke ni volas ŝarĝi.
Do unue ni tuj faros estas malferma ĝis tiu vortaro por legado.
Ni devas certigi ke ni ne mankos, tial se la vortaro ne estis
sukcese malfermiĝis, ĝi revenos Ne, en kiu kazo ni tuj
revenu False.
Sed supozante, ke ŝi sukcese malfermita, tiam ni povas efektive legas
tra la vortaro.
>> Do unue ni tuj volas fari estas ni havas ĉi
malloka variablo radiko.
Nun, radiko estas tuj estos nodo stelo.
Ĝi estas la supera parto de nia Trie kiuj ni estas tuj estos ripetanta tra.
Do unue ni tuj volas fari estas rezervi memoron por nia radiko.
>> Rimarku ke ni uzas la Calloc funkcio, kiu estas esence la sama
kiel la malloc funkcion, escepte ĝi estas garantiita redoni iun kiu estas
tute zeroed eksteren.
Do, se ni uzas malloc, ni bezonus iri tra ĉiuj el la montriloj en nia
nodo kaj certigi ke ili estas ĉiu nula.
Do Calloc faros tion por ni.
>> Nu, ĝuste kiel malloc, ni bezonas por fari certas, ke la atribuo estas reale
sukcesa.
Se tiu revenis null, tiam ni bezonas fermi niajn vortaro
Arkivo kaj reveni False.
Do alprenanta la atribuo estis sukcesa, ni tuj uzi nodon
star Kursoro persisti tra nia Trie.
Do nia radika neniam tuj ŝanĝos, sed ni tuj uzi kursoron al
efektive iros de nodo al nodo.
>> Enorde, do en tiu Por buklo, ni estas legi tra la vortaro dosiero,
kaj ni uzas en fgetc.
Do fgetc tuj grab sola karaktero de la dosiero.
Ni tuj daŭrigi grabbing karakteroj dum ni ne atingos la
fino de la dosiero, do ekzistas du kazoj ni devas elteni.
La unua, se la karaktero ne estis nova linio, do ni scias, se tio estis nova
linio, tiam ni estas al movi antaŭen al nova vorto.
Sed supozante ke ne estis nova linio, tiam tie, ni volas eltrovi la
indekso ni tuj indekson en en la Filoj tabelo tiu
ni rigardis antaŭe.
>> Do kiel mi diris antaŭe, ni bezonas speciala kazo la apostrofo.
Rimarku ni uzas la triargumenta operatoro ĉi tie, do ni legos
ĉi kvazaŭ la karaktero ni legas en Estis apostrofo, poste ni iras al
starigis indekson egalas alfabeto minus 1, kiu estos la indekso 26.
Alie, se ĝi ne estis apostrofo, tiam ni tuj starigu la indekso
egala al c minus unu.
Do memoru reen el malposta p aroj, c minus oni tuj donu al ni la
alfabeta pozicio de c, do se c estas la litero A, tiu volo
donu al ni indekso nulo.
Por la litero B, ĝi donus ni la indekso 1, kaj tiel plu.
>> Do tio donas al ni la indekson en la Infanoj tabelo, ke ni volas.
Nun, se tiu indekso estas aktuale nula en la Infanoj tabelo, tio signifas ke
nodo ne aktuale ekzistas de tiun vojon, do ni bezonos al rezervu
nodo por tiu vojo.
Tio estas kion ni faras cxi tie.
Do ni tuj, denove, uzu la Calloc funkcio por ke ni ne havas
al nulo el ĉiuj de la montriloj, kaj ni, denove, bezonas kontroli ke Calloc
ne maltrafis.
Se Calloc tute mankis, do ni bezonas malŝarĝi ĉio, fermu niajn
vortaro, kaj revenas False.
>> Do supozante ke ĝi ne maltrafis, tiam tio kreos novan infanon por ni,
kaj poste ni iros al tiu infano.
Nia kursoro persisti malsupren al tiu infano.
Nun, se ĉi tiu ne estis nula komenci kun, tiam la kursoro povas simple persisti
malsupren al tiu infano sen reale devi destini ion.
Tiu estas la kazo, kie ni unue okazis atribui la vorto kato, kaj
tio signifas, kiam ni iros al destini katastrofo, ni ne bezonas krei
nodojn por C-A-T denove.
Ili jam ekzistas.
>> OK, So what is this Else?
Tio estas la kondiĉo, kie c estis backslash n, kie c estis nova linio.
Tio signifas ke ni devas sukcese kompletigita vorto.
Nun, kion ni volas fari, kiam ni sukcese kompletigis vorto?
Ni tuj uzas tiun vorton kampo ene de nia struct nodo.
>> Ni volas fiksi ke al Vera, por ke indikas, ke ĉi tiu nodo indikas
sukcesa vorto veran vorton.
Nun, turnu ke por Vera.
Ni volas reagordi nia kursoron al punkto al la komenco de la Trie denove.
Kaj fine, pliigo nia vortaro grandeco, kiam ni trovis alian vorton.
>> Enorde, do ni tuj daŭre fari ke, legante en karaktero de
karaktero, konstruante novan nodoj en nia Trie kaj por ĉiu vorto en la
vortaro, ĝis ni finfine atingos c egalas EOF, en kiu kazo, ni rompas
el la dosiero.
Nu, jen estas du kazojn sub kion ni povus bati EOF.
La unua estas, se tie estis eraro legado de la dosiero, do se oni
eraro, ni devas fari la tipa malŝarĝi ĉio, fermi la dosieron,
revenu False.
Supozante ke ne estis eraro, ke nur signifas, ke ni reale batis la finon de
la dosieron, en kiu kazo, ni fermis la Arkivo kaj redoni Vera ekde ni
sukcese alŝutis la vortaro en nian Trie.
>> Enorde, do nun ni kontrolu Check.
Rigardante la Check funkcio, ni vidas ke Check tuj resendas Bool.
Ĝi donas True se tiu vorto, ke ĝi estas aprobotaj estas en nia Trie.
False alie.
>> Do kiel ni al difini ĉu tiu vorto estas en nia Trie?
Oni vidas ĉi tie ke, samkiel antaŭ, Ni tuj uzi kursoro persisti
tra nia Trie.
Nun, ĉi tien, ni tuj persisti super nia tuta vorto.
Do ripetanta super la vorto ni estas pasis, ni tuj determinas la
indekso en la Filoj tabelo tiu korespondas al vorto krampo i.
Do tiu tuj serĉos ekzakte kiel Laŭdu, kie se vorto krampo i estas
apostrofo, ĉar ni volas uzi indekso alfabeto minus 1 ĉar ni determinis
ke estas kie ni iras stoki apostrofoj.
>> Alie, ni tuj uzi tolower vorto krampo i.
Do memoru, ke vorto povas havi arbitrajn majuskloj, do ni
volas certigi, ke ni uzas minuskla versio de aferoj.
Kaj tiam subtrahi el tiu minuskla a al, refoje, donu al ni la
alfabeta pozicio de tiu signo.
Do tiu tuj estos nia indekso en la Filoj tabelo.
>> Kaj nun, se tio indekson en la Filoj tabelo estas nula, tio signifas ke ni
ne plu povas daŭrigi ripetanta malsupren niaj Trie.
Se tio estas la kazo, tiu vorto ne povas eble esti en nia Trie, ĉar se ĝi
estis, ke tio signifus estus vojeto malsupren al tiu vorto, kaj vi farus
neniam renkontas nula.
Do malhelpi nulaj, ni revenos False.
La vorto ne estas en la vortaro.
Se ĝi estis ne nulaj, do ni tuj daŭrigi ripetanta, do ni tuj
ĝisdatigi nian kursoron atentigi al tio apartan nodon en tiu indekso.
>> Do ni observu la fari tion tra la tutan vorton.
Supozante ni neniam batis nula, ke per ni povis trairi la tutan
mondon kaj trovi nodon en nia Trie, sed ni ne tute farita ankoraŭ.
Ni ne volas ĝuste redoni Vera.
Ni volas reveni kursoro eraro vorto ĉar rememoru, denove, se la kato ne estas
en nia vortaro kaj katastrofo estas, tiam ni sukcese akiri tra
la vorto kato, sed kursoron vorto Estos False kaj ne vera.
Do ni revenu kursoron vorto por indiki ĉu ĉi tiu nodo estas reale vorto,
kaj tio estas por ĉekon.
>> Do ni kontrolu Grando.
Do Grando tuj esti sufiĉe facila ĉar rememoru en Laŭdu, ni estas
pliigante vortaro grandeco por ĉiu vorto, kiun ni renkontas.
Do Grando estas ĝuste tuj revenos vortaro grandeco, kaj tio estas ĝi.
>> Enorde, do laste, ni devas malŝarĝi.
Do malŝarĝi, ni tuj uzi rekursia funkcio por fakte plenumos cxiujn
de la laboro por ni, por niaj funkcio tuj estos nomata Unloader.
Kio estas Unloader faros?
Oni vidas ĉi tie ke Unloader tuj persisti super ĉiuj el la infanoj en
tiun apartan nodon, kaj se la infano nodo estas ne nulaj, do ni tuj
malŝarĝi la infano nodo.
>> Do tiu tuj rekursie malŝarĝi ĉiuj niaj infanoj.
Iam ni estas certa, ke ĉiuj niaj infanoj estis malŝarĝitaj, ĉar ni
povas liberigi nin, tiel malŝarĝi samaj.
Do tio rekursie malŝarĝi la tuta Trie, kaj tiam iam tio
farita, oni povas simple reveni Vera.
Malŝarĝi ne povas malsukcesi, ni estas nur liberigante aferojn.
Do iam ni faris liberigante ĉio, revenu Vera.
Kaj tio estas ĝi.
Mia nomo estas Rob, kaj ĉi estis [inaudibles].