1 00:00:00,000 --> 00:00:12,350 >> [Музика свира] 2 00:00:12,350 --> 00:00:13,050 >> РОБ БОВДЕН: Здраво. 3 00:00:13,050 --> 00:00:13,640 Ја сам Роб. 4 00:00:13,640 --> 00:00:16,210 И нека је ово решење ван. 5 00:00:16,210 --> 00:00:20,070 Дакле, овде ћемо да спроведе општа табела. 6 00:00:20,070 --> 00:00:24,090 Ми видимо да струцт чвор од нашег табела ће изгледати овако. 7 00:00:24,090 --> 00:00:28,710 Дакле, то ће имати Чар реч низ величине дужина + 1. 8 00:00:28,710 --> 00:00:32,259 Не заборави + 1, јер максимум реч у речнику је 45 9 00:00:32,259 --> 00:00:33,130 карактера. 10 00:00:33,130 --> 00:00:37,070 А онда ћемо морати један екстра карактер за знак обрнуте косе нуле. 11 00:00:37,070 --> 00:00:40,870 >> А онда наша Хасхтабле у свакој кашика ће за складиштење 12 00:00:40,870 --> 00:00:42,320 повезана листа чворова. 13 00:00:42,320 --> 00:00:44,420 Ми не радимо линеарни прескок овде. 14 00:00:44,420 --> 00:00:48,430 И тако, како би се повезали на следећи елемент у кофу, морамо 15 00:00:48,430 --> 00:00:50,390 струцт ноде * следећи. 16 00:00:50,390 --> 00:00:51,110 У реду. 17 00:00:51,110 --> 00:00:53,090 Дакле, то је оно што изгледа као чвор. 18 00:00:53,090 --> 00:00:56,180 >> Сада овде је декларација наше Хасхтабле. 19 00:00:56,180 --> 00:00:59,640 То ће имати 16.834 кашике. 20 00:00:59,640 --> 00:01:01,910 Али тај број није ни битно. 21 00:01:01,910 --> 00:01:05,450 И на крају, ми ћемо имати глобална променљива величина Хасхтабле, који 22 00:01:05,450 --> 00:01:07,000 ће кренути као нуле. 23 00:01:07,000 --> 00:01:10,760 И то ће пратити како многе речи су у нашем речнику. 24 00:01:10,760 --> 00:01:13,710 >> Па хајде да погледамо оптерећења. 25 00:01:13,710 --> 00:01:16,390 Обратите пажњу на то оптерећење, она враћа боол. 26 00:01:16,390 --> 00:01:20,530 Ви се вратите труе ако је то успешно је учитан, и иначе фалсе. 27 00:01:20,530 --> 00:01:23,990 И потребно је цхар * речник, који је речник 28 00:01:23,990 --> 00:01:25,280 да желимо да отворимо. 29 00:01:25,280 --> 00:01:27,170 Дакле, то је прва ствар ћемо да урадимо. 30 00:01:27,170 --> 00:01:29,500 >> Идемо у фопен речник за читање. 31 00:01:29,500 --> 00:01:31,680 И ми ћемо морати да сигуран да је успео. 32 00:01:31,680 --> 00:01:35,920 Дакле, ако се вратио НУЛЛ, онда нисмо успешно отворите речник. 33 00:01:35,920 --> 00:01:37,440 И ми треба да се врате лажна. 34 00:01:37,440 --> 00:01:41,580 Али под претпоставком да је то успешно учинио отворен, онда желимо да прочитате 35 00:01:41,580 --> 00:01:42,400 речник. 36 00:01:42,400 --> 00:01:46,450 Дакле, имајте петље док не нађемо неки разлог да се пробије из ове петље, 37 00:01:46,450 --> 00:01:47,570 који ћемо видети. 38 00:01:47,570 --> 00:01:48,920 Зато имајте петље. 39 00:01:48,920 --> 00:01:51,780 >> А сада ћемо да маллоц једну чвор. 40 00:01:51,780 --> 00:01:54,020 И наравно да је потребно да емитују проверите поново. 41 00:01:54,020 --> 00:01:58,680 Дакле, ако маллоцинг није успео, онда желимо да истовари било ког чвора који смо 42 00:01:58,680 --> 00:02:02,590 десило пре маллоц, затворите речник и ретурн. 43 00:02:02,590 --> 00:02:06,830 Али игноришући то, под претпоставком да успели, онда желимо да користимо фсцанф 44 00:02:06,830 --> 00:02:12,400 да прочита једну реч из наше дицтионари у нашу чвора. 45 00:02:12,400 --> 00:02:17,940 Дакле, запамтите да је реч улаз> Чар Реч бафер величине ленгхтх + 1 46 00:02:17,940 --> 00:02:20,300 да ћемо држати реч унутра 47 00:02:20,300 --> 00:02:25,070 >> Дакле фсцанф ће да се врати 1, док као што је било у стању да успешно 48 00:02:25,070 --> 00:02:26,750 прочитајте реч из датотеке. 49 00:02:26,750 --> 00:02:30,460 Ако било грешка се дешава, или ми до краја датотеке, она 50 00:02:30,460 --> 00:02:31,950 неће вратити 1. 51 00:02:31,950 --> 00:02:35,180 У том случају се не врати 1, смо коначно ћемо да се пробије из 52 00:02:35,180 --> 00:02:37,280 ово док петља. 53 00:02:37,280 --> 00:02:42,770 Дакле, видимо да када смо успешно прочитајте реч у 54 00:02:42,770 --> 00:02:48,270 улаз> реч, онда ћемо да Реч користећи наш хеш функције. 55 00:02:48,270 --> 00:02:49,580 >> Хајде да погледамо хасх функција. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Тако да стварно не треба да разумем ово. 58 00:02:55,610 --> 00:02:59,460 И заправо ми само извукли ову хасх функционишу са интернета. 59 00:02:59,460 --> 00:03:04,010 Једина ствар коју треба да схватите јесте да то траје цхар * рец. 60 00:03:04,010 --> 00:03:08,960 Дакле, то је узимање ниску као улаз, а повратак непотписани инт као излаз. 61 00:03:08,960 --> 00:03:12,360 Дакле, то је све хасх функција, то је узима у улаз и даје вам 62 00:03:12,360 --> 00:03:14,490 индекс у Хасхтабле. 63 00:03:14,490 --> 00:03:18,530 >> Приметимо да смо МОДИНГ по НУМ_БУЦКЕТС, тако да вредност вратио 64 00:03:18,530 --> 00:03:21,730 заправо је индекс у Хасхтабле а не индекс изван 65 00:03:21,730 --> 00:03:24,320 граница низа. 66 00:03:24,320 --> 00:03:28,060 Дакле, с обзиром да је функција, идемо да размотре реч да ми чита 67 00:03:28,060 --> 00:03:29,390 речник. 68 00:03:29,390 --> 00:03:31,700 А онда ћемо користити да тараба да убаците 69 00:03:31,700 --> 00:03:33,750 улазак у Хасхтабле. 70 00:03:33,750 --> 00:03:38,520 >> Сада Хасхтабле хасх је струја повезани листу у табели. 71 00:03:38,520 --> 00:03:41,410 И то је врло могуће да је то само НУЛЛ. 72 00:03:41,410 --> 00:03:44,960 Желимо да убаците наш улазак на почетком овог повезаној листи. 73 00:03:44,960 --> 00:03:48,600 И тако ћемо имати нашу струју улазна тачка за шта Хасхтабле 74 00:03:48,600 --> 00:03:50,380 тренутно указује на. 75 00:03:50,380 --> 00:03:53,310 А онда ћемо за складиштење, у Хасхтабле на 76 00:03:53,310 --> 00:03:55,350 тараба, тренутна ставка. 77 00:03:55,350 --> 00:03:59,320 Дакле, ове две линије успешно убацили унос на почетку 78 00:03:59,320 --> 00:04:02,260 повезана листа у том индексу у Хасхтабле. 79 00:04:02,260 --> 00:04:04,900 >> Када смо завршили са тим, знамо да смо нашли још једну реч у 80 00:04:04,900 --> 00:04:07,790 речник, а ми смо опет повећавати. 81 00:04:07,790 --> 00:04:13,960 Дакле, ми би радили да до фсцанф коначно вратио нешто не-1 на 82 00:04:13,960 --> 00:04:16,950 која тачка запамтите да морамо да слободан улаз. 83 00:04:16,950 --> 00:04:19,459 Дакле, овде смо маллоцед унос. 84 00:04:19,459 --> 00:04:21,329 И покушали смо да прочитам нешто из речника. 85 00:04:21,329 --> 00:04:23,910 И нисмо успешно прочитао нешто из речника, у 86 00:04:23,910 --> 00:04:26,650 том случају морамо да ослободимо унос да ми никада заправо ставили у 87 00:04:26,650 --> 00:04:29,140 Хасхтабле, и коначно сломити. 88 00:04:29,140 --> 00:04:32,750 >> Једном ми избити морамо да видимо, добро, смо избити јер тамо 89 00:04:32,750 --> 00:04:34,360 Читао грешка из фајла? 90 00:04:34,360 --> 00:04:37,120 Или смо ми избити јер смо достигла крај датотеке? 91 00:04:37,120 --> 00:04:39,480 Ако је грешка, онда желимо да се врати лажна. 92 00:04:39,480 --> 00:04:40,930 Јер оптерећење није успела. 93 00:04:40,930 --> 00:04:43,890 И у процесу желимо да истовари све речи које смо прочитали у, и 94 00:04:43,890 --> 00:04:45,670 затворите датотеку речника. 95 00:04:45,670 --> 00:04:48,740 >> Под претпоставком да смо успели, онда смо само и даље треба да се затворите речник 96 00:04:48,740 --> 00:04:53,040 филе, и коначно врати истина, јер смо успешно учитан речник. 97 00:04:53,040 --> 00:04:54,420 И то је то за оптерећење. 98 00:04:54,420 --> 00:04:59,020 Тако сада проверити, дали напуњен Хасхтабле, ће изгледати овако. 99 00:04:59,020 --> 00:05:03,140 Дакле провери, она враћа боол, који је ће указати да ли прошао 100 00:05:03,140 --> 00:05:07,530 у цхар * речју, да ли прошао у стринг је у нашем речнику. 101 00:05:07,530 --> 00:05:09,890 Дакле, ако је то у речнику, ако је то у нашој Хасхтабле, 102 00:05:09,890 --> 00:05:11,170 ми ћемо вратити истина. 103 00:05:11,170 --> 00:05:13,380 И ако то није, ми ћемо се вратити фалсе. 104 00:05:13,380 --> 00:05:17,740 >> Имајући у виду ово прошло у речи, ми смо ће хасх реч. 105 00:05:17,740 --> 00:05:22,110 Сада важна ствар је да се препознају да смо у оптерећењу знали да све 106 00:05:22,110 --> 00:05:23,820 речи ми ћемо бити мала слова. 107 00:05:23,820 --> 00:05:25,820 Али овде нисмо тако сигурни. 108 00:05:25,820 --> 00:05:29,510 Ако погледамо наше хеш функције, наша хасх функција заправо 109 00:05:29,510 --> 00:05:32,700 је мања кућишта сваки карактер речи. 110 00:05:32,700 --> 00:05:37,940 Дакле, без обзира на капитализацију реч, наша хасх функција је повратак 111 00:05:37,940 --> 00:05:42,270 Исти индекс за све што капитализација је, јер би то имало 112 00:05:42,270 --> 00:05:45,280 вратила за потпуно мала слова верзија речи. 113 00:05:45,280 --> 00:05:46,600 У реду. 114 00:05:46,600 --> 00:05:49,790 То је наш индекс је у Хасхтабле за ову реч. 115 00:05:49,790 --> 00:05:52,940 >> Сада ово за петље ће поновити над повезане листе 116 00:05:52,940 --> 00:05:55,000 који је био на том индексу. 117 00:05:55,000 --> 00:05:59,610 Дакле, ми смо приметили иницијализација унос да укаже на тај индекс. 118 00:05:59,610 --> 00:06:02,750 Идемо у настави док унос! = НУЛЛ. 119 00:06:02,750 --> 00:06:07,770 И не заборавите да ажурирате показивач у наш повезана листа улаз = улаз> следећу. 120 00:06:07,770 --> 00:06:14,400 Дакле, имамо тренутни улазак у Следећа ставка у повезаној листи. 121 00:06:14,400 --> 00:06:19,250 >> Дакле, за сваки унос у повезаној листи, ћемо користити стрцасецмп. 122 00:06:19,250 --> 00:06:20,330 То није СтрЦомп. 123 00:06:20,330 --> 00:06:23,780 Зато још једном, желимо да радим ствари случај инсенситивели. 124 00:06:23,780 --> 00:06:27,870 Дакле, ми користимо стрцасецмп да упоредите Реч која је прошла кроз ово 125 00:06:27,870 --> 00:06:31,860 Функција против речи који је у овај унос. 126 00:06:31,860 --> 00:06:35,570 Уколико се врати нулу, то значи да је утакмица, у том случају ми желимо да 127 00:06:35,570 --> 00:06:36,630 ретурн труе. 128 00:06:36,630 --> 00:06:39,590 Успешно фоунд реч у нашем Хасхтабле. 129 00:06:39,590 --> 00:06:43,040 >> Ако није било утакмица, онда смо ће петљу поново и погледајте 130 00:06:43,040 --> 00:06:43,990 следећи унос. 131 00:06:43,990 --> 00:06:47,640 И ми ћемо наставити петље док тамо су ставке у овој повезаној листи. 132 00:06:47,640 --> 00:06:50,160 Шта се дешава ако се сломити од овога за петљу? 133 00:06:50,160 --> 00:06:55,110 То значи да нисмо пронашли унос који упарен ову реч, у ком случају 134 00:06:55,110 --> 00:07:00,220 враћамо лажно указују на то да наш Хасхтабле не садрже ову реч. 135 00:07:00,220 --> 00:07:02,540 И то је провера. 136 00:07:02,540 --> 00:07:04,790 >> Па хајде да погледамо величине. 137 00:07:04,790 --> 00:07:06,970 Сада величина ће бити прилично једноставан. 138 00:07:06,970 --> 00:07:11,080 Пошто се сећате у оптерећења, за сваку реч открили смо, ми инкрементира глобална 139 00:07:11,080 --> 00:07:12,880 променљива величина Хасхтабле. 140 00:07:12,880 --> 00:07:16,480 Дакле, величина је функција управо дешава да се врати глобалну променљиву. 141 00:07:16,480 --> 00:07:18,150 И то је то. 142 00:07:18,150 --> 00:07:22,300 >> Сада коначно, морамо да истовари речник једном све то ради. 143 00:07:22,300 --> 00:07:25,340 Па како ћемо то урадити? 144 00:07:25,340 --> 00:07:30,440 Управо овде смо преко петље Све корпе нашег стола. 145 00:07:30,440 --> 00:07:33,240 Дакле, постоје НУМ_БУЦКЕТС кашике. 146 00:07:33,240 --> 00:07:37,410 И за сваку повезане листе у нашој Хасхтабле, идемо на петљи преко 147 00:07:37,410 --> 00:07:41,070 целовитост повезаној листи, ослобађајући сваки елемент. 148 00:07:41,070 --> 00:07:42,900 >> Сада морамо да будемо опрезни. 149 00:07:42,900 --> 00:07:47,910 Дакле, овде имамо привремену променљиву то је чување показивач на следећи 150 00:07:47,910 --> 00:07:49,730 елемент у повезаној листи. 151 00:07:49,730 --> 00:07:52,140 А онда ћемо бесплатно тренутни елемент. 152 00:07:52,140 --> 00:07:55,990 Морамо бити сигурни да радимо ово, јер ми Не могу само да ослободе елемента струје 153 00:07:55,990 --> 00:07:59,180 а затим покушајте да приступите следећи показивач, јер кад смо га ослободили, 154 00:07:59,180 --> 00:08:00,870 меморија постаје неважећи. 155 00:08:00,870 --> 00:08:04,990 >> Дакле, морамо да око показивач на Следећи елемент, онда можемо ослободити 156 00:08:04,990 --> 00:08:08,360 струја елеменат, а онда можемо да ажурирате наш тренутни елемент да укаже на 157 00:08:08,360 --> 00:08:09,550 Следећи елемент. 158 00:08:09,550 --> 00:08:12,800 Ми ћемо петља док постоје елементи у овом повезаној листи. 159 00:08:12,800 --> 00:08:15,620 Ми ћемо то урадити за све повезано листе у Хасхтабле. 160 00:08:15,620 --> 00:08:19,460 А када смо завршили са тим, ми смо потпуно истоварио Хасхтабле, и 161 00:08:19,460 --> 00:08:20,190 готови смо. 162 00:08:20,190 --> 00:08:23,200 Дакле, то је немогуће за искрцај да се икада врате лажна. 163 00:08:23,200 --> 00:08:26,470 А када смо завршили, ми вратио само истина. 164 00:08:26,470 --> 00:08:29,000 >> Дајмо Ово решење пробати. 165 00:08:29,000 --> 00:08:33,070 Дакле, хајде да погледамо шта су наши струцт чвор ће изгледати. 166 00:08:33,070 --> 00:08:36,220 Овде видимо да ћемо имати боол реч и струцт чвор * деца 167 00:08:36,220 --> 00:08:37,470 носач ПИСМО. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Дакле, прва ствар коју можда питајући се, зашто је Алпхабет 170 00:08:42,020 --> 00:08:44,660 ед дефинисан као 27? 171 00:08:44,660 --> 00:08:47,900 Па, сећам се да ћемо морати да руковање апостроф. 172 00:08:47,900 --> 00:08:51,910 Тако да ће бити нешто од Посебан случај у овом програму. 173 00:08:51,910 --> 00:08:54,710 >> Сада се како трие заправо ради. 174 00:08:54,710 --> 00:08:59,380 Рецимо да смо индексирање реч "мачке". Затим из корена трие, 175 00:08:59,380 --> 00:09:02,610 ћемо да погледате децу низ, а ми ћемо да погледамо 176 00:09:02,610 --> 00:09:08,090 индекс који одговара слову Ц. Тако да ће бити индексиране 2. 177 00:09:08,090 --> 00:09:11,530 Дакле с обзиром да, та воља дајте нам нови чвор. 178 00:09:11,530 --> 00:09:13,820 А онда ћемо радити из тог чвора. 179 00:09:13,820 --> 00:09:17,770 >> Дакле, с обзиром да чвор, ми смо поново ће погледати на децу низ. 180 00:09:17,770 --> 00:09:22,110 И ми ћемо да погледамо индекс нула да одговара А у мачку. 181 00:09:22,110 --> 00:09:27,170 Дакле, онда ћемо да идемо у том чвору, и обзиром да чвор идемо 182 00:09:27,170 --> 00:09:31,090 да погледате на крају је а одговара за Т. и преласка на том чвору, 183 00:09:31,090 --> 00:09:35,530 коначно, ми смо потпуно гледали кроз наша реч "мачка". А сада боол 184 00:09:35,530 --> 00:09:40,960 Реч је требало да укаже да ли ово даје реч је заправо реч. 185 00:09:40,960 --> 00:09:43,470 >> Па зашто нам је потребан тај специјални случај? 186 00:09:43,470 --> 00:09:47,700 Па шта речи "катастрофа" је у нашем речнику, али 187 00:09:47,700 --> 00:09:50,150 реч "мачка" није? 188 00:09:50,150 --> 00:09:54,580 Зато и тражимо да видимо да ли реч "мачка" је у нашем речнику, ми смо 189 00:09:54,580 --> 00:09:59,970 ће успешно гледати кроз индекси Ц-Т у региону чвор. 190 00:09:59,970 --> 00:10:04,290 Али то је само зато катастрофа десило да створи чворове на путу 191 00:10:04,290 --> 00:10:07,190 од Ц-А-Т, све до крај речи. 192 00:10:07,190 --> 00:10:12,020 Дакле, реч воид се користи да укаже да ли ова локација 193 00:10:12,020 --> 00:10:14,310 заправо указује на реч. 194 00:10:14,310 --> 00:10:15,140 >> У реду. 195 00:10:15,140 --> 00:10:19,310 Дакле, сада знамо шта је трие је ће изгледати, погледајмо 196 00:10:19,310 --> 00:10:20,730 лоад функцију. 197 00:10:20,730 --> 00:10:24,610 Дакле, оптерећење ће вратити боол за ли смо успешно или 198 00:10:24,610 --> 00:10:26,720 безуспешно лоадед речник. 199 00:10:26,720 --> 00:10:30,460 И ово ће бити речник да желимо да се учита. 200 00:10:30,460 --> 00:10:33,930 >> Дакле, прва ствар коју смо да урадимо је отворен до тог речника за читање. 201 00:10:33,930 --> 00:10:36,160 И морамо да се уверите нисмо пропустили. 202 00:10:36,160 --> 00:10:39,580 Дакле, ако није био речник успешно отворен, она ће се вратити 203 00:10:39,580 --> 00:10:42,400 нулл, у ком случају ми смо ће вратити фалсе. 204 00:10:42,400 --> 00:10:47,230 Али под претпоставком да је успешно отворен, онда можемо да чита 205 00:10:47,230 --> 00:10:48,220 кроз речнику. 206 00:10:48,220 --> 00:10:50,880 >> Дакле, прва ствар коју ћемо Желим да урадите је да имамо ово 207 00:10:50,880 --> 00:10:52,500 глобална променљива корен. 208 00:10:52,500 --> 00:10:56,190 Сада корен ће бити чвор *. 209 00:10:56,190 --> 00:10:59,760 То је врх наше трие да смо Биће итератинг преко. 210 00:10:59,760 --> 00:11:02,660 Дакле, прва ствар коју ћемо да желите да урадите је издвојити 211 00:11:02,660 --> 00:11:04,140 меморија за наш корен. 212 00:11:04,140 --> 00:11:07,980 Приметимо да смо помоћу цаллоц функција, која је у основи иста 213 00:11:07,980 --> 00:11:11,500 као маллоц функције, осим што је гарантовано нешто што је да се врати 214 00:11:11,500 --> 00:11:13,180 потпуно нулу напоље. 215 00:11:13,180 --> 00:11:17,290 Дакле, ако смо користили маллоц, ми би требало да проћи кроз све тројке у нашој 216 00:11:17,290 --> 00:11:20,160 чвор, и уверите се да сви су нула. 217 00:11:20,160 --> 00:11:22,710 Дакле цаллоц ће то урадити за нас. 218 00:11:22,710 --> 00:11:26,330 >> Сада баш као маллоц, морамо да сигурни да алокација је заправо 219 00:11:26,330 --> 00:11:27,520 успешна. 220 00:11:27,520 --> 00:11:29,990 Ако се то вратио нулл, онда смо треба да се затвори или речник 221 00:11:29,990 --> 00:11:32,100 филе и ретурн. 222 00:11:32,100 --> 00:11:36,835 Дакле, под претпоставком да је расподела успешан, ми ћемо користити чвор * 223 00:11:36,835 --> 00:11:40,270 курсор да вршите итерацију кроз нашу трие. 224 00:11:40,270 --> 00:11:43,890 Дакле, наши корени никада неће променити, али ми ћемо користити курсор 225 00:11:43,890 --> 00:11:47,875 заправо иде од чвора до чвора. 226 00:11:47,875 --> 00:11:50,940 >> Дакле, у овом за петљу читамо кроз датотеку речника. 227 00:11:50,940 --> 00:11:53,670 И ми користимо фгетц. 228 00:11:53,670 --> 00:11:56,290 Фгетц ће да зграби један карактер из датотеке. 229 00:11:56,290 --> 00:11:59,370 Ми ћемо наставити отимања карактера док се не постигне 230 00:11:59,370 --> 00:12:01,570 крај датотеке. 231 00:12:01,570 --> 00:12:03,480 >> Постоје два случаја морамо да рукује. 232 00:12:03,480 --> 00:12:06,610 Прво, ако карактер није била нова линија. 233 00:12:06,610 --> 00:12:10,450 Дакле, ми знамо да ли је то нова линија, затим ми смо о томе да се пресели на нову реч. 234 00:12:10,450 --> 00:12:15,240 Али под претпоставком да није нова линија, затим Овде желимо да схватим 235 00:12:15,240 --> 00:12:18,380 Индекс ћемо индекса у у низу деце која 236 00:12:18,380 --> 00:12:19,810 смо гледали раније. 237 00:12:19,810 --> 00:12:23,880 >> Дакле, као што сам раније рекао, потребно је да Посебан случај апостроф. 238 00:12:23,880 --> 00:12:26,220 Приметимо да смо користећи тројног оператер овде. 239 00:12:26,220 --> 00:12:29,580 Зато ћемо читати ово као, ако карактер читамо у било 240 00:12:29,580 --> 00:12:35,330 апостроф, онда ћемо поставити индекс = "ПИСМО" -1, који ће 241 00:12:35,330 --> 00:12:37,680 бити индекс 26. 242 00:12:37,680 --> 00:12:41,130 >> Иначе, ако то није био апостроф, тамо ћемо поставити индекс 243 00:12:41,130 --> 00:12:43,760 једнака ц -. 244 00:12:43,760 --> 00:12:49,030 Дакле, запамтите назад у односу на претходно п-сета, Ц - ће нам дати 245 00:12:49,030 --> 00:12:53,410 азбучни положај Ц. Дакле, ако Ц је слово, ово ће 246 00:12:53,410 --> 00:12:54,700 дај нам индекс нула. 247 00:12:54,700 --> 00:12:58,120 За слово Б, он ће дати ус индекс 1, и тако даље. 248 00:12:58,120 --> 00:13:03,010 >> Дакле, ово нам даје индекс у деца низ који желимо. 249 00:13:03,010 --> 00:13:08,890 Сада, ако овај индекс је тренутно у нулл деца, то значи да чвор 250 00:13:08,890 --> 00:13:11,830 тренутно не постоји са тог пута. 251 00:13:11,830 --> 00:13:15,160 Дакле, морамо да издвоји чвор за тај пут. 252 00:13:15,160 --> 00:13:16,550 То је оно што ћемо урадити овде. 253 00:13:16,550 --> 00:13:20,690 >> Тако ћемо поново користити цаллоц функција, тако да не морамо да 254 00:13:20,690 --> 00:13:22,880 нула све показиваче. 255 00:13:22,880 --> 00:13:27,240 И опет је потребно да проверите да цаллоц није пропустио. 256 00:13:27,240 --> 00:13:30,700 Ако цаллоц пропустио, онда морамо да истовари све, затворите наш 257 00:13:30,700 --> 00:13:32,820 речник, и ретурн. 258 00:13:32,820 --> 00:13:40,050 Дакле, под претпоставком да не успеју, онда то ће створити нову дете за нас. 259 00:13:40,050 --> 00:13:41,930 И онда ћемо ићи на то дете. 260 00:13:41,930 --> 00:13:44,960 Наш курсор ће поновити до тог детета. 261 00:13:44,960 --> 00:13:49,330 >> Сада, ако то није била нула за почетак, онда курсор само може поновити 262 00:13:49,330 --> 00:13:52,590 до тог детета без заправо има да издвоји ништа. 263 00:13:52,590 --> 00:13:56,730 Ово је случај када смо се први пут десило доделити реч "мачка". И 264 00:13:56,730 --> 00:14:00,330 то значи да кад идемо да издвоји "Катастрофа", ми не треба да се створи 265 00:14:00,330 --> 00:14:01,680 чворова за Ц-А-Т опет. 266 00:14:01,680 --> 00:14:04,830 Они већ постоје. 267 00:14:04,830 --> 00:14:06,080 >> Шта је ово друго? 268 00:14:06,080 --> 00:14:10,480 То је стање где је ц био косих н, где је ц је нова линија. 269 00:14:10,480 --> 00:14:13,710 То значи да смо успешно завршен реч. 270 00:14:13,710 --> 00:14:16,860 Сада шта желимо да урадимо када смо успешно завршен реч? 271 00:14:16,860 --> 00:14:21,100 Ми ћемо користити ову област реч унутар нашег струцт чвора. 272 00:14:21,100 --> 00:14:23,390 Желимо да подесите да се истина. 273 00:14:23,390 --> 00:14:27,150 Тако да указује на то да овај чвор означава успешан 274 00:14:27,150 --> 00:14:29,250 реч, стварна реч. 275 00:14:29,250 --> 00:14:30,940 >> Сада сет то труе. 276 00:14:30,940 --> 00:14:35,150 Желимо да вратите наше курсор на тачку до почетка Трие поново. 277 00:14:35,150 --> 00:14:40,160 И на крају, увећава наш речник величина, јер смо нашли други посао. 278 00:14:40,160 --> 00:14:43,230 Тако ћемо да радимо то, читање карактера по карактеру, 279 00:14:43,230 --> 00:14:49,150 изградње нових чворова у нашој трие и за сваку реч у речнику, док 280 00:14:49,150 --> 00:14:54,020 коначно достићи Ц! = ЕОФ, у којој Случај смо се пробије из датотеке. 281 00:14:54,020 --> 00:14:57,050 >> Сада постоје два случаја под које смо можда погодио ЕОФ. 282 00:14:57,050 --> 00:15:00,980 Први је ако је било грешке читање из датотеке. 283 00:15:00,980 --> 00:15:03,470 Дакле, ако постоји грешка, ми Потребно је да урадите типичан. 284 00:15:03,470 --> 00:15:06,460 Истовар све, близу фајл, ретурн. 285 00:15:06,460 --> 00:15:09,810 Под претпоставком да није било грешке, да само значи да заправо погодио крај 286 00:15:09,810 --> 00:15:13,750 фајл, у ком случају, ми смо затворили филе и вратите тачно, јер смо 287 00:15:13,750 --> 00:15:17,330 успешно учитан речник у нашу трие. 288 00:15:17,330 --> 00:15:20,170 >> Дакле, хајде да проверимо чек. 289 00:15:20,170 --> 00:15:25,156 Гледајући на функцији проверу, видимо да провера ће вратити боол. 290 00:15:25,156 --> 00:15:29,680 То враћа труе ако ова реч да је то буде усвојен је у нашој трие. 291 00:15:29,680 --> 00:15:32,110 То враћа иначе фалсе. 292 00:15:32,110 --> 00:15:36,050 Дакле, како се ви утврдите да ли ова реч је у нашој трие? 293 00:15:36,050 --> 00:15:40,190 >> Ми овде видимо да, баш као и пре, ћемо користити курсор за итерацију 294 00:15:40,190 --> 00:15:41,970 кроз нашу трие. 295 00:15:41,970 --> 00:15:46,600 Сада овде ћемо поновити преко целе наше речи. 296 00:15:46,600 --> 00:15:50,620 Дакле итератинг преко речи смо прошли, ћемо одредити 297 00:15:50,620 --> 00:15:56,400 индекс у низу деце која одговара речи носећи И. Па ово 298 00:15:56,400 --> 00:15:59,670 ће изгледати баш као оптерећење, где ако реч [и] 299 00:15:59,670 --> 00:16:03,310 је апостроф, онда желимо да користи индекс "Буквар" - 1. 300 00:16:03,310 --> 00:16:05,350 Зато што смо утврдили да је је место где ћемо да сачувате 301 00:16:05,350 --> 00:16:07,100 апострофа. 302 00:16:07,100 --> 00:16:11,780 >> Иначе ћемо користити два нижу реч носач И. Дакле, запамтите ту реч може 303 00:16:11,780 --> 00:16:13,920 имати произвољну капитализацију. 304 00:16:13,920 --> 00:16:17,540 И тако желимо да се уверите да смо користећи малим словима верзију ствари. 305 00:16:17,540 --> 00:16:21,920 А онда одузмите од тога "" на једном опет нам азбучном 306 00:16:21,920 --> 00:16:23,880 положај тог карактера. 307 00:16:23,880 --> 00:16:27,680 Дакле, то ће бити наш индекс у низу деце. 308 00:16:27,680 --> 00:16:32,420 >> И сада, ако је индекс у деце низ нулл, значи да смо 309 00:16:32,420 --> 00:16:34,990 више не може наставити итератинг доле нашег трие. 310 00:16:34,990 --> 00:16:38,870 Ако је то случај, та реч не може можда бити у нашем трие. 311 00:16:38,870 --> 00:16:42,340 Будући да је била, да би значи да би путања 312 00:16:42,340 --> 00:16:43,510 до те речи. 313 00:16:43,510 --> 00:16:45,290 И никада не би наићи нулл. 314 00:16:45,290 --> 00:16:47,850 Дакле сусрету нулл, враћамо лажна. 315 00:16:47,850 --> 00:16:49,840 Реч није у речнику. 316 00:16:49,840 --> 00:16:53,660 Да није нула, онда смо ће наставити итератинг. 317 00:16:53,660 --> 00:16:57,220 >> Дакле, идемо тамо курсор да укаже на то посебно 318 00:16:57,220 --> 00:16:59,760 чвор у том индексу. 319 00:16:59,760 --> 00:17:03,150 Ми и даље то раде током цео реч, претпостављајући 320 00:17:03,150 --> 00:17:03,950 ми никада ударио нулл. 321 00:17:03,950 --> 00:17:07,220 То значи да смо били у могућности да се кроз целе речи и наћи 322 00:17:07,220 --> 00:17:08,920 чвор у нашем покушају. 323 00:17:08,920 --> 00:17:10,770 Али нисмо још готови. 324 00:17:10,770 --> 00:17:12,290 >> Ми не желимо да се врате само истина. 325 00:17:12,290 --> 00:17:14,770 Ми желимо да се врати курсор> реч. 326 00:17:14,770 --> 00:17:18,980 Од запамти поново, је "мачка" није у нашем речнику, а "катастрофа" 327 00:17:18,980 --> 00:17:22,935 се, онда ћемо успешно добијамо кроз реч "мачка". Али курсор 328 00:17:22,935 --> 00:17:25,760 реч ће бити лажна и није истина. 329 00:17:25,760 --> 00:17:30,930 Тако смо се вратили курсор реч да укаже да ли је ово чвор је заправо реч. 330 00:17:30,930 --> 00:17:32,470 И то је то за проверу. 331 00:17:32,470 --> 00:17:34,250 >> Дакле, хајде да проверимо величину. 332 00:17:34,250 --> 00:17:37,350 Дакле, величина ће бити прилично лако јер, запамти у оптерећењу, ми смо 333 00:17:37,350 --> 00:17:41,430 увецава речник величине за свака реч коју срећемо. 334 00:17:41,430 --> 00:17:45,350 Дакле, величина је само да врати речник величину. 335 00:17:45,350 --> 00:17:47,390 И то је то. 336 00:17:47,390 --> 00:17:50,590 >> Дакле, на крају смо истовари. 337 00:17:50,590 --> 00:17:55,100 Дакле истовари, идемо користити рекурзивни функција да заиста уради све 338 00:17:55,100 --> 00:17:56,530 рада за нас. 339 00:17:56,530 --> 00:17:59,340 Дакле, наша функција ће бити позван на унлоадер. 340 00:17:59,340 --> 00:18:01,650 Шта је унлоадер ћеш да урадиш? 341 00:18:01,650 --> 00:18:06,580 Ми овде видимо да унлоадер ће поновити над сва деца на 342 00:18:06,580 --> 00:18:08,410 овај чвор. 343 00:18:08,410 --> 00:18:11,750 А ако дете чвор није нулл, онда ћемо 344 00:18:11,750 --> 00:18:13,730 истовари дете чвор. 345 00:18:13,730 --> 00:18:18,010 >> Дакле, ово је ви рекурзивно растеретити све наше деце. 346 00:18:18,010 --> 00:18:21,080 Када смо сигурни да све наше деце су искрцани, онда смо 347 00:18:21,080 --> 00:18:25,210 да се ослободимо, па истовари себе. 348 00:18:25,210 --> 00:18:29,460 Ово ће радити рекурзивно истовари цео трие. 349 00:18:29,460 --> 00:18:32,850 И онда када то урадимо, можемо само да се врате тачно. 350 00:18:32,850 --> 00:18:34,210 Унлоад не може успети. 351 00:18:34,210 --> 00:18:35,710 Ми само ослобађање ствари. 352 00:18:35,710 --> 00:18:38,870 Дакле, када смо урадили ослобађање све, вратите истина. 353 00:18:38,870 --> 00:18:40,320 И то је то. 354 00:18:40,320 --> 00:18:41,080 Моје име је Роб. 355 00:18:41,080 --> 00:18:42,426 И то је био буквар. 356 00:18:42,426 --> 00:18:47,830 >> [Музика свира]