[Музика свира] РОБ БОВДЕН: Здраво. Ја сам Роб. И нека је ово решење ван. Дакле, овде ћемо да спроведе општа табела. Ми видимо да струцт чвор од нашег табела ће изгледати овако. Дакле, то ће имати Чар реч низ величине дужина + 1. Не заборави + 1, јер максимум реч у речнику је 45 карактера. А онда ћемо морати један екстра карактер за знак обрнуте косе нуле. А онда наша Хасхтабле у свакој кашика ће за складиштење повезана листа чворова. Ми не радимо линеарни прескок овде. И тако, како би се повезали на следећи елемент у кофу, морамо струцт ноде * следећи. У реду. Дакле, то је оно што изгледа као чвор. Сада овде је декларација наше Хасхтабле. То ће имати 16.834 кашике. Али тај број није ни битно. И на крају, ми ћемо имати глобална променљива величина Хасхтабле, који ће кренути као нуле. И то ће пратити како многе речи су у нашем речнику. Па хајде да погледамо оптерећења. Обратите пажњу на то оптерећење, она враћа боол. Ви се вратите труе ако је то успешно је учитан, и иначе фалсе. И потребно је цхар * речник, који је речник да желимо да отворимо. Дакле, то је прва ствар ћемо да урадимо. Идемо у фопен речник за читање. И ми ћемо морати да сигуран да је успео. Дакле, ако се вратио НУЛЛ, онда нисмо успешно отворите речник. И ми треба да се врате лажна. Али под претпоставком да је то успешно учинио отворен, онда желимо да прочитате речник. Дакле, имајте петље док не нађемо неки разлог да се пробије из ове петље, који ћемо видети. Зато имајте петље. А сада ћемо да маллоц једну чвор. И наравно да је потребно да емитују проверите поново. Дакле, ако маллоцинг није успео, онда желимо да истовари било ког чвора који смо десило пре маллоц, затворите речник и ретурн. Али игноришући то, под претпоставком да успели, онда желимо да користимо фсцанф да прочита једну реч из наше дицтионари у нашу чвора. Дакле, запамтите да је реч улаз> Чар Реч бафер величине ленгхтх + 1 да ћемо држати реч унутра Дакле фсцанф ће да се врати 1, док као што је било у стању да успешно прочитајте реч из датотеке. Ако било грешка се дешава, или ми до краја датотеке, она неће вратити 1. У том случају се не врати 1, смо коначно ћемо да се пробије из ово док петља. Дакле, видимо да када смо успешно прочитајте реч у улаз> реч, онда ћемо да Реч користећи наш хеш функције. Хајде да погледамо хасх функција. Тако да стварно не треба да разумем ово. И заправо ми само извукли ову хасх функционишу са интернета. Једина ствар коју треба да схватите јесте да то траје цхар * рец. Дакле, то је узимање ниску као улаз, а повратак непотписани инт као излаз. Дакле, то је све хасх функција, то је узима у улаз и даје вам индекс у Хасхтабле. Приметимо да смо МОДИНГ по НУМ_БУЦКЕТС, тако да вредност вратио заправо је индекс у Хасхтабле а не индекс изван граница низа. Дакле, с обзиром да је функција, идемо да размотре реч да ми чита речник. А онда ћемо користити да тараба да убаците улазак у Хасхтабле. Сада Хасхтабле хасх је струја повезани листу у табели. И то је врло могуће да је то само НУЛЛ. Желимо да убаците наш улазак на почетком овог повезаној листи. И тако ћемо имати нашу струју улазна тачка за шта Хасхтабле тренутно указује на. А онда ћемо за складиштење, у Хасхтабле на тараба, тренутна ставка. Дакле, ове две линије успешно убацили унос на почетку повезана листа у том индексу у Хасхтабле. Када смо завршили са тим, знамо да смо нашли још једну реч у речник, а ми смо опет повећавати. Дакле, ми би радили да до фсцанф коначно вратио нешто не-1 на која тачка запамтите да морамо да слободан улаз. Дакле, овде смо маллоцед унос. И покушали смо да прочитам нешто из речника. И нисмо успешно прочитао нешто из речника, у том случају морамо да ослободимо унос да ми никада заправо ставили у Хасхтабле, и коначно сломити. Једном ми избити морамо да видимо, добро, смо избити јер тамо Читао грешка из фајла? Или смо ми избити јер смо достигла крај датотеке? Ако је грешка, онда желимо да се врати лажна. Јер оптерећење није успела. И у процесу желимо да истовари све речи које смо прочитали у, и затворите датотеку речника. Под претпоставком да смо успели, онда смо само и даље треба да се затворите речник филе, и коначно врати истина, јер смо успешно учитан речник. И то је то за оптерећење. Тако сада проверити, дали напуњен Хасхтабле, ће изгледати овако. Дакле провери, она враћа боол, који је ће указати да ли прошао у цхар * речју, да ли прошао у стринг је у нашем речнику. Дакле, ако је то у речнику, ако је то у нашој Хасхтабле, ми ћемо вратити истина. И ако то није, ми ћемо се вратити фалсе. Имајући у виду ово прошло у речи, ми смо ће хасх реч. Сада важна ствар је да се препознају да смо у оптерећењу знали да све речи ми ћемо бити мала слова. Али овде нисмо тако сигурни. Ако погледамо наше хеш функције, наша хасх функција заправо је мања кућишта сваки карактер речи. Дакле, без обзира на капитализацију реч, наша хасх функција је повратак Исти индекс за све што капитализација је, јер би то имало вратила за потпуно мала слова верзија речи. У реду. То је наш индекс је у Хасхтабле за ову реч. Сада ово за петље ће поновити над повезане листе који је био на том индексу. Дакле, ми смо приметили иницијализација унос да укаже на тај индекс. Идемо у настави док унос! = НУЛЛ. И не заборавите да ажурирате показивач у наш повезана листа улаз = улаз> следећу. Дакле, имамо тренутни улазак у Следећа ставка у повезаној листи. Дакле, за сваки унос у повезаној листи, ћемо користити стрцасецмп. То није СтрЦомп. Зато још једном, желимо да радим ствари случај инсенситивели. Дакле, ми користимо стрцасецмп да упоредите Реч која је прошла кроз ово Функција против речи који је у овај унос. Уколико се врати нулу, то значи да је утакмица, у том случају ми желимо да ретурн труе. Успешно фоунд реч у нашем Хасхтабле. Ако није било утакмица, онда смо ће петљу поново и погледајте следећи унос. И ми ћемо наставити петље док тамо су ставке у овој повезаној листи. Шта се дешава ако се сломити од овога за петљу? То значи да нисмо пронашли унос који упарен ову реч, у ком случају враћамо лажно указују на то да наш Хасхтабле не садрже ову реч. И то је провера. Па хајде да погледамо величине. Сада величина ће бити прилично једноставан. Пошто се сећате у оптерећења, за сваку реч открили смо, ми инкрементира глобална променљива величина Хасхтабле. Дакле, величина је функција управо дешава да се врати глобалну променљиву. И то је то. Сада коначно, морамо да истовари речник једном све то ради. Па како ћемо то урадити? Управо овде смо преко петље Све корпе нашег стола. Дакле, постоје НУМ_БУЦКЕТС кашике. И за сваку повезане листе у нашој Хасхтабле, идемо на петљи преко целовитост повезаној листи, ослобађајући сваки елемент. Сада морамо да будемо опрезни. Дакле, овде имамо привремену променљиву то је чување показивач на следећи елемент у повезаној листи. А онда ћемо бесплатно тренутни елемент. Морамо бити сигурни да радимо ово, јер ми Не могу само да ослободе елемента струје а затим покушајте да приступите следећи показивач, јер кад смо га ослободили, меморија постаје неважећи. Дакле, морамо да око показивач на Следећи елемент, онда можемо ослободити струја елеменат, а онда можемо да ажурирате наш тренутни елемент да укаже на Следећи елемент. Ми ћемо петља док постоје елементи у овом повезаној листи. Ми ћемо то урадити за све повезано листе у Хасхтабле. А када смо завршили са тим, ми смо потпуно истоварио Хасхтабле, и готови смо. Дакле, то је немогуће за искрцај да се икада врате лажна. А када смо завршили, ми вратио само истина. Дајмо Ово решење пробати. Дакле, хајде да погледамо шта су наши струцт чвор ће изгледати. Овде видимо да ћемо имати боол реч и струцт чвор * деца носач ПИСМО. Дакле, прва ствар коју можда питајући се, зашто је Алпхабет ед дефинисан као 27? Па, сећам се да ћемо морати да руковање апостроф. Тако да ће бити нешто од Посебан случај у овом програму. Сада се како трие заправо ради. Рецимо да смо индексирање реч "мачке". Затим из корена трие, ћемо да погледате децу низ, а ми ћемо да погледамо индекс који одговара слову Ц. Тако да ће бити индексиране 2. Дакле с обзиром да, та воља дајте нам нови чвор. А онда ћемо радити из тог чвора. Дакле, с обзиром да чвор, ми смо поново ће погледати на децу низ. И ми ћемо да погледамо индекс нула да одговара А у мачку. Дакле, онда ћемо да идемо у том чвору, и обзиром да чвор идемо да погледате на крају је а одговара за Т. и преласка на том чвору, коначно, ми смо потпуно гледали кроз наша реч "мачка". А сада боол Реч је требало да укаже да ли ово даје реч је заправо реч. Па зашто нам је потребан тај специјални случај? Па шта речи "катастрофа" је у нашем речнику, али реч "мачка" није? Зато и тражимо да видимо да ли реч "мачка" је у нашем речнику, ми смо ће успешно гледати кроз индекси Ц-Т у региону чвор. Али то је само зато катастрофа десило да створи чворове на путу од Ц-А-Т, све до крај речи. Дакле, реч воид се користи да укаже да ли ова локација заправо указује на реч. У реду. Дакле, сада знамо шта је трие је ће изгледати, погледајмо лоад функцију. Дакле, оптерећење ће вратити боол за ли смо успешно или безуспешно лоадед речник. И ово ће бити речник да желимо да се учита. Дакле, прва ствар коју смо да урадимо је отворен до тог речника за читање. И морамо да се уверите нисмо пропустили. Дакле, ако није био речник успешно отворен, она ће се вратити нулл, у ком случају ми смо ће вратити фалсе. Али под претпоставком да је успешно отворен, онда можемо да чита кроз речнику. Дакле, прва ствар коју ћемо Желим да урадите је да имамо ово глобална променљива корен. Сада корен ће бити чвор *. То је врх наше трие да смо Биће итератинг преко. Дакле, прва ствар коју ћемо да желите да урадите је издвојити меморија за наш корен. Приметимо да смо помоћу цаллоц функција, која је у основи иста као маллоц функције, осим што је гарантовано нешто што је да се врати потпуно нулу напоље. Дакле, ако смо користили маллоц, ми би требало да проћи кроз све тројке у нашој чвор, и уверите се да сви су нула. Дакле цаллоц ће то урадити за нас. Сада баш као маллоц, морамо да сигурни да алокација је заправо успешна. Ако се то вратио нулл, онда смо треба да се затвори или речник филе и ретурн. Дакле, под претпоставком да је расподела успешан, ми ћемо користити чвор * курсор да вршите итерацију кроз нашу трие. Дакле, наши корени никада неће променити, али ми ћемо користити курсор заправо иде од чвора до чвора. Дакле, у овом за петљу читамо кроз датотеку речника. И ми користимо фгетц. Фгетц ће да зграби један карактер из датотеке. Ми ћемо наставити отимања карактера док се не постигне крај датотеке. Постоје два случаја морамо да рукује. Прво, ако карактер није била нова линија. Дакле, ми знамо да ли је то нова линија, затим ми смо о томе да се пресели на нову реч. Али под претпоставком да није нова линија, затим Овде желимо да схватим Индекс ћемо индекса у у низу деце која смо гледали раније. Дакле, као што сам раније рекао, потребно је да Посебан случај апостроф. Приметимо да смо користећи тројног оператер овде. Зато ћемо читати ово као, ако карактер читамо у било апостроф, онда ћемо поставити индекс = "ПИСМО" -1, који ће бити индекс 26. Иначе, ако то није био апостроф, тамо ћемо поставити индекс једнака ц -. Дакле, запамтите назад у односу на претходно п-сета, Ц - ће нам дати азбучни положај Ц. Дакле, ако Ц је слово, ово ће дај нам индекс нула. За слово Б, он ће дати ус индекс 1, и тако даље. Дакле, ово нам даје индекс у деца низ који желимо. Сада, ако овај индекс је тренутно у нулл деца, то значи да чвор тренутно не постоји са тог пута. Дакле, морамо да издвоји чвор за тај пут. То је оно што ћемо урадити овде. Тако ћемо поново користити цаллоц функција, тако да не морамо да нула све показиваче. И опет је потребно да проверите да цаллоц није пропустио. Ако цаллоц пропустио, онда морамо да истовари све, затворите наш речник, и ретурн. Дакле, под претпоставком да не успеју, онда то ће створити нову дете за нас. И онда ћемо ићи на то дете. Наш курсор ће поновити до тог детета. Сада, ако то није била нула за почетак, онда курсор само може поновити до тог детета без заправо има да издвоји ништа. Ово је случај када смо се први пут десило доделити реч "мачка". И то значи да кад идемо да издвоји "Катастрофа", ми не треба да се створи чворова за Ц-А-Т опет. Они већ постоје. Шта је ово друго? То је стање где је ц био косих н, где је ц је нова линија. То значи да смо успешно завршен реч. Сада шта желимо да урадимо када смо успешно завршен реч? Ми ћемо користити ову област реч унутар нашег струцт чвора. Желимо да подесите да се истина. Тако да указује на то да овај чвор означава успешан реч, стварна реч. Сада сет то труе. Желимо да вратите наше курсор на тачку до почетка Трие поново. И на крају, увећава наш речник величина, јер смо нашли други посао. Тако ћемо да радимо то, читање карактера по карактеру, изградње нових чворова у нашој трие и за сваку реч у речнику, док коначно достићи Ц! = ЕОФ, у којој Случај смо се пробије из датотеке. Сада постоје два случаја под које смо можда погодио ЕОФ. Први је ако је било грешке читање из датотеке. Дакле, ако постоји грешка, ми Потребно је да урадите типичан. Истовар све, близу фајл, ретурн. Под претпоставком да није било грешке, да само значи да заправо погодио крај фајл, у ком случају, ми смо затворили филе и вратите тачно, јер смо успешно учитан речник у нашу трие. Дакле, хајде да проверимо чек. Гледајући на функцији проверу, видимо да провера ће вратити боол. То враћа труе ако ова реч да је то буде усвојен је у нашој трие. То враћа иначе фалсе. Дакле, како се ви утврдите да ли ова реч је у нашој трие? Ми овде видимо да, баш као и пре, ћемо користити курсор за итерацију кроз нашу трие. Сада овде ћемо поновити преко целе наше речи. Дакле итератинг преко речи смо прошли, ћемо одредити индекс у низу деце која одговара речи носећи И. Па ово ће изгледати баш као оптерећење, где ако реч [и] је апостроф, онда желимо да користи индекс "Буквар" - 1. Зато што смо утврдили да је је место где ћемо да сачувате апострофа. Иначе ћемо користити два нижу реч носач И. Дакле, запамтите ту реч може имати произвољну капитализацију. И тако желимо да се уверите да смо користећи малим словима верзију ствари. А онда одузмите од тога "" на једном опет нам азбучном положај тог карактера. Дакле, то ће бити наш индекс у низу деце. И сада, ако је индекс у деце низ нулл, значи да смо више не може наставити итератинг доле нашег трие. Ако је то случај, та реч не може можда бити у нашем трие. Будући да је била, да би значи да би путања до те речи. И никада не би наићи нулл. Дакле сусрету нулл, враћамо лажна. Реч није у речнику. Да није нула, онда смо ће наставити итератинг. Дакле, идемо тамо курсор да укаже на то посебно чвор у том индексу. Ми и даље то раде током цео реч, претпостављајући ми никада ударио нулл. То значи да смо били у могућности да се кроз целе речи и наћи чвор у нашем покушају. Али нисмо још готови. Ми не желимо да се врате само истина. Ми желимо да се врати курсор> реч. Од запамти поново, је "мачка" није у нашем речнику, а "катастрофа" се, онда ћемо успешно добијамо кроз реч "мачка". Али курсор реч ће бити лажна и није истина. Тако смо се вратили курсор реч да укаже да ли је ово чвор је заправо реч. И то је то за проверу. Дакле, хајде да проверимо величину. Дакле, величина ће бити прилично лако јер, запамти у оптерећењу, ми смо увецава речник величине за свака реч коју срећемо. Дакле, величина је само да врати речник величину. И то је то. Дакле, на крају смо истовари. Дакле истовари, идемо користити рекурзивни функција да заиста уради све рада за нас. Дакле, наша функција ће бити позван на унлоадер. Шта је унлоадер ћеш да урадиш? Ми овде видимо да унлоадер ће поновити над сва деца на овај чвор. А ако дете чвор није нулл, онда ћемо истовари дете чвор. Дакле, ово је ви рекурзивно растеретити све наше деце. Када смо сигурни да све наше деце су искрцани, онда смо да се ослободимо, па истовари себе. Ово ће радити рекурзивно истовари цео трие. И онда када то урадимо, можемо само да се врате тачно. Унлоад не може успети. Ми само ослобађање ствари. Дакле, када смо урадили ослобађање све, вратите истина. И то је то. Моје име је Роб. И то је био буквар. [Музика свира]