1 00:00:00,000 --> 00:00:12,350 >> [Glazba svira] 2 00:00:12,350 --> 00:00:13,050 >> ROB Bowden: Bok. 3 00:00:13,050 --> 00:00:13,640 Ja sam Rob. 4 00:00:13,640 --> 00:00:16,210 I neka je ovo rješenje out. 5 00:00:16,210 --> 00:00:20,070 Dakle, ovdje ćemo provesti Općenito stol. 6 00:00:20,070 --> 00:00:24,090 Vidimo da struct node od naših Stol će izgledati ovako. 7 00:00:24,090 --> 00:00:28,710 Dakle, to će imati char riječ Niz veličine duljina + 1. 8 00:00:28,710 --> 00:00:32,259 Ne zaboravite + 1, od maksimalno Riječ u rječniku je 45 9 00:00:32,259 --> 00:00:33,130 likovi. 10 00:00:33,130 --> 00:00:37,070 I onda ćemo morati jedan pomoćni znakova za znak obrnute kose nulu. 11 00:00:37,070 --> 00:00:40,870 >> I onda naš hashtable u svakoj kanta će pohraniti 12 00:00:40,870 --> 00:00:42,320 povezani popis čvorova. 13 00:00:42,320 --> 00:00:44,420 Mi ne radimo linearnu sondiranja ovdje. 14 00:00:44,420 --> 00:00:48,430 I tako, kako bi se povezati na sljedećoj element u kantu, trebamo 15 00:00:48,430 --> 00:00:50,390 struct node * next. 16 00:00:50,390 --> 00:00:51,110 OK. 17 00:00:51,110 --> 00:00:53,090 Dakle, to je ono što čvor izgleda. 18 00:00:53,090 --> 00:00:56,180 >> Sada ovdje je deklaracija našeg hashtable. 19 00:00:56,180 --> 00:00:59,640 To će imati 16.834 kante. 20 00:00:59,640 --> 00:01:01,910 No, taj broj nije važno. 21 00:01:01,910 --> 00:01:05,450 I na kraju, da ćemo imati Globalna varijabla veličine hashtable, koji 22 00:01:05,450 --> 00:01:07,000 će krenuti kao nulu. 23 00:01:07,000 --> 00:01:10,760 I to će se pratiti kako mnogi su riječi u našem rječniku. 24 00:01:10,760 --> 00:01:13,710 >> Tako ćemo pogledati na teret. 25 00:01:13,710 --> 00:01:16,390 Primijetimo da je opterećenje, to vraća bool. 26 00:01:16,390 --> 00:01:20,530 Vraćate li istina da je uspješno učita, a lažna inače. 27 00:01:20,530 --> 00:01:23,990 I to traje const char * rječnik, što je rječnik 28 00:01:23,990 --> 00:01:25,280 da želimo otvoriti. 29 00:01:25,280 --> 00:01:27,170 Dakle, to je prva stvar idemo raditi. 30 00:01:27,170 --> 00:01:29,500 >> Idemo u fopen rječnik za čitanje. 31 00:01:29,500 --> 00:01:31,680 A mi ćemo morati napraviti sigurni da je uspio. 32 00:01:31,680 --> 00:01:35,920 Dakle, ako se vrati NULL, onda nismo Uspješno otvaranje rječnika. 33 00:01:35,920 --> 00:01:37,440 I moramo vratiti false. 34 00:01:37,440 --> 00:01:41,580 No, uz pretpostavku da je uspješno učinio otvoren, onda želimo čitati 35 00:01:41,580 --> 00:01:42,400 rječnik. 36 00:01:42,400 --> 00:01:46,450 Dakle, imajte petlje dok ne nađemo neki Razlog pobjeći iz ove petlje, 37 00:01:46,450 --> 00:01:47,570 što ćemo vidjeti. 38 00:01:47,570 --> 00:01:48,920 Dakle, imajte petlje. 39 00:01:48,920 --> 00:01:51,780 >> A sad idemo na malloc jedan čvor. 40 00:01:51,780 --> 00:01:54,020 I, naravno, trebamo emitirati ponovno provjeriti. 41 00:01:54,020 --> 00:01:58,680 Dakle, ako mallocing nisu uspjeli, a zatim želimo rasteretiti bilo čvor koji smo 42 00:01:58,680 --> 00:02:02,590 dogodilo malloc prije, zatvorite rječnik i povratak false. 43 00:02:02,590 --> 00:02:06,830 No, ignoriranje da, pod pretpostavkom da uspjeli, onda želimo koristiti fscanf 44 00:02:06,830 --> 00:02:12,400 čitati jednu riječ iz naše Rječnik u našu čvora. 45 00:02:12,400 --> 00:02:17,940 Pa sjetite se da zapis> riječ je char Riječ tampon od veličine LENGHTH + 1 46 00:02:17,940 --> 00:02:20,300 da ćemo pohraniti riječ u. 47 00:02:20,300 --> 00:02:25,070 >> Dakle fscanf će vratiti 1, dokle kao što je u stanju uspješno 48 00:02:25,070 --> 00:02:26,750 pročitati riječ iz spisa. 49 00:02:26,750 --> 00:02:30,460 Ako bilo dogodi pogreška, ili ćemo do kraja datoteke, to 50 00:02:30,460 --> 00:02:31,950 neće vratiti jedan. 51 00:02:31,950 --> 00:02:35,180 U tom slučaju se ne vraća 1, smo konačno ćemo izaći iz 52 00:02:35,180 --> 00:02:37,280 ovo while petlja. 53 00:02:37,280 --> 00:02:42,770 Dakle, vidimo da je jednom uspješno smo pročitati riječ u 54 00:02:42,770 --> 00:02:48,270 entry> riječ, onda ćemo to Riječ pomoću naše hash funkciju. 55 00:02:48,270 --> 00:02:49,580 >> Idemo pogledati hash funkcija. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Tako da stvarno ne treba razumjeti to. 58 00:02:55,610 --> 00:02:59,460 A zapravo smo samo izvukao ovaj hašiš funkcionirati s interneta. 59 00:02:59,460 --> 00:03:04,010 Jedino što morate prepoznati je da to traje const char * riječ. 60 00:03:04,010 --> 00:03:08,960 Dakle, to je uzimanje niz kao ulaz, a povratka nepotpisani int kao izlaz. 61 00:03:08,960 --> 00:03:12,360 Dakle, to je sve hash funkcija, je li to vodi u ulaz i daje vam 62 00:03:12,360 --> 00:03:14,490 indeks u hashtable. 63 00:03:14,490 --> 00:03:18,530 >> Uočite da smo MODING by NUM_BUCKETS, tako da vrijednost vratio 64 00:03:18,530 --> 00:03:21,730 zapravo je indeks u hashtable a ne indeks izvan 65 00:03:21,730 --> 00:03:24,320 Granica u nizu. 66 00:03:24,320 --> 00:03:28,060 Dakle, s obzirom da je funkcija, idemo hash riječ da čitamo 67 00:03:28,060 --> 00:03:29,390 rječnik. 68 00:03:29,390 --> 00:03:31,700 A onda ćemo koristiti da hash umetnuti 69 00:03:31,700 --> 00:03:33,750 Ulazak u hashtable. 70 00:03:33,750 --> 00:03:38,520 >> Sada hashtable hash je trenutna povezana popisa u tablici. 71 00:03:38,520 --> 00:03:41,410 A vrlo je moguće da je to samo NULL. 72 00:03:41,410 --> 00:03:44,960 Mi želimo umetnuti naš ulazak u Početkom ovog popisa povezane. 73 00:03:44,960 --> 00:03:48,600 I tako ćemo imati naše struje polazna točka za ono hashtable 74 00:03:48,600 --> 00:03:50,380 Trenutno ukazuje. 75 00:03:50,380 --> 00:03:53,310 A onda ćemo se spremiti, u hashtable na 76 00:03:53,310 --> 00:03:55,350 mljeveno meso, tekući zapis. 77 00:03:55,350 --> 00:03:59,320 Dakle, ove dvije linije Uspješno umetanje Ulazak na početku 78 00:03:59,320 --> 00:04:02,260 povezani popis u tom indeksu u hashtable. 79 00:04:02,260 --> 00:04:04,900 >> Nakon što završimo s tim, znamo da smo pronašli još jednu riječ u 80 00:04:04,900 --> 00:04:07,790 rječnik, a mi opet povećavati. 81 00:04:07,790 --> 00:04:13,960 Tako smo zadržati taj događaj dok fscanf napokon se vratio nešto ne-1 na 82 00:04:13,960 --> 00:04:16,950 kojem trenutku ne zaboravite da moramo besplatan ulaz. 83 00:04:16,950 --> 00:04:19,459 Dakle ovdje smo malloced unosa. 84 00:04:19,459 --> 00:04:21,329 I mi smo pokušali pročitati nešto iz rječnika. 85 00:04:21,329 --> 00:04:23,910 I nismo uspješno pročitati nešto iz rječnika, u 86 00:04:23,910 --> 00:04:26,650 kojem slučaju moramo osloboditi unos da mi nikada zapravo staviti u 87 00:04:26,650 --> 00:04:29,140 hashtable, i na kraju slomiti. 88 00:04:29,140 --> 00:04:32,750 >> Nakon što smo izbiju moramo vidjeti, dobro, nije mi izbije jer postoji 89 00:04:32,750 --> 00:04:34,360 bila pogreška čitanja iz datoteke? 90 00:04:34,360 --> 00:04:37,120 Ili smo se probiti van jer smo do kraja datoteke? 91 00:04:37,120 --> 00:04:39,480 Ako je došlo do pogreške, a zatim želimo vratiti false. 92 00:04:39,480 --> 00:04:40,930 Zbog opterećenja nisu uspjeli. 93 00:04:40,930 --> 00:04:43,890 I u tom procesu želimo rasteretiti sve ono što smo pročitali u, i 94 00:04:43,890 --> 00:04:45,670 zatvoriti rječničku datoteku. 95 00:04:45,670 --> 00:04:48,740 >> Pod pretpostavkom da smo uspjeli, onda mi samo Još uvijek je potrebno zatvoriti rječnik 96 00:04:48,740 --> 00:04:53,040 podnijeti, i na kraju povratak istina jer smo Uspješno učitava rječnik. 97 00:04:53,040 --> 00:04:54,420 I to je to za opterećenja. 98 00:04:54,420 --> 00:04:59,020 Tako sada provjeriti, obzirom učita hashtable, će izgledati ovako. 99 00:04:59,020 --> 00:05:03,140 Dakle, provjerite, to vraća bool, koji je će pokazati da li je prošao 100 00:05:03,140 --> 00:05:07,530 u char * riječ, je li prošao u nizu je u našem rječniku. 101 00:05:07,530 --> 00:05:09,890 Dakle, ako je to u rječniku, ako je to u našoj hashtable, 102 00:05:09,890 --> 00:05:11,170 vratit ćemo istinito. 103 00:05:11,170 --> 00:05:13,380 A ako to nije, mi ćemo se vratiti false. 104 00:05:13,380 --> 00:05:17,740 >> S obzirom na to prošlo u riječi, mi smo će hash riječ. 105 00:05:17,740 --> 00:05:22,110 Sada Važno je prepoznati je da u opterećenju smo znali da je sve 106 00:05:22,110 --> 00:05:23,820 Riječi mi ćemo biti mala slova. 107 00:05:23,820 --> 00:05:25,820 Ali ovdje smo baš siguran. 108 00:05:25,820 --> 00:05:29,510 Ako ćemo se pogled na naše hash funkcije, naš hash funkcija zapravo 109 00:05:29,510 --> 00:05:32,700 niža kućište svaki lik od riječi. 110 00:05:32,700 --> 00:05:37,940 Dakle, bez obzira na kapitalizaciju Riječ, naša hash funkcija je povratak 111 00:05:37,940 --> 00:05:42,270 Isti indeks za sve kapitalizacija je, kao što će imati 112 00:05:42,270 --> 00:05:45,280 vratio za potpuno slovu Verzija od riječi. 113 00:05:45,280 --> 00:05:46,600 U redu. 114 00:05:46,600 --> 00:05:49,790 To je naš indeks je u hashtable za tu riječ. 115 00:05:49,790 --> 00:05:52,940 >> Sada je to za petlje će se ponoviti na popis povezana 116 00:05:52,940 --> 00:05:55,000 koji je bio na tom indeksu. 117 00:05:55,000 --> 00:05:59,610 Dakle, primijetit ćemo se inicijalizacije unos ukazati na taj indeks. 118 00:05:59,610 --> 00:06:02,750 Mi idemo dalje dok je ulaz! = NULL. 119 00:06:02,750 --> 00:06:07,770 I ne zaboravite da je ažuriranje pokazivač u naš povezani entry Popis = entry> next. 120 00:06:07,770 --> 00:06:14,400 Tako su naše trenutne polazna točka za sljedeće stavke na popisu povezane. 121 00:06:14,400 --> 00:06:19,250 >> Dakle, za svaki unos u popisu povezana, ćemo koristiti strcasecmp. 122 00:06:19,250 --> 00:06:20,330 Nije strcomp. 123 00:06:20,330 --> 00:06:23,780 Zato još jednom, želimo rade stvari slučaj insensitively. 124 00:06:23,780 --> 00:06:27,870 Dakle, mi koristimo strcasecmp usporediti Riječ koja je prošla kroz to 125 00:06:27,870 --> 00:06:31,860 Funkcija protiv riječi da je u tom ulasku. 126 00:06:31,860 --> 00:06:35,570 Ako se vraća na nulu, to znači da je utakmicu, u kojem slučaju želimo 127 00:06:35,570 --> 00:06:36,630 povratak istina. 128 00:06:36,630 --> 00:06:39,590 Uspješno smo se našli Riječ u našem hashtable. 129 00:06:39,590 --> 00:06:43,040 >> Da nije bilo utakmica, onda smo ide na petlju i opet pogledati 130 00:06:43,040 --> 00:06:43,990 sljedeći unos. 131 00:06:43,990 --> 00:06:47,640 I mi ćemo nastaviti petlje dok postoji su upisi u ovom popisu povezana. 132 00:06:47,640 --> 00:06:50,160 Što će se dogoditi ako se lomimo iz toga za petlje? 133 00:06:50,160 --> 00:06:55,110 To znači da nisu pronašli zapis koji uskladiti tu riječ, u kojem slučaju 134 00:06:55,110 --> 00:07:00,220 vraćamo lažno ukazuje da je naš hashtable ne sadrži tu riječ. 135 00:07:00,220 --> 00:07:02,540 I to je kontrola. 136 00:07:02,540 --> 00:07:04,790 >> Tako ćemo pogledati veličini. 137 00:07:04,790 --> 00:07:06,970 Sada veličina će biti prilično jednostavno. 138 00:07:06,970 --> 00:07:11,080 Budući da zapamtite u opterećenjem, za svaku riječ smo našli, mi porastao globalni 139 00:07:11,080 --> 00:07:12,880 promjenjiva veličina hashtable. 140 00:07:12,880 --> 00:07:16,480 Dakle funkcija veličine samo ide da se vrate globalnu varijablu. 141 00:07:16,480 --> 00:07:18,150 I to je to. 142 00:07:18,150 --> 00:07:22,300 >> Sada napokon, moramo rasteretiti rječnik odjednom se sve to radi. 143 00:07:22,300 --> 00:07:25,340 Pa kako ćemo to učiniti? 144 00:07:25,340 --> 00:07:30,440 Upravo ovdje smo petlje preko sve kante za naš stol. 145 00:07:30,440 --> 00:07:33,240 Dakle, postoje NUM_BUCKETS kante. 146 00:07:33,240 --> 00:07:37,410 A za svaki povezan popis u našem hashtable, idemo na petlji preko 147 00:07:37,410 --> 00:07:41,070 Cjelina popisu povezana, oslobađajući svaki element. 148 00:07:41,070 --> 00:07:42,900 >> Sada moramo biti oprezni. 149 00:07:42,900 --> 00:07:47,910 Dakle, ovdje imamo privremenu varijablu koji je spremanje pokazivača na sljedećoj 150 00:07:47,910 --> 00:07:49,730 Element u popisu povezane. 151 00:07:49,730 --> 00:07:52,140 A onda ćemo besplatno trenutna elementa. 152 00:07:52,140 --> 00:07:55,990 Moramo biti sigurni da smo to učinili jer smo mi Ne mogu samo osloboditi trenutne element 153 00:07:55,990 --> 00:07:59,180 a zatim pokušati pristupili sljedećoj pokazivač, budući da se nakon što ga je oslobodio, 154 00:07:59,180 --> 00:08:00,870 memorije postaje nevažeći. 155 00:08:00,870 --> 00:08:04,990 >> Zato nam je potrebno da bi oko pokazivač na Sljedeći element, onda možemo osloboditi 156 00:08:04,990 --> 00:08:08,360 Trenutna je element, a onda smo se ažurirati Naš trenutni element ukazuju na 157 00:08:08,360 --> 00:08:09,550 Sljedeći element. 158 00:08:09,550 --> 00:08:12,800 Mi ćemo petlju dok postoje elementi na ovom popisu povezane. 159 00:08:12,800 --> 00:08:15,620 Učinit ćemo to za sve povezane popisi u hashtable. 160 00:08:15,620 --> 00:08:19,460 I jednom kada smo gotovi s tim, mi smo potpuno rastovarale hashtable, a 161 00:08:19,460 --> 00:08:20,190 smo gotovi. 162 00:08:20,190 --> 00:08:23,200 Tako da je nemoguće za istovariti ikada vratiti false. 163 00:08:23,200 --> 00:08:26,470 A kad smo gotovi, mi Samo povratak istina. 164 00:08:26,470 --> 00:08:29,000 >> Dajmo ovo rješenje probati. 165 00:08:29,000 --> 00:08:33,070 Tako ćemo pogledati što naši struct node će izgledati. 166 00:08:33,070 --> 00:08:36,220 Ovdje vidimo da ćemo imati Bool Riječ i struct node * djeca 167 00:08:36,220 --> 00:08:37,470 Nosač abecede. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Dakle, prva stvar koju bi moglo biti pitate, zašto je ALPHABET 170 00:08:42,020 --> 00:08:44,660 ed definira kao 27.? 171 00:08:44,660 --> 00:08:47,900 Pa, sjetite se da ćemo morati biti rukovanja apostrof. 172 00:08:47,900 --> 00:08:51,910 Tako da će to biti nešto poseban slučaj u cijelom ovom programu. 173 00:08:51,910 --> 00:08:54,710 >> Sad se sjećam kako trie zapravo radi. 174 00:08:54,710 --> 00:08:59,380 Recimo da smo indeksiranje riječ "mačke". Zatim iz korijena trie, 175 00:08:59,380 --> 00:09:02,610 idemo gledati na djecu polje, a mi ćemo gledati na 176 00:09:02,610 --> 00:09:08,090 indeks koji odgovara na pisma C. Dakle, koja će biti indeksirana 2. 177 00:09:08,090 --> 00:09:11,530 Dakle, s obzirom da je, kako će daju nam novi čvor. 178 00:09:11,530 --> 00:09:13,820 A onda ćemo raditi s tom čvoru. 179 00:09:13,820 --> 00:09:17,770 >> Dakle, s obzirom da je čvor, mi smo još jednom ide gledati na djecu polje. 180 00:09:17,770 --> 00:09:22,110 I mi ćemo gledati na indeks nula odgovarati A Cat. 181 00:09:22,110 --> 00:09:27,170 Pa onda ćemo ići u tom čvoru, as obzirom da je čvor idemo 182 00:09:27,170 --> 00:09:31,090 gledati na kraju da je to odgovara na T. i kreće na tom čvoru, 183 00:09:31,090 --> 00:09:35,530 Konačno, potpuno smo gledali kroz naša riječ "mačka". I sada Bool 184 00:09:35,530 --> 00:09:40,960 Riječ je trebao naznačiti da li to dao riječ je zapravo riječ. 185 00:09:40,960 --> 00:09:43,470 >> Pa zašto nam je potrebna da poseban slučaj? 186 00:09:43,470 --> 00:09:47,700 Pa što je s riječju "katastrofa" je u našem rječniku, ali 187 00:09:47,700 --> 00:09:50,150 Riječ "mačka" nije? 188 00:09:50,150 --> 00:09:54,580 Zato i traže da se vidi je li riječ "mačka" je u našem rječniku, mi smo 189 00:09:54,580 --> 00:09:59,970 će uspješno gledati kroz indeksi C--T u regiji čvor. 190 00:09:59,970 --> 00:10:04,290 No, to je samo zato što je katastrofa dogodilo stvoriti čvorove na putu 191 00:10:04,290 --> 00:10:07,190 od C-A-T, sve do kraj riječi. 192 00:10:07,190 --> 00:10:12,020 Dakle bool riječ se koristi za označavanje li ovo posebno mjesto 193 00:10:12,020 --> 00:10:14,310 zapravo ukazuje na riječi. 194 00:10:14,310 --> 00:10:15,140 >> U redu. 195 00:10:15,140 --> 00:10:19,310 Dakle, sada znamo da je ono što je trie kako će izgledati, pogledajmo 196 00:10:19,310 --> 00:10:20,730 učitati funkciju. 197 00:10:20,730 --> 00:10:24,610 Dakle, teret će se vratiti Bool za li uspješno ili 198 00:10:24,610 --> 00:10:26,720 neuspješno učitava rječnik. 199 00:10:26,720 --> 00:10:30,460 A to će biti rječnik da želimo učitati. 200 00:10:30,460 --> 00:10:33,930 >> Dakle, prva stvar koju smo učiniti je otvoriti do tog rječnik za čitanje. 201 00:10:33,930 --> 00:10:36,160 A imamo kako bi bili sigurni nismo uspjeti. 202 00:10:36,160 --> 00:10:39,580 Dakle, ako rječnik nije bio uspješno je otvorio, ona će se vratiti 203 00:10:39,580 --> 00:10:42,400 null, u kojem slučaju nismo će se vratiti false. 204 00:10:42,400 --> 00:10:47,230 No, uz pretpostavku da je uspješno otvorila, onda zapravo možemo čitati 205 00:10:47,230 --> 00:10:48,220 kroz rječniku. 206 00:10:48,220 --> 00:10:50,880 >> Dakle, prva stvar koju ćemo želite učiniti je da imamo ovo 207 00:10:50,880 --> 00:10:52,500 Globalna varijabla korijena. 208 00:10:52,500 --> 00:10:56,190 Sada korijen će biti čvor *. 209 00:10:56,190 --> 00:10:59,760 To je vrh naše trie da smo će biti iterating putem. 210 00:10:59,760 --> 00:11:02,660 Dakle, prva stvar koju ćemo to želim učiniti je dodijeliti 211 00:11:02,660 --> 00:11:04,140 Memorija za naš korijen. 212 00:11:04,140 --> 00:11:07,980 Uočite da smo pomoću calloc funkcija, što je u osnovi isti 213 00:11:07,980 --> 00:11:11,500 kao funkcija malloc, osim što je jamčiti da se vrati nešto što je 214 00:11:11,500 --> 00:11:13,180 potpuno nulu out. 215 00:11:13,180 --> 00:11:17,290 Dakle, ako ćemo koristiti malloc, mi bi trebao proći kroz sve naputke u našim 216 00:11:17,290 --> 00:11:20,160 čvora, i pobrinite se da oni su svi null. 217 00:11:20,160 --> 00:11:22,710 Dakle calloc će to učiniti za nas. 218 00:11:22,710 --> 00:11:26,330 >> Sad baš kao malloc, moramo napraviti sigurni da je dodjela bila je zapravo 219 00:11:26,330 --> 00:11:27,520 uspješna. 220 00:11:27,520 --> 00:11:29,990 Ako se to vrati null, onda smo morati zatvoriti ili rječnik 221 00:11:29,990 --> 00:11:32,100 podnijeti i vratiti false. 222 00:11:32,100 --> 00:11:36,835 Dakle, uz pretpostavku da je dodjela uspješna, idemo koristiti čvor * 223 00:11:36,835 --> 00:11:40,270 kursor na ponoviti kroz naše trie. 224 00:11:40,270 --> 00:11:43,890 Tako su naši korijeni nikada neće promijeniti, ali ćemo koristiti kursor na 225 00:11:43,890 --> 00:11:47,875 zapravo ići od čvora do čvora. 226 00:11:47,875 --> 00:11:50,940 >> Tako je u to za petlje čitamo kroz rječniku datoteku. 227 00:11:50,940 --> 00:11:53,670 I mi koristimo fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc će zgrabite jednu lik iz spisa. 229 00:11:56,290 --> 00:11:59,370 Mi ćemo nastaviti grabbing likovi, dok se ne postigne 230 00:11:59,370 --> 00:12:01,570 završetak datoteke. 231 00:12:01,570 --> 00:12:03,480 >> Postoje dva slučaja moramo nositi. 232 00:12:03,480 --> 00:12:06,610 Prvi, ako je znak nije bila nova linija. 233 00:12:06,610 --> 00:12:10,450 Tako ćemo znati je li to nova linija, a zatim smo o tome da se presele na novi riječ. 234 00:12:10,450 --> 00:12:15,240 No, pod pretpostavkom da nije nova linija, a zatim Ovdje želimo shvatiti 235 00:12:15,240 --> 00:12:18,380 Indeks ćemo indeksa u u djece niz koji 236 00:12:18,380 --> 00:12:19,810 Gledali smo i prije. 237 00:12:19,810 --> 00:12:23,880 >> Dakle, kao što sam već rekao, moramo Poseban slučaj apostrof. 238 00:12:23,880 --> 00:12:26,220 Obavijest koristimo ternarnom operatera ovdje. 239 00:12:26,220 --> 00:12:29,580 Dakle, idemo čitati ovo kao, ako lik čitamo u bilo 240 00:12:29,580 --> 00:12:35,330 apostrof, onda ćemo postaviti index = "alfabet" -1, što će 241 00:12:35,330 --> 00:12:37,680 biti indeks 26. 242 00:12:37,680 --> 00:12:41,130 >> Inače, da nije bilo apostrof, postoji ćemo postaviti indeksa 243 00:12:41,130 --> 00:12:43,760 jednaka c -. 244 00:12:43,760 --> 00:12:49,030 Pa sjetite se vratio iz prethodno p-seta, c - će nam dati 245 00:12:49,030 --> 00:12:53,410 abecedni položaj C. Dakle, ako C je pismo, to će 246 00:12:53,410 --> 00:12:54,700 daju nam indeks nula. 247 00:12:54,700 --> 00:12:58,120 Za slovom B, to će dati us indeks 1, i tako dalje. 248 00:12:58,120 --> 00:13:03,010 >> Dakle, to nam daje indeks u djeca polje koje želimo. 249 00:13:03,010 --> 00:13:08,890 Sada, ako je ovaj indeks trenutno null u djeca, to znači da je čvor 250 00:13:08,890 --> 00:13:11,830 trenutno ne postoji s toga puta. 251 00:13:11,830 --> 00:13:15,160 Zato nam je potrebno izdvojiti čvor za taj put. 252 00:13:15,160 --> 00:13:16,550 To je ono što ćemo učiniti ovdje. 253 00:13:16,550 --> 00:13:20,690 >> Dakle, idemo ponovno koristiti calloc funkcija, tako da mi ne moramo 254 00:13:20,690 --> 00:13:22,880 nulirati sve upućuje. 255 00:13:22,880 --> 00:13:27,240 I opet je potrebno provjeriti da calloc nije propustio. 256 00:13:27,240 --> 00:13:30,700 Ako calloc doživio neuspjeh, onda moramo iskrcati sve, zatvoriti 257 00:13:30,700 --> 00:13:32,820 rječnik, a povratak false. 258 00:13:32,820 --> 00:13:40,050 Dakle, pod pretpostavkom da ne uspiju, onda to će stvoriti novo dijete za nas. 259 00:13:40,050 --> 00:13:41,930 A onda ćemo ići u tom djetetu. 260 00:13:41,930 --> 00:13:44,960 Naš kursor će ponoviti do tog djeteta. 261 00:13:44,960 --> 00:13:49,330 >> Sada, ako to nije bilo null za početak, zatim kursor mogu samo ponoviti 262 00:13:49,330 --> 00:13:52,590 do tog djeteta, bez zapravo moraju izdvojiti ništa. 263 00:13:52,590 --> 00:13:56,730 Ovo je slučaj gdje smo prvi put se dogodilo dodijeliti riječ "mačka". I 264 00:13:56,730 --> 00:14:00,330 to znači da kad idemo na dodjelu "Katastrofa", ne moramo stvoriti 265 00:14:00,330 --> 00:14:01,680 čvorovi za C-A-T opet. 266 00:14:01,680 --> 00:14:04,830 Oni već postoje. 267 00:14:04,830 --> 00:14:06,080 >> Što je to drugo? 268 00:14:06,080 --> 00:14:10,480 To je stanje u kojem je c backslash n, gdje je c je nova linija. 269 00:14:10,480 --> 00:14:13,710 To znači da smo uspješno završio je riječ. 270 00:14:13,710 --> 00:14:16,860 Sada ono što želimo učiniti, kada smo Uspješno završen riječ? 271 00:14:16,860 --> 00:14:21,100 Mi ćemo koristiti ove riječi polje unutar našeg struct čvor. 272 00:14:21,100 --> 00:14:23,390 Želimo postaviti da se istina. 273 00:14:23,390 --> 00:14:27,150 Tako da ukazuje da je ovaj čvor pokazuje uspješan 274 00:14:27,150 --> 00:14:29,250 Riječ, stvarna riječ. 275 00:14:29,250 --> 00:14:30,940 >> Sada postaviti da se istina. 276 00:14:30,940 --> 00:14:35,150 Želimo resetirati našu kursor na točku na početku trie ponovno. 277 00:14:35,150 --> 00:14:40,160 I na kraju, povećava, naš rječnik veličina, jer smo pronašli još jedan posao. 278 00:14:40,160 --> 00:14:43,230 Tako ćemo zadržati taj događaj, čitanje u slovo po slovo, 279 00:14:43,230 --> 00:14:49,150 izgradnje novih čvorova u našem trie i Za svaku riječ u rječniku, dok 280 00:14:49,150 --> 00:14:54,020 smo konačno doći C! = EOF, u kojem Slučaj smo izaći iz spisa. 281 00:14:54,020 --> 00:14:57,050 >> Sada postoje dvije slučajeve u što smo mogli pogoditi EOF. 282 00:14:57,050 --> 00:15:00,980 Prvi je, ako je došlo do pogreške čitanje iz datoteke. 283 00:15:00,980 --> 00:15:03,470 Dakle, ako je došlo do pogreške, mi trebate učiniti tipični. 284 00:15:03,470 --> 00:15:06,460 Posuda za sve, u neposrednoj blizini datoteka, vratiti false. 285 00:15:06,460 --> 00:15:09,810 Pod pretpostavkom da nije bilo pogrešaka, da samo znači da mi zapravo pogodio kraj 286 00:15:09,810 --> 00:15:13,750 file, u kojem slučaju, možemo zatvoriti podnijeti i vratiti točno jer smo 287 00:15:13,750 --> 00:15:17,330 Uspješno učitava rječnik u našu trie. 288 00:15:17,330 --> 00:15:20,170 >> Pa sad idemo provjeriti ček. 289 00:15:20,170 --> 00:15:25,156 Gledajući na check funkciju, vidimo da je provjera će vratiti bool. 290 00:15:25,156 --> 00:15:29,680 Ona vraća true ako je to riječ koja je bude donesen je u našoj trie. 291 00:15:29,680 --> 00:15:32,110 To false inače. 292 00:15:32,110 --> 00:15:36,050 Pa, kako se utvrdilo je li ova riječ u našem trie? 293 00:15:36,050 --> 00:15:40,190 >> Ovdje vidimo da je, baš kao i prije, ćemo koristiti kursor se ponoviti 294 00:15:40,190 --> 00:15:41,970 kroz naše trie. 295 00:15:41,970 --> 00:15:46,600 Sada ovdje ćemo ponoviti tijekom cijele naše riječi. 296 00:15:46,600 --> 00:15:50,620 Dakle iterating iznad riječi smo prošli, ćemo odrediti 297 00:15:50,620 --> 00:15:56,400 indeks u djece niz koji odgovara riječi bracket I. Dakle, ovo 298 00:15:56,400 --> 00:15:59,670 će izgledati točno kao opterećenja, gdje li riječ [i] 299 00:15:59,670 --> 00:16:03,310 je apostrof, onda želimo koristiti Index "Abeceda" - 1. 300 00:16:03,310 --> 00:16:05,350 Budući da smo utvrdili da je taj je mjesto gdje ćemo pohraniti 301 00:16:05,350 --> 00:16:07,100 apostrofe. 302 00:16:07,100 --> 00:16:11,780 >> Inače ćemo koristiti dva niža riječ Nosač I. Tako zapamtite tu riječ može 303 00:16:11,780 --> 00:16:13,920 ima proizvoljnog kapitalizaciju. 304 00:16:13,920 --> 00:16:17,540 I tako mi želimo biti sigurni da smo pomoću malim slovom verziju stvari. 305 00:16:17,540 --> 00:16:21,920 I onda oduzmite od toga '"na jednom Ponovno nam dati Abecedi 306 00:16:21,920 --> 00:16:23,880 položaj taj lik. 307 00:16:23,880 --> 00:16:27,680 Tako da će to biti naš index u djece niz. 308 00:16:27,680 --> 00:16:32,420 >> A sad, ako je indeks u djece Niz je nula, da mi znači 309 00:16:32,420 --> 00:16:34,990 više ne može nastaviti iterating niz naše trie. 310 00:16:34,990 --> 00:16:38,870 Ako je to slučaj, ta riječ ne može možda se u našem trie. 311 00:16:38,870 --> 00:16:42,340 Budući da je, kako bi se znači da bi put 312 00:16:42,340 --> 00:16:43,510 na tu riječ. 313 00:16:43,510 --> 00:16:45,290 I nikad ne bi naići na null. 314 00:16:45,290 --> 00:16:47,850 Tako nailazi null, vraćamo lažna. 315 00:16:47,850 --> 00:16:49,840 Riječ je nema u rječniku. 316 00:16:49,840 --> 00:16:53,660 Da nije bilo null, onda smo će Ponavljanje nastaviti. 317 00:16:53,660 --> 00:16:57,220 >> Dakle, idemo vani kursor ukazati na to posebno 318 00:16:57,220 --> 00:16:59,760 čvor u tom indeksu. 319 00:16:59,760 --> 00:17:03,150 Mi zadržati taj događaj u cijeloj Cijeli riječi, uz pretpostavku 320 00:17:03,150 --> 00:17:03,950 mi nikada pogodio null. 321 00:17:03,950 --> 00:17:07,220 To znači da smo bili u mogućnosti da se kroz Cijeli riječ i pronaći 322 00:17:07,220 --> 00:17:08,920 čvora u našem pokušaju. 323 00:17:08,920 --> 00:17:10,770 Ali nismo sasvim gotova. 324 00:17:10,770 --> 00:17:12,290 >> Mi ne želimo samo povratak istina. 325 00:17:12,290 --> 00:17:14,770 Želimo da se vrati kursor> riječ. 326 00:17:14,770 --> 00:17:18,980 Budući da zapamtite opet, je "mačka" se ne u našem rječniku, i "katastrofa" 327 00:17:18,980 --> 00:17:22,935 je, onda ćemo uspješno smo dobili kroz riječ "mačka". Ali kursor 328 00:17:22,935 --> 00:17:25,760 Riječ će biti lažna i nije istina. 329 00:17:25,760 --> 00:17:30,930 Tako smo se vratili kursor riječ za označavanje je li to čvor je zapravo riječ. 330 00:17:30,930 --> 00:17:32,470 I to je to za provjeru. 331 00:17:32,470 --> 00:17:34,250 >> Tako ćemo provjeriti veličinu. 332 00:17:34,250 --> 00:17:37,350 Dakle, veličina će biti prilično jednostavan jer, ne zaboravite na teret, mi smo 333 00:17:37,350 --> 00:17:41,430 povećavanjem rječnik veličinu svaka riječ koju susrećemo. 334 00:17:41,430 --> 00:17:45,350 Dakle, veličina tek će se povratak rječnik veličinu. 335 00:17:45,350 --> 00:17:47,390 I to je to. 336 00:17:47,390 --> 00:17:50,590 >> Dakle, na kraju smo rasteretiti. 337 00:17:50,590 --> 00:17:55,100 Dakle iskrcati, idemo koristiti rekurzivna funkcija zapravo učiniti sve 338 00:17:55,100 --> 00:17:56,530 dio posla za nas. 339 00:17:56,530 --> 00:17:59,340 Tako je naša funkcija će zvati na desiliranje. 340 00:17:59,340 --> 00:18:01,650 Što se desiliranje će učiniti? 341 00:18:01,650 --> 00:18:06,580 Ovdje vidimo da desiliranje će ponoviti tijekom sva djeca na 342 00:18:06,580 --> 00:18:08,410 ovaj čvor. 343 00:18:08,410 --> 00:18:11,750 A ako dijete čvor nije null, onda ćemo 344 00:18:11,750 --> 00:18:13,730 iskrcati dijete čvora. 345 00:18:13,730 --> 00:18:18,010 >> Dakle, ovo je li rekurzivno iskrcati sve naše djece. 346 00:18:18,010 --> 00:18:21,080 Jednom smo bili sigurni da su sva djeca su iskrcali, onda smo 347 00:18:21,080 --> 00:18:25,210 možemo osloboditi, tako iskrcati se. 348 00:18:25,210 --> 00:18:29,460 To će raditi rekurzivno iskrcati cijeli trie. 349 00:18:29,460 --> 00:18:32,850 I onda kada to bude učinjeno, mi samo možemo vratiti istinito. 350 00:18:32,850 --> 00:18:34,210 Iskrcati se ne može uspjeti. 351 00:18:34,210 --> 00:18:35,710 Mi samo oslobađajući stvari. 352 00:18:35,710 --> 00:18:38,870 Dakle, nakon što smo gotovi oslobađajući sve, povratak istina. 353 00:18:38,870 --> 00:18:40,320 I to je to. 354 00:18:40,320 --> 00:18:41,080 Moje ime je Rob. 355 00:18:41,080 --> 00:18:42,426 A to je bukvar. 356 00:18:42,426 --> 00:18:47,830 >> [Glazba svira]