1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> SPEAKER 1: Dajmo ta rešitev poskusiti. 3 00:00:03,070 --> 00:00:07,130 Torej, vzemimo si oglejte, kaj naše Struct vozlišče bo izgledal. 4 00:00:07,130 --> 00:00:11,040 Tukaj vidimo, da bomo imeli Bool Beseda in vozlišče zvezda Struct 5 00:00:11,040 --> 00:00:12,990 Otroci oklepati abecedo. 6 00:00:12,990 --> 00:00:18,720 Torej prva stvar, ki jo morda sprašujete, Zakaj se abeceda hash opredeljena kot 27? 7 00:00:18,720 --> 00:00:22,540 No, ne pozabite, da bomo potrebovali da se ravnanje opuščaj, tako 8 00:00:22,540 --> 00:00:25,610 da se dogaja, da se nekoliko posebna Primer v celotnem programu. 9 00:00:25,610 --> 00:00:28,780 >> OK, zdaj se spominjam, kako Trie dejansko deluje. 10 00:00:28,780 --> 00:00:33,420 Recimo, da smo indeksiranje besedo mačke, potem iz korenin naše Trsta, 11 00:00:33,420 --> 00:00:36,670 bomo pogled na otroke matrika, in gremo pogledati 12 00:00:36,670 --> 00:00:42,250 Indeks, ki ustreza črko C. tako da bi indeks dva. 13 00:00:42,250 --> 00:00:46,400 Torej, glede na to, da nam bo dala novo vozlišče, nato pa se bomo 14 00:00:46,400 --> 00:00:47,880 delati iz tega vozlišča. 15 00:00:47,880 --> 00:00:51,830 >> Torej, glede na to vozlišče, smo še enkrat bo pogled na paleto otroke, 16 00:00:51,830 --> 00:00:56,170 in bomo pogled na indeks ničelni ustrezati A v mačka. 17 00:00:56,170 --> 00:01:01,240 Potem smo šli na to vozlišče, in glede na to, da je vozlišče, gremo 18 00:01:01,240 --> 00:01:05,170 pogled na indeks, ki ustreza na T. in se gibljejo na to vozlišče, 19 00:01:05,170 --> 00:01:09,590 Nazadnje smo popolnoma videti skozi našo besedo Cat, in zdaj Bool 20 00:01:09,590 --> 00:01:15,020 Beseda naj bi kazali, ali ta dana beseda je pravzaprav beseda. 21 00:01:15,020 --> 00:01:17,530 >> Torej, zakaj potrebujemo to poseben primer? 22 00:01:17,530 --> 00:01:21,680 No, kaj pa če je beseda katastrofa V našem slovarju, vendar 23 00:01:21,680 --> 00:01:24,120 Beseda mačka ne? 24 00:01:24,120 --> 00:01:29,030 Torej, je videti, da vidim, če je beseda mačka v našem slovarju, bomo 25 00:01:29,030 --> 00:01:34,880 Uspešno odmisliti indeksov C--T in doseči vozlišče, ampak to je 26 00:01:34,880 --> 00:01:39,760 Samo zato, ker katastrofa se je zgodilo ustvariti vozlišča na poti od C-A-T vse 27 00:01:39,760 --> 00:01:41,250 Tako na koncu besede. 28 00:01:41,250 --> 00:01:46,520 Torej je Bool Beseda uporablja navesti, ali To posebno mesto dejansko 29 00:01:46,520 --> 00:01:48,370 označuje besedo. 30 00:01:48,370 --> 00:01:52,920 >> Vse je v redu, tako da zdaj, da vemo, kaj Trie bo videti, pa si poglejmo 31 00:01:52,920 --> 00:01:54,800 v funkciji obremenitve. 32 00:01:54,800 --> 00:01:58,670 Torej obremenitev se bo vrnil bool Za ugotovitev, ali smo uspešno ali 33 00:01:58,670 --> 00:02:03,020 neuspešno naložen slovar in To se bo slovar 34 00:02:03,020 --> 00:02:04,520 ki jih želimo naložiti. 35 00:02:04,520 --> 00:02:08,310 Torej prva stvar, bomo storiti je odprt do tega slovarja za branje. 36 00:02:08,310 --> 00:02:12,060 Moramo zagotoviti, nismo ne, tako da, če slovarju ni bilo 37 00:02:12,060 --> 00:02:15,280 uspešno odprta, se bo vrnil Ne, v tem primeru bomo 38 00:02:15,280 --> 00:02:16,340 vrne False. 39 00:02:16,340 --> 00:02:21,290 Vendar ob predpostavki, da je uspešno odprt, potem lahko dejansko prebral 40 00:02:21,290 --> 00:02:22,310 s pomočjo slovarja. 41 00:02:22,310 --> 00:02:24,940 >> Torej prva stvar, ki jo bomo želite storiti, je, moramo to 42 00:02:24,940 --> 00:02:26,560 Globalna spremenljivka korenina. 43 00:02:26,560 --> 00:02:30,250 Zdaj, korenina se bo vozlišče zvezda. 44 00:02:30,250 --> 00:02:33,830 To je vrh naše Trsta, da smo bodo ponavljanjem skozi. 45 00:02:33,830 --> 00:02:38,200 Torej prva stvar, ki jo boste želeli, da storiti je rezervirati pomnilnika za naše korenine. 46 00:02:38,200 --> 00:02:42,040 >> Opazimo, da smo s pomočjo Calloc funkcija, ki je v bistvu enak 47 00:02:42,040 --> 00:02:45,560 kot funkcije malloc, razen, da je zagotovljeno, da se vrnete nekaj, kar je 48 00:02:45,560 --> 00:02:47,240 popolnoma nulo. 49 00:02:47,240 --> 00:02:51,350 Torej, če smo uporabili malloc, bi morali iti skozi vse napotke v našem 50 00:02:51,350 --> 00:02:54,220 vozlišče in poskrbite, da oni so vsi null. 51 00:02:54,220 --> 00:02:56,780 Tako da bo Calloc naredil za nas. 52 00:02:56,780 --> 00:03:00,390 >> Zdaj, tako kot malloc, moramo narediti zagotoviti, da dodelitev je dejansko 53 00:03:00,390 --> 00:03:01,580 uspešna. 54 00:03:01,580 --> 00:03:04,060 Če je ta vrnil nič, potem smo morali zapreti naše slovar 55 00:03:04,060 --> 00:03:06,170 datoteko in vrne False. 56 00:03:06,170 --> 00:03:11,040 Torej, ob predpostavki, da je porazdelitev uspešna, bomo uporabili vozlišča 57 00:03:11,040 --> 00:03:14,340 zvezda kurzor za ponovitev preko našega Trsta. 58 00:03:14,340 --> 00:03:17,950 Torej, naša korenina nikoli ne bo spremenilo, ampak bomo uporabili kurzor na 59 00:03:17,950 --> 00:03:20,770 dejansko šel od vozlišča do vozlišča. 60 00:03:20,770 --> 00:03:25,000 >> Vse je v redu, tako da v to zanko, smo branje skozi slovarju datoteko 61 00:03:25,000 --> 00:03:26,965 in smo ga uporabljate na fgetc. 62 00:03:26,965 --> 00:03:30,360 Torej fgetc se dogaja, da zgrabite single lik iz spisa. 63 00:03:30,360 --> 00:03:33,430 Bomo še naprej vzbujajoči znakov, medtem ko mi ne dosežejo 64 00:03:33,430 --> 00:03:37,540 konec datoteke, tako da so dva primera, ki jih moramo obvladovati. 65 00:03:37,540 --> 00:03:41,640 Prvič, če ni bilo znakov Nova linija, tako da vemo, če je bil nov 66 00:03:41,640 --> 00:03:44,480 linijo, potem bomo kmalu premakniti na novo besedo. 67 00:03:44,480 --> 00:03:49,300 Vendar ob predpostavki, da ni bilo novo linijo, nato pa Tukaj smo želeli ugotoviti, 68 00:03:49,300 --> 00:03:52,440 Indeks bomo indeksa v v matriki Otroci, ki 69 00:03:52,440 --> 00:03:53,890 smo pogledal prej. 70 00:03:53,890 --> 00:03:57,950 >> Torej, kot sem rekel prej, moramo Poseben primer opuščaj. 71 00:03:57,950 --> 00:04:01,040 Opazili smo, da uporabljate trikomponentne operaterja tukaj, tako da gremo, da se glasi 72 00:04:01,040 --> 00:04:05,500 to, kot če znak beremo v bilo opuščaj, potem pa gremo na 73 00:04:05,500 --> 00:04:11,740 nastavite indeks enak abecedi minusom 1, ki bo indeks 26. 74 00:04:11,740 --> 00:04:15,190 Drugega, če ne bi bilo opuščaj, potem bomo nastavili indeks 75 00:04:15,190 --> 00:04:17,820 enako c minus. 76 00:04:17,820 --> 00:04:23,090 Torej, se spomnite nazaj od prejšnjih p sklopov, c minus se dogaja, da nam 77 00:04:23,090 --> 00:04:27,470 abecedni položaj c, tako da, če c je pismo, bo to 78 00:04:27,470 --> 00:04:28,770 nam indeks zero. 79 00:04:28,770 --> 00:04:32,180 Za črko B, bi dal us indeks 1, in tako naprej. 80 00:04:32,180 --> 00:04:37,070 >> Torej, to nam daje indeksa na Otroci niz, ki ga želimo. 81 00:04:37,070 --> 00:04:42,540 Zdaj, če je ta indeks trenutno null leta matrika Otroci, to pomeni, da 82 00:04:42,540 --> 00:04:47,470 vozlišče trenutno ne obstaja od da je pot, zato moramo nameniti 83 00:04:47,470 --> 00:04:49,220 vozlišče za to pot. 84 00:04:49,220 --> 00:04:50,610 To je tisto, kar delamo tukaj. 85 00:04:50,610 --> 00:04:54,650 Torej bomo spet uporabite Calloc delujejo tako, da nimamo 86 00:04:54,650 --> 00:05:00,130 nič od vseh kazalcev, in mi, še enkrat, morate preveriti, da Calloc 87 00:05:00,130 --> 00:05:01,300 ni propadel. 88 00:05:01,300 --> 00:05:04,760 Če Calloc pa ne, potem moramo raztovarjanje vse, zatiskati 89 00:05:04,760 --> 00:05:06,880 slovar, in vrne False. 90 00:05:06,880 --> 00:05:14,110 >> Torej, ob predpostavki, da ne bo propadel, potem To bo ustvarilo nov otroka za nas, 91 00:05:14,110 --> 00:05:16,000 in potem bomo šli na tega otroka. 92 00:05:16,000 --> 00:05:19,030 Naša kazalec se bo Ponovil do tega otroka. 93 00:05:19,030 --> 00:05:23,390 Zdaj, če to ni bilo null na začetku, Nato kazalec lahko samo Ponovil 94 00:05:23,390 --> 00:05:26,650 do tega otroka, ne da bi dejansko ob dodeliti ničesar. 95 00:05:26,650 --> 00:05:30,790 To je primer, ko sva se prvič zgodilo dodeliti besedo mačka, in 96 00:05:30,790 --> 00:05:34,390 to pomeni, da ko gremo dodeliti katastrofa, nam ni treba ustvariti 97 00:05:34,390 --> 00:05:35,720 vozlišča za C-A-T znova. 98 00:05:35,720 --> 00:05:37,620 Že obstajajo. 99 00:05:37,620 --> 00:05:40,140 >> OK, kaj je to drugega? 100 00:05:40,140 --> 00:05:44,600 To je pogoj, kjer je c backslash n, kjer je c nova linija. 101 00:05:44,600 --> 00:05:47,780 To pomeni, da smo uspešno končan besedo. 102 00:05:47,780 --> 00:05:51,020 Zdaj, kaj želimo narediti, ko smo Uspešno zaključen besedo? 103 00:05:51,020 --> 00:05:55,250 Bomo uporabili to besedo polje znotraj našega Struct vozlišča. 104 00:05:55,250 --> 00:06:00,570 >> Želimo določiti, da Res je, da označuje, da vozlišče označuje 105 00:06:00,570 --> 00:06:03,320 Uspešno beseda dejansko beseda. 106 00:06:03,320 --> 00:06:05,050 Zdaj pa nastavite, da True. 107 00:06:05,050 --> 00:06:09,210 Želimo ponastaviti našo kazalec na točko na začetku Trsta znova. 108 00:06:09,210 --> 00:06:13,510 In končno, prirastek našo zbirko velikost, saj smo našli drugo besedo. 109 00:06:13,510 --> 00:06:16,450 >> Vse je v redu, tako da bomo vztrajati početje da je branje v karakterju, ki ga 110 00:06:16,450 --> 00:06:21,960 lik, gradnji novih vozlišč v naša Trie in za vsako besedo v 111 00:06:21,960 --> 00:06:26,810 slovar, dokler ne bomo na koncu dosegli c enak EOF, v tem primeru smo zlomiti 112 00:06:26,810 --> 00:06:28,100 iz spisa. 113 00:06:28,100 --> 00:06:31,110 Sedaj je na voljo v dveh primerih pod ki bi lahko zadeli smo EOF. 114 00:06:31,110 --> 00:06:35,680 Prvi je, če je prišlo do napake branje iz datoteke, tako da če ne bi bilo 115 00:06:35,680 --> 00:06:39,280 napaka, moramo storiti tipično razkladanje vse, zaprite datoteko 116 00:06:39,280 --> 00:06:40,520 vrne False. 117 00:06:40,520 --> 00:06:43,870 Ob predpostavki, da ni bilo napak, da samo pomeni, da smo dejansko prizadela konec 118 00:06:43,870 --> 00:06:47,820 datoteka, v tem primeru smo blizu datoteko in vrne True, saj smo 119 00:06:47,820 --> 00:06:51,010 uspešno naložen slovar v naši Trsta. 120 00:06:51,010 --> 00:06:54,240 >> V redu, zdaj pa odjaviti Check. 121 00:06:54,240 --> 00:06:58,780 Če pogledamo na Preverite funkcije, vidimo, Preverite, da se bo vrnil bool. 122 00:06:58,780 --> 00:07:03,740 Vrne True, če je to beseda, ki je prevalili je v našem Trsta. 123 00:07:03,740 --> 00:07:06,170 Vrne False drugače. 124 00:07:06,170 --> 00:07:10,110 >> Torej, kako bomo ugotoviti, ali ta beseda je v našem Trsta? 125 00:07:10,110 --> 00:07:14,270 Vidimo tukaj, da, tako kot prej, bomo uporabili kazalec za ponovitev 126 00:07:14,270 --> 00:07:16,010 preko našega Trsta. 127 00:07:16,010 --> 00:07:20,650 Zdaj, tukaj, bomo Ponovil nad našo celotno besedo. 128 00:07:20,650 --> 00:07:24,680 Torej ponavljanjem nad besedo smo opravili, bomo ugotoviti, 129 00:07:24,680 --> 00:07:29,280 indeks v paleto Otroci, ki ustreza besedo držala i. 130 00:07:29,280 --> 00:07:34,150 Torej, to bo videti natanko tako kot Obremenitev, kjer, če beseda nosilec i 131 00:07:34,150 --> 00:07:38,110 opuščaj, nato pa želimo uporabiti indeks abeceda minus 1, ker smo ugotovili, 132 00:07:38,110 --> 00:07:41,160 da je, če gremo Shranjevanje opuščaj. 133 00:07:41,160 --> 00:07:44,440 >> Sicer bomo uporabili tolower Beseda nosilec i. 134 00:07:44,440 --> 00:07:48,270 Torej, ne pozabite, da je beseda ima lahko samovoljno kapitalizacija, in tako smo 135 00:07:48,270 --> 00:07:51,590 želijo zagotoviti, da bomo s pomočjo male črke različica stvari. 136 00:07:51,590 --> 00:07:55,300 In nato odšteje od te male črke da, še enkrat, da nam 137 00:07:55,300 --> 00:07:57,940 po abecednem vrstnem redu te značaja. 138 00:07:57,940 --> 00:08:01,740 Tako, da se dogaja, da je naš indeks v matriki otrok. 139 00:08:01,740 --> 00:08:06,480 >> In zdaj, če je indeks v Otroci Niz je nična, to pomeni, da 140 00:08:06,480 --> 00:08:09,050 ne deluje več ponavljanjem navzdol našega Trsta. 141 00:08:09,050 --> 00:08:13,320 Če je temu tako, ta beseda ne more možnosti, da v naši Trsta, saj če 142 00:08:13,320 --> 00:08:18,000 so bili, bi to pomenilo, da bi bilo Pot do te besede, in bi jo 143 00:08:18,000 --> 00:08:19,350 nikoli ne naletijo na null. 144 00:08:19,350 --> 00:08:21,910 Tako srečujejo null vrnemo False. 145 00:08:21,910 --> 00:08:23,810 Besede ni v slovarju. 146 00:08:23,810 --> 00:08:28,200 Če ne bi bilo nič, potem pa gremo na naprej ponavljanjem, zato bomo 147 00:08:28,200 --> 00:08:33,150 posodobiti svoj kazalec, da kaže, da je Zlasti vozlišče v tem indeksu. 148 00:08:33,150 --> 00:08:36,659 >> Tako smo vztrajati početje, ki v celotnem celotna beseda. 149 00:08:36,659 --> 00:08:40,630 Ob predpostavki, da ne bomo nikoli udaril null, da sredstva smo lahko dobili skozi celoten 150 00:08:40,630 --> 00:08:44,840 svet in najti vozlišče v naši Trsta, vendar nismo še čisto končano. 151 00:08:44,840 --> 00:08:46,350 Mi ne želimo le vrnitev True. 152 00:08:46,350 --> 00:08:51,400 Želimo, da se vrnete kazalec napake besedo saj se spomnite spet, če mačka ni 153 00:08:51,400 --> 00:08:55,140 v našem slovarju, in katastrofa je, potem bomo uspešno priti skozi 154 00:08:55,140 --> 00:08:59,810 beseda mačka, ampak kazalec beseda bo False in ni res. 155 00:08:59,810 --> 00:09:04,990 Torej se bomo vrnili kazalec besedo, ki označuje ali je to vozlišče pravzaprav beseda, 156 00:09:04,990 --> 00:09:06,530 in da je za pregled. 157 00:09:06,530 --> 00:09:08,310 >> Torej, kaj je odjaviti Size. 158 00:09:08,310 --> 00:09:11,410 Torej Velikost se bo precej enostavno saj se spomnite na obremenitve, smo 159 00:09:11,410 --> 00:09:15,480 povečevanje obsega slovarja za vsaka beseda, ki jo srečamo. 160 00:09:15,480 --> 00:09:20,820 Torej Velikost je le, da bo vrnitev slovar velikost, in to je to. 161 00:09:20,820 --> 00:09:24,650 >> Vse je v redu, tako da na koncu imamo raztovoriti. 162 00:09:24,650 --> 00:09:29,050 Torej raztovoriti, bomo uporabili rekurzivna funkcija dejansko storiti vse 163 00:09:29,050 --> 00:09:33,390 dela za nas, tako da naše delovanje se dogaja, da se imenuje razkladalec. 164 00:09:33,390 --> 00:09:35,830 Kaj je razkladalec storili? 165 00:09:35,830 --> 00:09:40,640 Vidimo tukaj, da razkladalec bo Ponovil skozi vse otroke na 166 00:09:40,640 --> 00:09:45,810 To zlasti vozlišča, in če je otrok vozlišče ni nič, potem pa gremo na 167 00:09:45,810 --> 00:09:47,760 raztovoriti vozlišče otrok. 168 00:09:47,760 --> 00:09:52,070 >> Torej, to se dogaja, da rekurzivno raztovarjanje vseh naših otrok. 169 00:09:52,070 --> 00:09:55,140 Ko smo prepričani, da so vsi naši otroci so raztovorili, nato pa smo 170 00:09:55,140 --> 00:09:58,830 Lahko se osvobodimo, tako razkladanje Sebe. 171 00:09:58,830 --> 00:10:04,550 Tako da bo to rekurzivno razkladanje Celoten Trie, in potem, ko je to 172 00:10:04,550 --> 00:10:06,910 narediti, lahko samo vrne True. 173 00:10:06,910 --> 00:10:09,770 Raztovoriti ne more izogniti, smo samo sprostitev stvari. 174 00:10:09,770 --> 00:10:12,985 Torej, ko smo končali sprostitev Vse, vrne True. 175 00:10:12,985 --> 00:10:14,380 In to je to. 176 00:10:14,380 --> 00:10:16,792 Moje ime je Rob, in to je bil [neslišno]. 177 00:10:16,792 --> 00:10:21,888