1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> ZVUČNIK 1: Dajmo ovo rješenje pokušati. 3 00:00:03,070 --> 00:00:07,130 Tako ćemo pogledati što naši Struct node će izgledati. 4 00:00:07,130 --> 00:00:11,040 Ovdje vidimo da ćemo imati Bool Word i Struct čvor zvijezda 5 00:00:11,040 --> 00:00:12,990 Djeca zagrada abecedu. 6 00:00:12,990 --> 00:00:18,720 Dakle, prva stvar koju možda se pitate, zašto je abeceda hash definira kao 27.? 7 00:00:18,720 --> 00:00:22,540 Pa, sjetite se da ćemo morati biti rukovanja apostrof, pa 8 00:00:22,540 --> 00:00:25,610 to će biti nešto posebno slučaj u cijelom ovom programu. 9 00:00:25,610 --> 00:00:28,780 >> OK, sada, sjetite se kako je Trie zapravo radi. 10 00:00:28,780 --> 00:00:33,420 Recimo da smo indeksiranje Riječ mačke, zatim iz korijena našeg trie, 11 00:00:33,420 --> 00:00:36,670 idemo gledati na djecu polje, a mi ćemo gledati na 12 00:00:36,670 --> 00:00:42,250 indeks koji odgovara na pisma C. Tako da bi indeks dva. 13 00:00:42,250 --> 00:00:46,400 Dakle, s obzirom da je, da će nam dati novi čvor, a onda ćemo 14 00:00:46,400 --> 00:00:47,880 rade od tog čvora. 15 00:00:47,880 --> 00:00:51,830 >> Dakle, s obzirom da je čvor, mi smo još jednom ide gledati na djecu polje, 16 00:00:51,830 --> 00:00:56,170 a mi ćemo gledati na indeks nula odgovarati A Cat. 17 00:00:56,170 --> 00:01:01,240 Pa onda ćemo ići u tom čvoru, as obzirom da je čvor, idemo 18 00:01:01,240 --> 00:01:05,170 gledati na indeksu koji odgovara na T. i kreće na tom čvoru, 19 00:01:05,170 --> 00:01:09,590 Konačno, potpuno smo gledali kroz naše riječi Cat, a sada Bool 20 00:01:09,590 --> 00:01:15,020 Riječ je trebao naznačiti da li to dao riječ je zapravo riječ. 21 00:01:15,020 --> 00:01:17,530 >> Pa zašto nam je potrebna da poseban slučaj? 22 00:01:17,530 --> 00:01:21,680 Pa, što ako je riječ katastrofa je u našem rječniku, ali 23 00:01:21,680 --> 00:01:24,120 Riječ mačka nije? 24 00:01:24,120 --> 00:01:29,030 Dakle, u potrazi za vidjeti ako je riječ mačka je u našem rječniku, idemo u 25 00:01:29,030 --> 00:01:34,880 Uspješno gledati kroz indekse C--T i doći čvor, ali to je 26 00:01:34,880 --> 00:01:39,760 samo zato što je katastrofa dogodilo stvoriti čvorove na putu iz C-A-T sve 27 00:01:39,760 --> 00:01:41,250 način kraj riječi. 28 00:01:41,250 --> 00:01:46,520 Dakle Bool Riječ je korišten ukazuju li ovo posebno mjesto zapravo 29 00:01:46,520 --> 00:01:48,370 ukazuje na riječ. 30 00:01:48,370 --> 00:01:52,920 >> U redu, tako da sada znamo što Trie će izgledati, pogledajmo 31 00:01:52,920 --> 00:01:54,800 na funkciju opterećenja. 32 00:01:54,800 --> 00:01:58,670 Dakle Load će vratiti Bool za li uspješno ili 33 00:01:58,670 --> 00:02:03,020 neuspješno učitava rječnik i ovo će biti rječnik 34 00:02:03,020 --> 00:02:04,520 da želimo učitati. 35 00:02:04,520 --> 00:02:08,310 Dakle, prvo što ćemo učiniti je otvoriti do tog rječnik za čitanje. 36 00:02:08,310 --> 00:02:12,060 Moramo se pobrinuti da ne uspiju, pa ako rječnik nije bio 37 00:02:12,060 --> 00:02:15,280 uspješno je otvorio, ona će se vratiti No, u tom slučaju ćemo 38 00:02:15,280 --> 00:02:16,340 vratiti False. 39 00:02:16,340 --> 00:02:21,290 No, uz pretpostavku da je uspješno otvorila, onda zapravo možemo čitati 40 00:02:21,290 --> 00:02:22,310 kroz rječniku. 41 00:02:22,310 --> 00:02:24,940 >> Dakle, prva stvar koju ćemo želite učiniti je da imamo ovo 42 00:02:24,940 --> 00:02:26,560 Globalna varijabla korijena. 43 00:02:26,560 --> 00:02:30,250 Sada, korijen će biti čvor zvijezda. 44 00:02:30,250 --> 00:02:33,830 To je vrh naše trie da smo će biti iterating putem. 45 00:02:33,830 --> 00:02:38,200 Dakle, prva stvar koju ćemo željeti to je alocirati memoriju za naš korijen. 46 00:02:38,200 --> 00:02:42,040 >> Uočite da smo pomoću Calloc funkcija, što je u osnovi isti 47 00:02:42,040 --> 00:02:45,560 kao funkcija malloc, osim što je jamčiti da se vrati nešto što je 48 00:02:45,560 --> 00:02:47,240 potpuno nulu out. 49 00:02:47,240 --> 00:02:51,350 Dakle, ako ćemo koristiti malloc, mi bi trebao proći kroz sve naputke u našim 50 00:02:51,350 --> 00:02:54,220 čvora i uvjerite se da oni su svi null. 51 00:02:54,220 --> 00:02:56,780 Dakle Calloc će to učiniti za nas. 52 00:02:56,780 --> 00:03:00,390 >> Sada, baš kao i malloc, moramo napraviti sigurni da je dodjela je zapravo 53 00:03:00,390 --> 00:03:01,580 uspješna. 54 00:03:01,580 --> 00:03:04,060 Ako se to vrati null, onda smo morati zatvoriti naš rječnik 55 00:03:04,060 --> 00:03:06,170 podnijeti i vratiti False. 56 00:03:06,170 --> 00:03:11,040 Dakle, pod pretpostavkom da je dodjela uspješna, idemo koristiti čvor 57 00:03:11,040 --> 00:03:14,340 glumit kursor na ponoviti kroz naše trie. 58 00:03:14,340 --> 00:03:17,950 Tako je naš korijen nikad neće promijeniti, ali ćemo koristiti kursor na 59 00:03:17,950 --> 00:03:20,770 zapravo ići od čvora do čvora. 60 00:03:20,770 --> 00:03:25,000 >> U redu, tako da u ovom Za petlju, mi smo čitanja kroz rječniku datoteku, 61 00:03:25,000 --> 00:03:26,965 i mi koristimo na fgetc. 62 00:03:26,965 --> 00:03:30,360 Dakle fgetc će zgrabite jednu lik iz spisa. 63 00:03:30,360 --> 00:03:33,430 Mi ćemo nastaviti grabbing likovi, dok se ne postigne 64 00:03:33,430 --> 00:03:37,540 kraju datoteke, tako da postoje dva slučaja moramo nositi. 65 00:03:37,540 --> 00:03:41,640 Prvo, ako nije lik Nova linija, tako da znamo je li to nova 66 00:03:41,640 --> 00:03:44,480 liniju, onda ćemo da prelazak na novu riječ. 67 00:03:44,480 --> 00:03:49,300 No, pod pretpostavkom da nije nova linija, a zatim ovdje, želimo shvatiti 68 00:03:49,300 --> 00:03:52,440 Indeks ćemo indeksa u Djeca u nizu koji 69 00:03:52,440 --> 00:03:53,890 Gledali smo i prije. 70 00:03:53,890 --> 00:03:57,950 >> Dakle, kao što sam već rekao, moramo Poseban slučaj apostrof. 71 00:03:57,950 --> 00:04:01,040 Obavijest koristimo ternarnom operatera ovdje, pa ćemo čitati 72 00:04:01,040 --> 00:04:05,500 ovo kao da je lik čitamo u bilo apostrof, onda ćemo 73 00:04:05,500 --> 00:04:11,740 postaviti indeks jednak abeceda minus 1, koja će se indeks 26. 74 00:04:11,740 --> 00:04:15,190 Inače, da nije bilo apostrof, onda ćemo postaviti indeksa 75 00:04:15,190 --> 00:04:17,820 jednaka c minus. 76 00:04:17,820 --> 00:04:23,090 Pa sjetite se vratio iz prethodnih p seta, c minus će nam dati 77 00:04:23,090 --> 00:04:27,470 abecedni položaj c, pa ako c je pismo, to će 78 00:04:27,470 --> 00:04:28,770 daju nam indeks nula. 79 00:04:28,770 --> 00:04:32,180 Za slovom B, to će dati us indeks 1, i tako dalje. 80 00:04:32,180 --> 00:04:37,070 >> Dakle, to nam daje indeks u Djeca niz koji želimo. 81 00:04:37,070 --> 00:04:42,540 Sada, ako je ovaj indeks je trenutno nula u Djeca polje, to znači da 82 00:04:42,540 --> 00:04:47,470 čvora trenutno ne postoji iz taj put, tako da ćemo morati izdvojiti 83 00:04:47,470 --> 00:04:49,220 čvor za taj put. 84 00:04:49,220 --> 00:04:50,610 To je ono što mi radimo ovdje. 85 00:04:50,610 --> 00:04:54,650 Tako ćemo, opet, koristite Calloc funkcija, tako da nemamo 86 00:04:54,650 --> 00:05:00,130 na nulu iz sve upućuje, a mi, opet, trebate provjeriti da Calloc 87 00:05:00,130 --> 00:05:01,300 ne uspjeti. 88 00:05:01,300 --> 00:05:04,760 Ako Calloc doživio neuspjeh, onda moramo iskrcati sve, zatvoriti 89 00:05:04,760 --> 00:05:06,880 rječnik, i vratiti False. 90 00:05:06,880 --> 00:05:14,110 >> Dakle, pod pretpostavkom da ne uspiju, onda to će stvoriti novo dijete za nas, 91 00:05:14,110 --> 00:05:16,000 a onda ćemo ići u tom djetetu. 92 00:05:16,000 --> 00:05:19,030 Naš kursor će ponoviti do tog djeteta. 93 00:05:19,030 --> 00:05:23,390 Sada, ako to nije bilo null za početak, zatim kursor mogu samo ponoviti 94 00:05:23,390 --> 00:05:26,650 do tog djeteta, bez zapravo moraju izdvojiti ništa. 95 00:05:26,650 --> 00:05:30,790 Ovo je slučaj gdje smo prvi put se dogodilo izdvojiti riječ mačku, a 96 00:05:30,790 --> 00:05:34,390 to znači da kad idemo na dodjelu Katastrofa, ne trebamo stvoriti 97 00:05:34,390 --> 00:05:35,720 čvorovi za C-A-T opet. 98 00:05:35,720 --> 00:05:37,620 Oni već postoje. 99 00:05:37,620 --> 00:05:40,140 >> OK, pa što je ovo drugo? 100 00:05:40,140 --> 00:05:44,600 To je stanje u kojem je c backslash n, gdje je c je nova linija. 101 00:05:44,600 --> 00:05:47,780 To znači da smo uspješno završio je riječ. 102 00:05:47,780 --> 00:05:51,020 Sada, što želimo učiniti, kada smo Uspješno završen riječ? 103 00:05:51,020 --> 00:05:55,250 Mi ćemo koristiti ove riječi polje unutar našeg struct čvor. 104 00:05:55,250 --> 00:06:00,570 >> Želimo postaviti da bi Istina, tako da označava da se ovaj čvor ukazuje 105 00:06:00,570 --> 00:06:03,320 uspješna Riječ stvarna riječ. 106 00:06:03,320 --> 00:06:05,050 Sada, postavite da na True. 107 00:06:05,050 --> 00:06:09,210 Želimo resetirati našu kursor na točku na početku trie ponovno. 108 00:06:09,210 --> 00:06:13,510 I na kraju, povećava, naš rječnik veličina jer smo pronašli još jednu riječ. 109 00:06:13,510 --> 00:06:16,450 >> U redu, tako da ćemo nastaviti raditi da, čitanje karaktera od strane 110 00:06:16,450 --> 00:06:21,960 karakter, izgradnje novih čvorova u naš Trie i za svaku riječ u 111 00:06:21,960 --> 00:06:26,810 rječnik, dok konačno ne dođete do c jednaka EOF, u tom slučaju, lomimo 112 00:06:26,810 --> 00:06:28,100 iz datoteke. 113 00:06:28,100 --> 00:06:31,110 Sada, postoje dva slučaja pod što smo mogli pogoditi EOF. 114 00:06:31,110 --> 00:06:35,680 Prvi je, ako je došlo do pogreške čitanje iz spisa, pa ako postoji 115 00:06:35,680 --> 00:06:39,280 pogreška, moramo napraviti tipični iskrcati sve, zatvorite datoteku, 116 00:06:39,280 --> 00:06:40,520 vratiti False. 117 00:06:40,520 --> 00:06:43,870 Pod pretpostavkom da nije bilo pogrešaka, da samo znači da mi zapravo pogodio kraj 118 00:06:43,870 --> 00:06:47,820 file, u kojem slučaju, možemo zatvoriti podnijeti i vratiti True, jer smo 119 00:06:47,820 --> 00:06:51,010 Uspješno učita rječnik u našu trie. 120 00:06:51,010 --> 00:06:54,240 >> Dobro, sad idemo check out provjera. 121 00:06:54,240 --> 00:06:58,780 Gledajući na check funkciju, vidimo Provjerite da će se vratiti bool. 122 00:06:58,780 --> 00:07:03,740 To vraća True ako je to riječ koja je bude donesen je u našoj trie. 123 00:07:03,740 --> 00:07:06,170 To vraća False drugačije. 124 00:07:06,170 --> 00:07:10,110 >> Pa kako ćemo utvrditi je li ova riječ u našem trie? 125 00:07:10,110 --> 00:07:14,270 Ovdje vidimo da je, baš kao i prije, ćemo koristiti kursor se ponoviti 126 00:07:14,270 --> 00:07:16,010 kroz naše trie. 127 00:07:16,010 --> 00:07:20,650 Sada, ovdje, idemo ponoviti tijekom cijele naše riječi. 128 00:07:20,650 --> 00:07:24,680 Dakle iterating iznad riječi smo prošlo, idemo utvrditi 129 00:07:24,680 --> 00:07:29,280 indeks u djece niz koji odgovara riječi nosača i. 130 00:07:29,280 --> 00:07:34,150 Dakle, to će izgledati točno kao Load, gdje li riječ bracket sam je 131 00:07:34,150 --> 00:07:38,110 apostrof, onda želimo koristiti indeksa abeceda minus jedan, jer smo utvrdili 132 00:07:38,110 --> 00:07:41,160 to je mjesto gdje idemo pohraniti apostrofe. 133 00:07:41,160 --> 00:07:44,440 >> Inače ćemo koristiti tolower Riječ nosač ja. 134 00:07:44,440 --> 00:07:48,270 Dakle, ne zaboravite da je riječ može imati proizvoljan kapitalizacije, i tako smo 135 00:07:48,270 --> 00:07:51,590 želite biti sigurni da smo pomoću mala verzija stvari. 136 00:07:51,590 --> 00:07:55,300 A onda oduzmite od toga malim slovima da, još jednom, da nam daju 137 00:07:55,300 --> 00:07:57,940 abecedni položaj tog lika. 138 00:07:57,940 --> 00:08:01,740 Tako da će to biti naš index Djeca u nizu. 139 00:08:01,740 --> 00:08:06,480 >> A sad, ako je indeks u djece Niz je nula, da mi znači 140 00:08:06,480 --> 00:08:09,050 više ne može nastaviti iterating niz naše trie. 141 00:08:09,050 --> 00:08:13,320 Ako je to slučaj, ta riječ ne može možda se u našem trie, jer ako je to 142 00:08:13,320 --> 00:08:18,000 su, to bi značilo da ne bi bilo Put prema dolje na tu riječ, a što bi 143 00:08:18,000 --> 00:08:19,350 Nikada se susresti null. 144 00:08:19,350 --> 00:08:21,910 Tako nailazi null, vraćamo False. 145 00:08:21,910 --> 00:08:23,810 Riječ je nema u rječniku. 146 00:08:23,810 --> 00:08:28,200 Da nije bilo null, onda ćemo nastaviti Ponavljanje, pa idemo 147 00:08:28,200 --> 00:08:33,150 ažurirati naš pokazivač ukazati na to Posebno čvor u tom indeksu. 148 00:08:33,150 --> 00:08:36,659 >> Tako smo zadržati taj događaj u cijeloj Cijeli riječ. 149 00:08:36,659 --> 00:08:40,630 Pod pretpostavkom da nikada pogodio null, to znači bili smo u mogućnosti da se kroz cijeli 150 00:08:40,630 --> 00:08:44,840 Svijet i naći čvor u našoj trie, ali nismo sasvim gotova. 151 00:08:44,840 --> 00:08:46,350 Mi ne želimo samo vratiti True. 152 00:08:46,350 --> 00:08:51,400 Želimo da se vrati kursor pogrešci riječ jer, ne zaboravite opet, ako je mačka nije 153 00:08:51,400 --> 00:08:55,140 u naš rječnik i katastrofa, onda ćemo uspješno proći 154 00:08:55,140 --> 00:08:59,810 Riječ mačka, ali kursor riječ će biti lažna i nije istina. 155 00:08:59,810 --> 00:09:04,990 Tako smo se vratili kursor riječ za označavanje je li to čvor je zapravo riječ, 156 00:09:04,990 --> 00:09:06,530 i to je to za provjeru. 157 00:09:06,530 --> 00:09:08,310 >> Tako ćemo provjeriti Veličina. 158 00:09:08,310 --> 00:09:11,410 Dakle, veličina će biti prilično jednostavan jer, ne zaboravite, uz punjenje, mi smo 159 00:09:11,410 --> 00:09:15,480 povećavanjem rječnik veličinu svaka riječ koju susrećemo. 160 00:09:15,480 --> 00:09:20,820 Dakle, veličina tek će se vratiti rječnik veličina, i to je to. 161 00:09:20,820 --> 00:09:24,650 >> U redu, tako da na kraju, moramo iskrcati. 162 00:09:24,650 --> 00:09:29,050 Dakle zasićuju ćemo koristiti rekurzivna funkcija zapravo učiniti sve 163 00:09:29,050 --> 00:09:33,390 dio posla za nas, tako da naše funkcije će se zvati desiliranje. 164 00:09:33,390 --> 00:09:35,830 Što se desiliranje će učiniti? 165 00:09:35,830 --> 00:09:40,640 Ovdje vidimo da desiliranje će ponoviti tijekom sva djeca na 166 00:09:40,640 --> 00:09:45,810 Ovaj čvor, a ako je dijete čvora nije NULL, onda ćemo 167 00:09:45,810 --> 00:09:47,760 iskrcati dijete čvora. 168 00:09:47,760 --> 00:09:52,070 >> Dakle, ovo će rekurzivno iskrcati sve naše djece. 169 00:09:52,070 --> 00:09:55,140 Jednom smo bili sigurni da su sva djeca su iskrcali, onda smo 170 00:09:55,140 --> 00:09:58,830 možemo osloboditi, tako rasteretiti sebe. 171 00:09:58,830 --> 00:10:04,550 Dakle, ovo će rekurzivno iskrcati Cijeli Trie, a zatim nakon što je to 172 00:10:04,550 --> 00:10:06,910 učinjeno, mi samo možemo vratiti True. 173 00:10:06,910 --> 00:10:09,770 Iskrcati se ne može uspjeti, da smo Samo oslobađajući stvari. 174 00:10:09,770 --> 00:10:12,985 Dakle, nakon što smo gotovi oslobađajući sve, vratiti True. 175 00:10:12,985 --> 00:10:14,380 I to je to. 176 00:10:14,380 --> 00:10:16,792 Moje ime je Rob, a to bio [nečujan]. 177 00:10:16,792 --> 00:10:21,888