1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> SPEAKER 1: Ni donu tiu solvo provu. 3 00:00:03,070 --> 00:00:07,130 Do ni rigardu kion niaj Struct nodo aspektos. 4 00:00:07,130 --> 00:00:11,040 Tie, ni vidas ni tuj havos Bool Vorto kaj struct nodo stelo 5 00:00:11,040 --> 00:00:12,990 Infanoj heligas alfabeto. 6 00:00:12,990 --> 00:00:18,720 Do unue vi povus scivolante, kial alfabeto hash difinita kiel la 27? 7 00:00:18,720 --> 00:00:22,540 Nu, memoru, ke ni tuj bezonas esti la uzado de la apostrofo, tiel 8 00:00:22,540 --> 00:00:25,610 ke Iĝos iom pri speciala kazo laŭlonge de ĉi tiu programo. 9 00:00:25,610 --> 00:00:28,780 >> OK, nun memoru, kiamaniere oni Trie efektive funkcias. 10 00:00:28,780 --> 00:00:33,420 Diru ni indeksante la vorto katojn, tiam el la radiko de nia Trie, 11 00:00:33,420 --> 00:00:36,670 Ni tuj rigardi la Infanoj tabelo, kaj ni iras por rigardi la 12 00:00:36,670 --> 00:00:42,250 indekso kiu respondas al la letero C. Por ke estus indekso du. 13 00:00:42,250 --> 00:00:46,400 Do pro tio ke, kiu donos al ni nova nodo, kaj tiam ni 14 00:00:46,400 --> 00:00:47,880 labori el tiu nodo. 15 00:00:47,880 --> 00:00:51,830 >> Do pro tio ke nodo, ni estas denove tuj rigardi la Infanoj tabelo, 16 00:00:51,830 --> 00:00:56,170 kaj ni iras rigardi indekso nulo respondi al la A en katon. 17 00:00:56,170 --> 00:01:01,240 Tial do ni tuj iru al tiu nodo, kaj donita ke nodo, ni iras 18 00:01:01,240 --> 00:01:05,170 rigardi la indekso kiu respondas al T. Kaj movanta al tiu nodo, 19 00:01:05,170 --> 00:01:09,590 fine, ni tute rigardis tra nia vorto kato, kaj nun Bool 20 00:01:09,590 --> 00:01:15,020 Vorto supozas indiki ĉu tiu vorto donita estas fakte unu vorto. 21 00:01:15,020 --> 00:01:17,530 >> Do kial ni bezonas ke speciala kazo? 22 00:01:17,530 --> 00:01:21,680 Nu, kio, se la vorto katastrofo Estas en nia vortaro, sed 23 00:01:21,680 --> 00:01:24,120 la vorto kato estas ne? 24 00:01:24,120 --> 00:01:29,030 Do rigardante vidi se la vorto kato estas en nia vortaro, ni iras al 25 00:01:29,030 --> 00:01:34,880 sukcese trarigardi la indeksoj C-A-T kaj atingi nodon, sed tio estas 26 00:01:34,880 --> 00:01:39,760 nur pro katastrofo okazis krei nodojn sur la vojo de C-A-T ĉiuj 27 00:01:39,760 --> 00:01:41,250 la vojo al la fino de la vorto. 28 00:01:41,250 --> 00:01:46,520 Do Bool Vorto uzas indiki ĉu tiu aparta situo reale 29 00:01:46,520 --> 00:01:48,370 indikas vorton. 30 00:01:48,370 --> 00:01:52,920 >> Enorde, do nun kiam ni scias kio estas Trie tuj aspekti, ni rigardu 31 00:01:52,920 --> 00:01:54,800 ĉe la Laŭdu funkcio. 32 00:01:54,800 --> 00:01:58,670 Do Laŭdu tuj resendas Bool cxar se ni sukcese aŭ 33 00:01:58,670 --> 00:02:03,020 sensukcese ŝarĝita vortaro kaj ĉi tiu tuj estos la vortaro 34 00:02:03,020 --> 00:02:04,520 ke ni volas ŝarĝi. 35 00:02:04,520 --> 00:02:08,310 Do unue ni tuj faros estas malferma ĝis tiu vortaro por legado. 36 00:02:08,310 --> 00:02:12,060 Ni devas certigi ke ni ne mankos, tial se la vortaro ne estis 37 00:02:12,060 --> 00:02:15,280 sukcese malfermiĝis, ĝi revenos Ne, en kiu kazo ni tuj 38 00:02:15,280 --> 00:02:16,340 revenu False. 39 00:02:16,340 --> 00:02:21,290 Sed supozante, ke ŝi sukcese malfermita, tiam ni povas efektive legas 40 00:02:21,290 --> 00:02:22,310 tra la vortaro. 41 00:02:22,310 --> 00:02:24,940 >> Do unue ni tuj volas fari estas ni havas ĉi 42 00:02:24,940 --> 00:02:26,560 malloka variablo radiko. 43 00:02:26,560 --> 00:02:30,250 Nun, radiko estas tuj estos nodo stelo. 44 00:02:30,250 --> 00:02:33,830 Ĝi estas la supera parto de nia Trie kiuj ni estas tuj estos ripetanta tra. 45 00:02:33,830 --> 00:02:38,200 Do unue ni tuj volas fari estas rezervi memoron por nia radiko. 46 00:02:38,200 --> 00:02:42,040 >> Rimarku ke ni uzas la Calloc funkcio, kiu estas esence la sama 47 00:02:42,040 --> 00:02:45,560 kiel la malloc funkcion, escepte ĝi estas garantiita redoni iun kiu estas 48 00:02:45,560 --> 00:02:47,240 tute zeroed eksteren. 49 00:02:47,240 --> 00:02:51,350 Do, se ni uzas malloc, ni bezonus iri tra ĉiuj el la montriloj en nia 50 00:02:51,350 --> 00:02:54,220 nodo kaj certigi ke ili estas ĉiu nula. 51 00:02:54,220 --> 00:02:56,780 Do Calloc faros tion por ni. 52 00:02:56,780 --> 00:03:00,390 >> Nu, ĝuste kiel malloc, ni bezonas por fari certas, ke la atribuo estas reale 53 00:03:00,390 --> 00:03:01,580 sukcesa. 54 00:03:01,580 --> 00:03:04,060 Se tiu revenis null, tiam ni bezonas fermi niajn vortaro 55 00:03:04,060 --> 00:03:06,170 Arkivo kaj reveni False. 56 00:03:06,170 --> 00:03:11,040 Do alprenanta la atribuo estis sukcesa, ni tuj uzi nodon 57 00:03:11,040 --> 00:03:14,340 star Kursoro persisti tra nia Trie. 58 00:03:14,340 --> 00:03:17,950 Do nia radika neniam tuj ŝanĝos, sed ni tuj uzi kursoron al 59 00:03:17,950 --> 00:03:20,770 efektive iros de nodo al nodo. 60 00:03:20,770 --> 00:03:25,000 >> Enorde, do en tiu Por buklo, ni estas legi tra la vortaro dosiero, 61 00:03:25,000 --> 00:03:26,965 kaj ni uzas en fgetc. 62 00:03:26,965 --> 00:03:30,360 Do fgetc tuj grab sola karaktero de la dosiero. 63 00:03:30,360 --> 00:03:33,430 Ni tuj daŭrigi grabbing karakteroj dum ni ne atingos la 64 00:03:33,430 --> 00:03:37,540 fino de la dosiero, do ekzistas du kazoj ni devas elteni. 65 00:03:37,540 --> 00:03:41,640 La unua, se la karaktero ne estis nova linio, do ni scias, se tio estis nova 66 00:03:41,640 --> 00:03:44,480 linio, tiam ni estas al movi antaŭen al nova vorto. 67 00:03:44,480 --> 00:03:49,300 Sed supozante ke ne estis nova linio, tiam tie, ni volas eltrovi la 68 00:03:49,300 --> 00:03:52,440 indekso ni tuj indekson en en la Filoj tabelo tiu 69 00:03:52,440 --> 00:03:53,890 ni rigardis antaŭe. 70 00:03:53,890 --> 00:03:57,950 >> Do kiel mi diris antaŭe, ni bezonas speciala kazo la apostrofo. 71 00:03:57,950 --> 00:04:01,040 Rimarku ni uzas la triargumenta operatoro ĉi tie, do ni legos 72 00:04:01,040 --> 00:04:05,500 ĉi kvazaŭ la karaktero ni legas en Estis apostrofo, poste ni iras al 73 00:04:05,500 --> 00:04:11,740 starigis indekson egalas alfabeto minus 1, kiu estos la indekso 26. 74 00:04:11,740 --> 00:04:15,190 Alie, se ĝi ne estis apostrofo, tiam ni tuj starigu la indekso 75 00:04:15,190 --> 00:04:17,820 egala al c minus unu. 76 00:04:17,820 --> 00:04:23,090 Do memoru reen el malposta p aroj, c minus oni tuj donu al ni la 77 00:04:23,090 --> 00:04:27,470 alfabeta pozicio de c, do se c estas la litero A, tiu volo 78 00:04:27,470 --> 00:04:28,770 donu al ni indekso nulo. 79 00:04:28,770 --> 00:04:32,180 Por la litero B, ĝi donus ni la indekso 1, kaj tiel plu. 80 00:04:32,180 --> 00:04:37,070 >> Do tio donas al ni la indekson en la Infanoj tabelo, ke ni volas. 81 00:04:37,070 --> 00:04:42,540 Nun, se tiu indekso estas aktuale nula en la Infanoj tabelo, tio signifas ke 82 00:04:42,540 --> 00:04:47,470 nodo ne aktuale ekzistas de tiun vojon, do ni bezonos al rezervu 83 00:04:47,470 --> 00:04:49,220 nodo por tiu vojo. 84 00:04:49,220 --> 00:04:50,610 Tio estas kion ni faras cxi tie. 85 00:04:50,610 --> 00:04:54,650 Do ni tuj, denove, uzu la Calloc funkcio por ke ni ne havas 86 00:04:54,650 --> 00:05:00,130 al nulo el ĉiuj de la montriloj, kaj ni, denove, bezonas kontroli ke Calloc 87 00:05:00,130 --> 00:05:01,300 ne maltrafis. 88 00:05:01,300 --> 00:05:04,760 Se Calloc tute mankis, do ni bezonas malŝarĝi ĉio, fermu niajn 89 00:05:04,760 --> 00:05:06,880 vortaro, kaj revenas False. 90 00:05:06,880 --> 00:05:14,110 >> Do supozante ke ĝi ne maltrafis, tiam tio kreos novan infanon por ni, 91 00:05:14,110 --> 00:05:16,000 kaj poste ni iros al tiu infano. 92 00:05:16,000 --> 00:05:19,030 Nia kursoro persisti malsupren al tiu infano. 93 00:05:19,030 --> 00:05:23,390 Nun, se ĉi tiu ne estis nula komenci kun, tiam la kursoro povas simple persisti 94 00:05:23,390 --> 00:05:26,650 malsupren al tiu infano sen reale devi destini ion. 95 00:05:26,650 --> 00:05:30,790 Tiu estas la kazo, kie ni unue okazis atribui la vorto kato, kaj 96 00:05:30,790 --> 00:05:34,390 tio signifas, kiam ni iros al destini katastrofo, ni ne bezonas krei 97 00:05:34,390 --> 00:05:35,720 nodojn por C-A-T denove. 98 00:05:35,720 --> 00:05:37,620 Ili jam ekzistas. 99 00:05:37,620 --> 00:05:40,140 >> OK, So what is this Else? 100 00:05:40,140 --> 00:05:44,600 Tio estas la kondiĉo, kie c estis backslash n, kie c estis nova linio. 101 00:05:44,600 --> 00:05:47,780 Tio signifas ke ni devas sukcese kompletigita vorto. 102 00:05:47,780 --> 00:05:51,020 Nun, kion ni volas fari, kiam ni sukcese kompletigis vorto? 103 00:05:51,020 --> 00:05:55,250 Ni tuj uzas tiun vorton kampo ene de nia struct nodo. 104 00:05:55,250 --> 00:06:00,570 >> Ni volas fiksi ke al Vera, por ke indikas, ke ĉi tiu nodo indikas 105 00:06:00,570 --> 00:06:03,320 sukcesa vorto veran vorton. 106 00:06:03,320 --> 00:06:05,050 Nun, turnu ke por Vera. 107 00:06:05,050 --> 00:06:09,210 Ni volas reagordi nia kursoron al punkto al la komenco de la Trie denove. 108 00:06:09,210 --> 00:06:13,510 Kaj fine, pliigo nia vortaro grandeco, kiam ni trovis alian vorton. 109 00:06:13,510 --> 00:06:16,450 >> Enorde, do ni tuj daŭre fari ke, legante en karaktero de 110 00:06:16,450 --> 00:06:21,960 karaktero, konstruante novan nodoj en nia Trie kaj por ĉiu vorto en la 111 00:06:21,960 --> 00:06:26,810 vortaro, ĝis ni finfine atingos c egalas EOF, en kiu kazo, ni rompas 112 00:06:26,810 --> 00:06:28,100 el la dosiero. 113 00:06:28,100 --> 00:06:31,110 Nu, jen estas du kazojn sub kion ni povus bati EOF. 114 00:06:31,110 --> 00:06:35,680 La unua estas, se tie estis eraro legado de la dosiero, do se oni 115 00:06:35,680 --> 00:06:39,280 eraro, ni devas fari la tipa malŝarĝi ĉio, fermi la dosieron, 116 00:06:39,280 --> 00:06:40,520 revenu False. 117 00:06:40,520 --> 00:06:43,870 Supozante ke ne estis eraro, ke nur signifas, ke ni reale batis la finon de 118 00:06:43,870 --> 00:06:47,820 la dosieron, en kiu kazo, ni fermis la Arkivo kaj redoni Vera ekde ni 119 00:06:47,820 --> 00:06:51,010 sukcese alŝutis la vortaro en nian Trie. 120 00:06:51,010 --> 00:06:54,240 >> Enorde, do nun ni kontrolu Check. 121 00:06:54,240 --> 00:06:58,780 Rigardante la Check funkcio, ni vidas ke Check tuj resendas Bool. 122 00:06:58,780 --> 00:07:03,740 Ĝi donas True se tiu vorto, ke ĝi estas aprobotaj estas en nia Trie. 123 00:07:03,740 --> 00:07:06,170 False alie. 124 00:07:06,170 --> 00:07:10,110 >> Do kiel ni al difini ĉu tiu vorto estas en nia Trie? 125 00:07:10,110 --> 00:07:14,270 Oni vidas ĉi tie ke, samkiel antaŭ, Ni tuj uzi kursoro persisti 126 00:07:14,270 --> 00:07:16,010 tra nia Trie. 127 00:07:16,010 --> 00:07:20,650 Nun, ĉi tien, ni tuj persisti super nia tuta vorto. 128 00:07:20,650 --> 00:07:24,680 Do ripetanta super la vorto ni estas pasis, ni tuj determinas la 129 00:07:24,680 --> 00:07:29,280 indekso en la Filoj tabelo tiu korespondas al vorto krampo i. 130 00:07:29,280 --> 00:07:34,150 Do tiu tuj serĉos ekzakte kiel Laŭdu, kie se vorto krampo i estas 131 00:07:34,150 --> 00:07:38,110 apostrofo, ĉar ni volas uzi indekso alfabeto minus 1 ĉar ni determinis 132 00:07:38,110 --> 00:07:41,160 ke estas kie ni iras stoki apostrofoj. 133 00:07:41,160 --> 00:07:44,440 >> Alie, ni tuj uzi tolower vorto krampo i. 134 00:07:44,440 --> 00:07:48,270 Do memoru, ke vorto povas havi arbitrajn majuskloj, do ni 135 00:07:48,270 --> 00:07:51,590 volas certigi, ke ni uzas minuskla versio de aferoj. 136 00:07:51,590 --> 00:07:55,300 Kaj tiam subtrahi el tiu minuskla a al, refoje, donu al ni la 137 00:07:55,300 --> 00:07:57,940 alfabeta pozicio de tiu signo. 138 00:07:57,940 --> 00:08:01,740 Do tiu tuj estos nia indekso en la Filoj tabelo. 139 00:08:01,740 --> 00:08:06,480 >> Kaj nun, se tio indekson en la Filoj tabelo estas nula, tio signifas ke ni 140 00:08:06,480 --> 00:08:09,050 ne plu povas daŭrigi ripetanta malsupren niaj Trie. 141 00:08:09,050 --> 00:08:13,320 Se tio estas la kazo, tiu vorto ne povas eble esti en nia Trie, ĉar se ĝi 142 00:08:13,320 --> 00:08:18,000 estis, ke tio signifus estus vojeto malsupren al tiu vorto, kaj vi farus 143 00:08:18,000 --> 00:08:19,350 neniam renkontas nula. 144 00:08:19,350 --> 00:08:21,910 Do malhelpi nulaj, ni revenos False. 145 00:08:21,910 --> 00:08:23,810 La vorto ne estas en la vortaro. 146 00:08:23,810 --> 00:08:28,200 Se ĝi estis ne nulaj, do ni tuj daŭrigi ripetanta, do ni tuj 147 00:08:28,200 --> 00:08:33,150 ĝisdatigi nian kursoron atentigi al tio apartan nodon en tiu indekso. 148 00:08:33,150 --> 00:08:36,659 >> Do ni observu la fari tion tra la tutan vorton. 149 00:08:36,659 --> 00:08:40,630 Supozante ni neniam batis nula, ke per ni povis trairi la tutan 150 00:08:40,630 --> 00:08:44,840 mondon kaj trovi nodon en nia Trie, sed ni ne tute farita ankoraŭ. 151 00:08:44,840 --> 00:08:46,350 Ni ne volas ĝuste redoni Vera. 152 00:08:46,350 --> 00:08:51,400 Ni volas reveni kursoro eraro vorto ĉar rememoru, denove, se la kato ne estas 153 00:08:51,400 --> 00:08:55,140 en nia vortaro kaj katastrofo estas, tiam ni sukcese akiri tra 154 00:08:55,140 --> 00:08:59,810 la vorto kato, sed kursoron vorto Estos False kaj ne vera. 155 00:08:59,810 --> 00:09:04,990 Do ni revenu kursoron vorto por indiki ĉu ĉi tiu nodo estas reale vorto, 156 00:09:04,990 --> 00:09:06,530 kaj tio estas por ĉekon. 157 00:09:06,530 --> 00:09:08,310 >> Do ni kontrolu Grando. 158 00:09:08,310 --> 00:09:11,410 Do Grando tuj esti sufiĉe facila ĉar rememoru en Laŭdu, ni estas 159 00:09:11,410 --> 00:09:15,480 pliigante vortaro grandeco por ĉiu vorto, kiun ni renkontas. 160 00:09:15,480 --> 00:09:20,820 Do Grando estas ĝuste tuj revenos vortaro grandeco, kaj tio estas ĝi. 161 00:09:20,820 --> 00:09:24,650 >> Enorde, do laste, ni devas malŝarĝi. 162 00:09:24,650 --> 00:09:29,050 Do malŝarĝi, ni tuj uzi rekursia funkcio por fakte plenumos cxiujn 163 00:09:29,050 --> 00:09:33,390 de la laboro por ni, por niaj funkcio tuj estos nomata Unloader. 164 00:09:33,390 --> 00:09:35,830 Kio estas Unloader faros? 165 00:09:35,830 --> 00:09:40,640 Oni vidas ĉi tie ke Unloader tuj persisti super ĉiuj el la infanoj en 166 00:09:40,640 --> 00:09:45,810 tiun apartan nodon, kaj se la infano nodo estas ne nulaj, do ni tuj 167 00:09:45,810 --> 00:09:47,760 malŝarĝi la infano nodo. 168 00:09:47,760 --> 00:09:52,070 >> Do tiu tuj rekursie malŝarĝi ĉiuj niaj infanoj. 169 00:09:52,070 --> 00:09:55,140 Iam ni estas certa, ke ĉiuj niaj infanoj estis malŝarĝitaj, ĉar ni 170 00:09:55,140 --> 00:09:58,830 povas liberigi nin, tiel malŝarĝi samaj. 171 00:09:58,830 --> 00:10:04,550 Do tio rekursie malŝarĝi la tuta Trie, kaj tiam iam tio 172 00:10:04,550 --> 00:10:06,910 farita, oni povas simple reveni Vera. 173 00:10:06,910 --> 00:10:09,770 Malŝarĝi ne povas malsukcesi, ni estas nur liberigante aferojn. 174 00:10:09,770 --> 00:10:12,985 Do iam ni faris liberigante ĉio, revenu Vera. 175 00:10:12,985 --> 00:10:14,380 Kaj tio estas ĝi. 176 00:10:14,380 --> 00:10:16,792 Mia nomo estas Rob, kaj ĉi estis [inaudibles]. 177 00:10:16,792 --> 00:10:21,888