>> Выступоўца 1: Давайце дамо гэта рашэнне паспрабаваць.
Такім чынам, давайце паглядзім, што наш Структура, вузел будзе выглядаць.
Тут мы бачым, што мы збіраемся мець Bool Слова і Struct вузел зоркі
Дзеці дужкі алфавіт.
Так першае, што вы можаце быць здзіўлены,, чаму алфавіт хэш вызначаецца як 27?
Ну, памятаеце, што мы збіраемся трэба быць апрацоўкі апостраф, так
што будзе свайго роду спецыяльны месца усюды гэтай праграмы.
>> Добра, зараз, узгадайце, як Trie на самай справе працуе.
Скажам мы індэксацыі словы котак, затым ад кораня нашага Trie,
мы будзем глядзець на дзяцей Масіў, і мы будзем глядзець на
індэкс, які адпавядае літары С. Так што было б індэкс два.
Таму, улічваючы, што, што дасць нам новы вузел, а затым мы будзем
працаваць з гэтым вузлом.
>> Таму, улічваючы, што вузел, мы ў чарговы раз будзем глядзець на масіве дзяцей,
і мы будзем глядзець на нулявы індэкс каб адпавядаць А ў кот.
Такім чынам, мы збіраемся пайсці на гэты вузел, і ўлічваючы, што вузел, мы збіраемся
глядзець на індэкс, які адпавядае Т. і перайсці да гэтага вузла,
нарэшце, мы цалкам паглядзеў праз нашу словы Cat, а цяпер Bool
Слова мяркуецца паказаць, ці з'яўляецца гэта дадзенае слова на самой справе слова.
>> Дык чаму ж мы павінны, што прыватны выпадак?
Ну, што, калі слова катастрофа знаходзіцца ў нашым слоўніку, але
слова котка не з'яўляецца?
Такім чынам, у глядзеў, калі слова кошка ў нашым слоўніку, мы збіраемся
паспяхова праглядаць індэксаў З-А-Т і дасягнуць вузел, але гэта
толькі таму, што катастрофа адбылася ў стварыць вузлы на шляху з C-A-T ўсё
аж да канца слова.
Так Bool Слова выкарыстоўваецца ці пазначаюць гэта асаблівая размяшчэнне фактычна
паказвае на слова.
>> Добра, так што зараз, калі мы ведаем, што Trie збіраецца выглядаць, давайце паглядзім
у функцыі Load.
Так нагрузкі збіраецца вяртаць Bool для таго мы паспяхова або
беспаспяхова загружалася слоўнік і гэта будзе слоўнік
што мы хочам загрузіць.
Так першае, што мы збіраемся зрабіць, гэта адкрыць да гэтага слоўніка для чытання.
Мы павінны пераканацца, што мы не прамінуў, таму, калі слоўнік ня быў
паспяхова адкрыты, то ён верне Не, у якім выпадку мы збіраемся
вярнуцца False.
Але калі выказаць здагадку, што ён паспяхова адкрыў, то мы можам на самай справе чытаць
праз слоўніку.
>> Так першае, што мы збіраемся хачу зрабіць, гэта ў нас ёсць гэта
глабальная пераменная корань.
Цяпер, корань будзе вузел зорка.
Гэта вяршыня нашай Trie, што мы будзе ітэрацыі.
Так першае, што мы збіраемся хочаце зрабіць, гэта вылучыць памяць для нашага кораня.
>> Звярніце ўвагу, што мы выкарыстоўваем Calloc Функцыя, якая ў асноўным тое ж самае
як функцыя Malloc, за выключэннем, што гэта гарантавана вярнуць тое, што з'яўляецца
цалкам абнуляецца.
Так што, калі мы выкарыстоўвалі Malloc, мы павінны былі б прайсці праз усе ўказальнікі ў нашай
вузел і пераканайцеся, што яны ўсё нуль.
Так Calloc зробіць гэта за нас.
>> Цяпер, гэтак жа, як Malloc, мы павінны зрабіць упэўнены, што вылучэнне на самай справе
паспяховым.
Калі гэта вяртаецца нуль, то трэба зачыніць наш слоўнік
файл і вярнуць False.
Так мяркуючы размеркаванне было паспяхова, мы збіраемся выкарыстаць вузел
зоркі курсора для ітэрацыі праз нашу Trie.
Такім чынам, наш корань ніколі не збіраецца мяняць, але мы збіраемся выкарыстоўваць курсор ў
на самай справе ісці ад вузла да вузла.
>> Добра, так што ў гэтым для цыклу, мы чытаць праз файл слоўніка,
і мы выкарыстоўваем у fgetc.
Так fgetc збіраецца захапіць адзін персанаж з файла.
Мы збіраемся працягнуць захоп знакаў у той час як мы не даходзяць
канец файла, так што ёсць два выпадкі, якія мы павінны справіцца.
Першы, калі персанаж ня быў Новая лінія, таму мы ведаем, калі гэта быў новы
лінія, то мы збіраемся перайсці да новых словам.
Але калі выказаць здагадку, што гэта не было новай лініі, то тут, мы хочам высветліць,
Індэкс мы збіраемся індэкса ў ў масіве дзяцей, што
мы глядзелі на перад.
>> Так як я ўжо казаў, мы павінны Асаблівы выпадак апостраф.
Звярніце ўвагу, што мы з трохзначных аператарам тут, так што мы збіраемся чытаць
гэта як калі персанаж мы чытаем, быў апостраф, то мы збіраемся
ўсталяваць індэкс, роўны алфавіту мінус 1, які будзе індэкс 26.
У адваротным выпадку, калі гэта не было апостраф, затым мы збіраемся ўсталяваць індэкс
роўная з мінус.
Так што памятаеце назад ад папярэдніх набораў р, з мінус збіраецца даць нам
алфавітны становішча з, так што калі з літарай А, гэтая воля
даць нам нулявы індэкс.
Для лісты B, гэта дало б нам індэкс 1, і гэтак далей.
>> Так што гэта дае нам індэкс ў Дзеці масіў, які мы хочам.
Цяпер, калі гэты паказчык у цяперашні час нулявы ў масіў Дзеці, што азначае, што
вузел цяперашні час не існуе ад што шлях, так што мы павінны вылучыць
вузел для гэтага шляху.
Гэта тое, што мы робім тут.
Такім чынам, мы збіраемся, зноў жа, выкарыстоўваць Calloc Функцыя, каб мы не павінны
абнуліць усе паказальнікі, і мы, зноў жа, трэба праверыць, што Calloc
не праваліўся.
Калі Calloc нічога не атрымаецца, то мы павінны выгрузіць усё, закрываем
слоўнік, і вярнуць False.
>> Так мяркуючы, што ён не прамінуў, то гэта створыць новага дзіцяці для нас,
а затым мы пойдзем у гэтага дзіцяці.
Наша курсор ітэрацыі да гэтага дзіцяці.
Цяпер, калі гэта не было пустой для пачатку, то курсор можна проста перабраць
да гэтага дзіцяці, фактычна не таго, каб вылучыць нічога.
Гэта той выпадак, калі мы ўпершыню адбылося вылучыць слова котку, і
гэта азначае, што, калі мы ідзем вылучыць катастрофа, нам не трэба ствараць
вузлы для C-A-T зноў.
Яны ўжо існуюць.
>> Такім чынам, што ж гэта за астатняе?
Гэта стан, пры якім кандыцыянер быў касая рыса п, дзе кандыцыянер быў новая лінія.
Гэта азначае, што мы паспяхова завяршыла слова.
Цяпер, што мы хочам зрабіць, калі мы паспяхова завяршыла слова?
Мы збіраемся выкарыстоўваць гэта поле слова ўнутры нашага Struct вузла.
>> Мы хочам, каб усталяваць, што да Праўда, такім чынам, каб паказвае, што гэты вузел паказвае
паспяховым слова актуальнай слова.
Зараз усталюеце, што Праўда.
Мы хочам, каб скінуць нашу курсор да кропкі ў пачатку Trie зноў.
І, нарэшце, павялічыць наш слоўнік Памер так як мы знайшлі яшчэ адно слова.
>> Добра, так што мы збіраемся працягваць рабіць што, чытаючы характар ​​па
характар, пабудовы новых вузлоў у наша Trie і для кожнага слова ў
слоўнік, пакуль мы ўрэшце не дасягне гр роўна EOF, у гэтым выпадку, мы парушаем
з файла.
Зараз, ёсць два выпадкі пад якія мы маглі б патрапіць EOF.
Першы, калі адбылася памылка чытанне з файла, так што калі не было
пра памылку, мы павінны зрабіць тыповы выгрузіць усё, зачыніце файл,
вярнуцца False.
Мяркуючы, што не было памылак, якія проста азначае, што мы на самай справе патрапіў у канцы
файл, у якім выпадку, мы закрываем файл і вярнуцца Праўда, так як мы
паспяхова загружаны слоўнік ў нашай Trie.
>> Добра, так што зараз давайце Выезд Заезд.
Гледзячы на ​​праверкі функцыі, мы бачым, што Праверыць збіраецца вяртаць Bool.
Яна вяртае Праўда, калі гэта слова, што гэта перадаецца ў нашай Trie.
Яна вяртае значэнне False у адваротным выпадку.
>> Так як мы збіраемся вызначыць, ці з'яўляецца гэтае слова ў нашым Trie?
Мы бачым тут, што, як і раней, мы збіраемся выкарыстоўваць курсор для перабору
праз нашу Trie.
Цяпер, вось, мы збіраемся ітэрацыі над усім нашым словам.
Так ітэрацыі словы мы прайшло, мы збіраемся вызначыць
індэкс ў масіве дзяцей, што адпавядае слова кранштэйна I.
Так што гэта будзе выглядаць гэтак жа, як Нагрузка, дзе, калі слова кранштэйны я з'яўляецца
апостраф, то мы хочам выкарыстоўваць індэкс алфавіт мінус 1, таму што мы вызначылі
гэта значыць, куды мы ідзем для захоўвання апострафы.
>> Астатняе мы збіраемся выкарыстаць ToLower Слова кранштэйны я.
Так што памятаеце, што слова можа мець адвольную капіталізацыя, і таму мы
хочаце, каб пераканацца, што мы выкарыстоўваем маленькай версіяй рэчаў.
А потым адняць з гэтай ніжнім рэгістры каб, зноў жа, даюць нам
алфавітны становішча з гэтага знака.
Так што гэта будзе наш індэкс ў масіве дзяцей.
>> І зараз, калі што індэкс ў інтарэсах дзяцей Масіў з'яўляецца пустым, што азначае, што мы
больш не можа працягваць ітэрацыі ўніз нашай Trie.
Калі гэта так, то гэта слова не можа магчыма, будзе ў нашым Trie, так як, калі ён
былі, гэта будзе азначаць, што будзе Шлях ўніз да гэтага слова, і вы б
ніколі не сутыкаюцца нуль.
Так сустракаючы нуль, мы вяртаемся False.
Слова адсутнічае ў слоўніку.
Калі б не нуль, то мы збіраемся працяг ітэрацый, так што мы збіраемся
абнавіць наш курсор, каб паказаць на што канкрэтны вузел па гэтым індэксе.
>> Такім чынам, мы працягваць рабіць гэта на працягу ўсё слова.
Выкажам здагадку, што мы ніколі не ўдарыў нуль, што азначае мы змаглі прайсці праз увесь
свет і знайсці вузел у нашым Trie, але мы яшчэ не скончылі яшчэ.
Мы не хочам, каб проста вярнуць True.
Мы хочам вярнуцца курсора памылцы слова так, памятаеце, зноў жа, калі котка не
у наш слоўнік і катастрофа, тады мы будзем паспяхова прайсці
слова кошка, але курсор слова будзе Хлусня і няпраўда.
Так мы вяртаемся курсора слова для абазначэння Ці гэты вузел на самой справе слова,
і вось яно што для праверкі.
>> Дык давайце праверым Памер.
Так Памер будзе даволі лёгка так, памятаеце, у Load, мы
павялічваючы памер слоўніка для кожнае слова, што мы сутыкаемся з.
Так Памер толькі збіраецца вярнуцца памер слоўніка, і вось яно што.
>> Добра, нарэшце, у нас ёсць Unload.
Так выгрузка, мы збіраемся выкарыстаць рэкурсіўная функцыя на самай справе рабіць усё
працы для нас, таму нашай функцыі збіраецца назваць Разгрузчик.
Што Разгрузчик збіраецеся рабіць?
Мы бачым тут, што Разгрузчик збіраецца перабору ўсіх дзяцей у
гэты канкрэтны вузел, і калі дзіця вузел не з'яўляецца нулявым, то мы збіраемся
выгрузіць даччыны вузел.
>> Дык гэта будзе рэкурсіўна выгрузіць усе нашы дзеці.
Пасля таго, як мы ўпэўненыя, што ўсе нашы дзеці былі выгружаны, то мы
можа вызваліцца, таму разгрузіць OURSELF.
Так што гэта будзе рэкурсіўна выгрузіць Увесь Trie, а затым адзін раз гэта
зроблена, мы можам проста вярнуць True.
Выгрузка не можа пацярпець няўдачу, мы проста вызваляючы рэчы.
Таму, як толькі мы скончым вызваляючы ўсё, вярнуцца Праўда.
І гэта ўсё.
Мяне клічуць Боб, і гэта быў [неразборліва].