1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> Tagapagsalita 1: ni bigyan Hayaan ito na solution sa isang try. 3 00:00:03,070 --> 00:00:07,130 Kaya ipaalam sa tumagal ng isang pagtingin sa kung ano ang aming Struct node magiging hitsura. 4 00:00:07,130 --> 00:00:11,040 Dito, makikita natin kami ay pagpunta sa may Bool Salita at isang Struct node star 5 00:00:11,040 --> 00:00:12,990 Ang mga bata bracket alpabeto. 6 00:00:12,990 --> 00:00:18,720 Kaya unang bagay na maaaring nag-iisip, bakit tinukoy ay alpabeto hash bilang 27? 7 00:00:18,720 --> 00:00:22,540 Well, tandaan na kami ay pagpunta sa kailangan na paghawak ng mga kudlit, kaya 8 00:00:22,540 --> 00:00:25,610 na pupuntahan na medyo ng isang espesyal na kaso sa buong programa na ito. 9 00:00:25,610 --> 00:00:28,780 >> OK, ngayon, tandaan kung paano ang isang Trie talaga gumagana. 10 00:00:28,780 --> 00:00:33,420 Sabihin nating naka-ini-index namin ang salitang pusa, pagkatapos ay mula sa root ng aming Trie, 11 00:00:33,420 --> 00:00:36,670 kami ay pagpunta sa tumingin sa mga Bata array, at kami ay pagpunta sa tumingin sa 12 00:00:36,670 --> 00:00:42,250 index na tumutugon sa titik C. Kaya na magiging index ng dalawa. 13 00:00:42,250 --> 00:00:46,400 Kaya ibinigay na iyon, na ay magbibigay sa amin isang bagong node, at pagkatapos kami ay 14 00:00:46,400 --> 00:00:47,880 gumagana mula sa na node. 15 00:00:47,880 --> 00:00:51,830 >> Kaya ibinigay na node, kami ay isang beses muli pagpunta sa tumingin sa mga Bata array, 16 00:00:51,830 --> 00:00:56,170 at kami ay pagpunta upang tumingin sa index zero upang tumugma sa A sa pusa. 17 00:00:56,170 --> 00:01:01,240 Kaya pagkatapos kami ay pagpunta upang pumunta sa na node, at ibinigay na node, kami ay pagpunta 18 00:01:01,240 --> 00:01:05,170 upang tumingin sa index na tumutugon sa T. At gumagalaw sa sa na node, 19 00:01:05,170 --> 00:01:09,590 sa wakas, ganap namin ay tumingin sa pamamagitan ng aming salita Cat, at ngayon Bool 20 00:01:09,590 --> 00:01:15,020 Salita ay dapat na ipahiwatig kung ito ibinigay na salita ay tunay na isang salita. 21 00:01:15,020 --> 00:01:17,530 >> Kaya bakit kailangan namin na espesyal na kaso? 22 00:01:17,530 --> 00:01:21,680 Well, kung ano kung ang salitang sakuna ay nasa aming diksyunaryo, ngunit 23 00:01:21,680 --> 00:01:24,120 ang salitang pusa ay hindi? 24 00:01:24,120 --> 00:01:29,030 Kaya sa naghahanap upang makita kung ang salitang pusa ay sa aming diksyonaryo, kami ay pagpunta sa 25 00:01:29,030 --> 00:01:34,880 Matagumpay na tumingin sa pamamagitan ng mga indeks ng C-A-T at maabot ang isang node, ngunit iyan ay 26 00:01:34,880 --> 00:01:39,760 dahil lamang nangyari sakuna sa lumikha ng mga node sa paraan mula sa C-A-T lahat 27 00:01:39,760 --> 00:01:41,250 ang daan sa dulo ng salita. 28 00:01:41,250 --> 00:01:46,520 Kaya Bool Salita ay ginagamit ipahiwatig kung ito partikular na lokasyon talaga 29 00:01:46,520 --> 00:01:48,370 ay nagpapahiwatig ng isang salita. 30 00:01:48,370 --> 00:01:52,920 >> Ang lahat ng mga karapatan, kaya ngayon na alam namin kung ano ang isang Trie ay pagpunta sa hitsura, tingnan natin hayaan 31 00:01:52,920 --> 00:01:54,800 sa Mag-load ng function. 32 00:01:54,800 --> 00:01:58,670 Kaya Load ay pagpunta upang magbalik ng Bool para kung namin matagumpay o 33 00:01:58,670 --> 00:02:03,020 unsuccessfully load diksyunaryo at ito ay magiging diksyunaryo 34 00:02:03,020 --> 00:02:04,520 na gusto naming i-load. 35 00:02:04,520 --> 00:02:08,310 Kaya unang bagay na kami ay pagpunta sa gawin ay bukas up na diksyunaryo para sa pagbabasa. 36 00:02:08,310 --> 00:02:12,060 Mayroon kaming upang matiyak na hindi namin ginawa mabibigo, kaya kung ang diksiyonaryo ay hindi 37 00:02:12,060 --> 00:02:15,280 Matagumpay na nabuksan, at ibabalik ito Hindi, na kung saan kami ay pagpunta sa 38 00:02:15,280 --> 00:02:16,340 bumalik Maling. 39 00:02:16,340 --> 00:02:21,290 Ngunit sa pag-aakala na ito matagumpay binuksan, pagkatapos ay maaari naming talagang basahin 40 00:02:21,290 --> 00:02:22,310 sa pamamagitan ng diksyunaryo. 41 00:02:22,310 --> 00:02:24,940 >> Kaya unang bagay na kami ay pagpunta sa gusto lang gawin ay mayroon kaming na ito 42 00:02:24,940 --> 00:02:26,560 global variable na ugat. 43 00:02:26,560 --> 00:02:30,250 Ngayon, ugat ay magiging isang node bituin. 44 00:02:30,250 --> 00:02:33,830 Ito ay sa tuktok ng aming Trie na kami pagpunta sa ma-iterating sa pamamagitan ng. 45 00:02:33,830 --> 00:02:38,200 Kaya unang bagay na kami ay pagpunta sa nais na gawin ay magtalaga ng memory para sa aming mga ugat. 46 00:02:38,200 --> 00:02:42,040 >> Pansinin na ginagamit namin ang Calloc function, na kung saan ay isa lamang ang parehong 47 00:02:42,040 --> 00:02:45,560 bilang ang Malloc function, maliban ito ay garantisadong upang magbalik ng bagay na 48 00:02:45,560 --> 00:02:47,240 ganap zeroed out. 49 00:02:47,240 --> 00:02:51,350 Kaya kung ginamit namin Malloc, gusto naming i- pumunta sa pamamagitan ng lahat ng mga mungkahi ukol sa aming mga 50 00:02:51,350 --> 00:02:54,220 node at matiyak na ang mga ito ay lahat null. 51 00:02:54,220 --> 00:02:56,780 Kaya Calloc ay gawin iyon para sa amin. 52 00:02:56,780 --> 00:03:00,390 >> Ngayon, tulad ng Malloc, kailangan naming gumawa Tiyakin na ang paglalaan ay talagang 53 00:03:00,390 --> 00:03:01,580 matagumpay. 54 00:03:01,580 --> 00:03:04,060 Kung ito ibinalik null, pagkatapos namin kailangan upang isara ang aming diksyunaryo 55 00:03:04,060 --> 00:03:06,170 maghain at bumalik Maling. 56 00:03:06,170 --> 00:03:11,040 Kaya kung ipagpalagay na ang paglalaan ay matagumpay, kami ay pagpunta sa gumamit ng isang node 57 00:03:11,040 --> 00:03:14,340 lagyan ng star ang Cursor na umulit sa pamamagitan ng aming Trie. 58 00:03:14,340 --> 00:03:17,950 Kaya aming mga ugat ay hindi kailanman pagpunta sa magbago, ngunit kami ay pagpunta sa gumamit ng Cursor sa 59 00:03:17,950 --> 00:03:20,770 talaga pumunta mula sa node sa node. 60 00:03:20,770 --> 00:03:25,000 >> Ang lahat ng mga karapatan, kaya sa ganitong Para sa loop, kami ay pagbabasa sa pamamagitan ng mga file na diksyonaryo, 61 00:03:25,000 --> 00:03:26,965 at aming ginagamit sa fgetc. 62 00:03:26,965 --> 00:03:30,360 Kaya fgetc ay pagpunta sa grab isang solong karakter mula sa file. 63 00:03:30,360 --> 00:03:33,430 Kami ay pagpunta sa magpatuloy daklot character habang hindi namin maabot ang 64 00:03:33,430 --> 00:03:37,540 magtapos ng file, kaya walang mga dalawang mga kaso na kailangan namin upang mahawakan. 65 00:03:37,540 --> 00:03:41,640 Ang una, kung ang karakter ay hindi isang bagong linya, upang malaman namin kung ito ay isang bagong 66 00:03:41,640 --> 00:03:44,480 linya, pagkatapos kami ay tungkol sa lumipat sa isang bagong salita. 67 00:03:44,480 --> 00:03:49,300 Ngunit sa pag-aakala ay hindi ito isang bagong linya, pagkatapos ay dito, nais naming malaman kung ang 68 00:03:49,300 --> 00:03:52,440 index namin ang pagpunta sa index sa sa mga bata array na 69 00:03:52,440 --> 00:03:53,890 itinuturing namin ang bago. 70 00:03:53,890 --> 00:03:57,950 >> Kaya tulad ng sinabi ko dati, kailangan naming i- espesyal na kaso ang kudlit. 71 00:03:57,950 --> 00:04:01,040 Pansinin na aming ginagamit ang tatlong bagay operator dito, kaya kami ay pagpunta sa basahin 72 00:04:01,040 --> 00:04:05,500 ito na parang ang character na binabasa namin sa noon ay isang kudlit, pagkatapos kami ay pagpunta sa 73 00:04:05,500 --> 00:04:11,740 set index katumbas ng alpabeto minus 1, na kung saan ay ang magiging index 26. 74 00:04:11,740 --> 00:04:15,190 Iba Pa, kung ito ay hindi isang kudlit, pagkatapos kami ay pagpunta upang itakda ang index 75 00:04:15,190 --> 00:04:17,820 katumbas ng c minus isang. 76 00:04:17,820 --> 00:04:23,090 Kaya tandaan pabalik mula sa mga nakaraang mga set p, c minus isang ay pagpunta sa bigyan kami ng mga 77 00:04:23,090 --> 00:04:27,470 alpabetikong posisyon ng c, kaya kung c ay ang letrang A, ang kaloobang ito'y 78 00:04:27,470 --> 00:04:28,770 bigyan kami ng index zero. 79 00:04:28,770 --> 00:04:32,180 Para sa titik B, mas bigyan amin index 1, at iba pa. 80 00:04:32,180 --> 00:04:37,070 >> Kaya ito ay nagbibigay sa amin ng index sa Ang mga bata array na gusto namin. 81 00:04:37,070 --> 00:04:42,540 Ngayon, kung ito index ay kasalukuyang null sa ang mga bata array, ibig sabihin nito ay na 82 00:04:42,540 --> 00:04:47,470 isang node ay kasalukuyang hindi umiiral mula sa ang path na iyon, kaya kailangan namin upang magtalaga ng isang 83 00:04:47,470 --> 00:04:49,220 na node para sa ang path na iyon. 84 00:04:49,220 --> 00:04:50,610 Iyon ay kung ano ang ginagawa namin dito. 85 00:04:50,610 --> 00:04:54,650 Kaya kami ay pagpunta sa, muli, gamitin ang Calloc function ng sa gayon ay wala kaming 86 00:04:54,650 --> 00:05:00,130 sa zero ang lahat ng mga payo, at kami, muli, kailangan upang suriin na Calloc 87 00:05:00,130 --> 00:05:01,300 ay hindi mabibigo. 88 00:05:01,300 --> 00:05:04,760 Kung Calloc nabigo, pagkatapos kailangan namin upang mag-ibis ang lahat ng bagay, isara ang aming 89 00:05:04,760 --> 00:05:06,880 diksyonaryo, at ibalik Maling. 90 00:05:06,880 --> 00:05:14,110 >> Kaya sa pag-aakala na hindi ito mabibigo, at pagkatapos ay ito ay lilikha ng bagong bata para sa atin, 91 00:05:14,110 --> 00:05:16,000 at pagkatapos ay magpapatuloy kami sa bata na iyon. 92 00:05:16,000 --> 00:05:19,030 Ang aming cursor ay umulit pababa sa bata na iyon. 93 00:05:19,030 --> 00:05:23,390 Ngayon, kung hindi ito ay walang bisa upang magsimula sa, pagkatapos ay ang cursor maaari lamang umulit 94 00:05:23,390 --> 00:05:26,650 pababa sa bata na walang tunay pagkakaroon upang magtalaga ng kahit ano. 95 00:05:26,650 --> 00:05:30,790 Ito ay ang kaso kung saan unang namin ang nangyari upang maglaan ng salitang pusa, at 96 00:05:30,790 --> 00:05:34,390 Nangangahulugan itong kapag tayo pupunta maglaan malaking kapahamakan, hindi namin kailangan upang lumikha ng 97 00:05:34,390 --> 00:05:35,720 node para sa C-A-T muli. 98 00:05:35,720 --> 00:05:37,620 Sila ay umiiral na. 99 00:05:37,620 --> 00:05:40,140 >> OK, kaya kung ano ito Iba Pa? 100 00:05:40,140 --> 00:05:44,600 Ito ang kalagayan kung saan c noon ay backslash n, kung saan c ay isang bagong linya. 101 00:05:44,600 --> 00:05:47,780 Ang ibig sabihin nito na matagumpay na mayroon kami Nakumpleto ang isang salita. 102 00:05:47,780 --> 00:05:51,020 Ngayon, ano ang gusto naming gawin kapag kami Matagumpay na nakumpleto ang isang salita? 103 00:05:51,020 --> 00:05:55,250 Kami ay pagpunta sa gamitin ang salita patlang sa loob ng aming Struct node. 104 00:05:55,250 --> 00:06:00,570 >> Gusto naming i-set na sa True, upang ay nagpapahiwatig na ito na node ay nagpapahiwatig ng isang 105 00:06:00,570 --> 00:06:03,320 matagumpay salita isang aktwal na salita. 106 00:06:03,320 --> 00:06:05,050 Ngayon, nakatakda na sa True. 107 00:06:05,050 --> 00:06:09,210 Gusto naming upang i-reset ang aming cursor sa punto upang muli sa simula ng Trie. 108 00:06:09,210 --> 00:06:13,510 At sa wakas, dinagdagan ng aming diksyunaryo laki dahil nakakita kami ng isa pang salita. 109 00:06:13,510 --> 00:06:16,450 >> Ang lahat ng mga karapatan, kaya kami ay pagpunta upang panatilihin ang paggawa na, pagbabasa sa katangian sa pamamagitan ng 110 00:06:16,450 --> 00:06:21,960 karakter, bumubuo ka ng mga bagong node sa ang aming Trie at para sa bawat salita sa 111 00:06:21,960 --> 00:06:26,810 diksyonaryo, hanggang sa kami sa wakas naabot c ay katumbas ng EOF, kung saan, masira namin 112 00:06:26,810 --> 00:06:28,100 out ng file. 113 00:06:28,100 --> 00:06:31,110 Ngayon, mayroong dalawang mga kaso sa ilalim na maaring pindutin namin EOF. 114 00:06:31,110 --> 00:06:35,680 Ang una ay kung nagkaroon ng error pagbabasa mula sa file, kaya kung nagkaroon 115 00:06:35,680 --> 00:06:39,280 ng isang error, kailangan namin upang gawin ang mga tipikal alisan ng bala ang lahat ng bagay, isara ang file, 116 00:06:39,280 --> 00:06:40,520 bumalik Maling. 117 00:06:40,520 --> 00:06:43,870 Sa pag-aakala nagkaroon hindi isang error, na Ang ibig sabihin lang talaga pindutin namin ang katapusan ng 118 00:06:43,870 --> 00:06:47,820 ang file, na kung saan, isara namin ang maghain at bumalik True mula noong namin 119 00:06:47,820 --> 00:06:51,010 Matagumpay na na-load ang diksyunaryo sa aming Trie. 120 00:06:51,010 --> 00:06:54,240 >> Ang lahat ng mga karapatan, kaya ngayon sabihin tingnan ang Check. 121 00:06:54,240 --> 00:06:58,780 Naghahanap sa Check function, makikita natin na Check ay pagpunta upang magbalik ng Bool. 122 00:06:58,780 --> 00:07:03,740 Ibinabalik nito ang True kung ang salitang ito na ito ini ang pumasa ay nasa aming Trie. 123 00:07:03,740 --> 00:07:06,170 Ibinabalik nito ang Maling kung hindi man. 124 00:07:06,170 --> 00:07:10,110 >> Kaya paano kami makapupunta upang matukoy kung ang salitang ito ay nasa aming Trie? 125 00:07:10,110 --> 00:07:14,270 Nakakakita kami dito na, tulad ng dati, kami ay pagpunta upang gamitin ang cursor na umulit 126 00:07:14,270 --> 00:07:16,010 sa pamamagitan ng aming Trie. 127 00:07:16,010 --> 00:07:20,650 Ngayon, narito, ipinapadala namin ng pagpunta sa umulit lagpas sa aming buong salita. 128 00:07:20,650 --> 00:07:24,680 Kaya iterating sa ibabaw ang salitang tayo lumipas, kami ay pagpunta upang matukoy ang 129 00:07:24,680 --> 00:07:29,280 index sa mga bata array na tumutugon sa salita bracket i. 130 00:07:29,280 --> 00:07:34,150 Kaya ito ay pagpunta upang tumingin nang eksakto tulad ng Mag-load, kung saan kung salita bracket i ay isang 131 00:07:34,150 --> 00:07:38,110 kudlit, pagkatapos ay nais naming gumamit ng index alpabeto minus 1 dahil natukoy namin 132 00:07:38,110 --> 00:07:41,160 na kung saan kami ay pagpunta mag-imbak apostrophes. 133 00:07:41,160 --> 00:07:44,440 >> Iba Pa kami ay pagpunta sa gamitin tolower salita bracket i. 134 00:07:44,440 --> 00:07:48,270 Kaya tandaan ang salitang iyon ay maaaring magkaroon ng di-makatwirang capitalization, at kaya namin 135 00:07:48,270 --> 00:07:51,590 gusto mong tiyakin na ginagamit namin isang maliit na mga bersyon ng mga bagay. 136 00:07:51,590 --> 00:07:55,300 At pagkatapos ay ibabawas mula sa lowercase na isang upang, sa sandaling muli, magbigay sa amin ang 137 00:07:55,300 --> 00:07:57,940 alpabetikong posisyon ng na character. 138 00:07:57,940 --> 00:08:01,740 Kaya na pupuntahan maging aming index sa mga bata ng array. 139 00:08:01,740 --> 00:08:06,480 >> At ngayon, kung index na papunta sa mga bata array ay walang bisa, ibig sabihin namin 140 00:08:06,480 --> 00:08:09,050 hindi na magpatuloy iterating down na aming Trie. 141 00:08:09,050 --> 00:08:13,320 Kung iyon ang kaso, ang salitang ito ay hindi maaaring marahil maging sa aming Trie, dahil kung ito 142 00:08:13,320 --> 00:08:18,000 ay, na ang magiging ibig sabihin doon ay magiging isang daanan pababa sa na salita, at ginagawa mo 143 00:08:18,000 --> 00:08:19,350 hindi kailanman nakatagpo null. 144 00:08:19,350 --> 00:08:21,910 Kaya Nakakaranas ng mga null, bumalik kami Maling. 145 00:08:21,910 --> 00:08:23,810 Salita ay wala sa diksyonaryo. 146 00:08:23,810 --> 00:08:28,200 Kung ito ay hindi null, pagkatapos kami ay pagpunta sa magpatuloy iterating, kaya kami ay pagpunta 147 00:08:28,200 --> 00:08:33,150 upang i-update ang aming cursor upang tumuro sa na partikular na node sa index iyon. 148 00:08:33,150 --> 00:08:36,659 >> Kaya panatilihin namin ang paggawa na sa buong ang buong salita. 149 00:08:36,659 --> 00:08:40,630 Sa pag-aakala namin kailanman pindutin null, na paraan nagawa naming upang makakuha ng sa pamamagitan ng buong 150 00:08:40,630 --> 00:08:44,840 mundo at makahanap ng isang node sa aming Trie, ngunit kami ay hindi masyadong pa tapos. 151 00:08:44,840 --> 00:08:46,350 Hindi namin nais upang bumalik lamang True. 152 00:08:46,350 --> 00:08:51,400 Gusto naming bumalik cursor error salita dahil, tandaan muli, kung pusa ay hindi 153 00:08:51,400 --> 00:08:55,140 sa aming diksyunaryo at sakuna ay, Pagkatapos ay matagumpay naming makakuha ng sa pamamagitan ng 154 00:08:55,140 --> 00:08:59,810 ang salitang pusa, ngunit cursor salita Magiging Maling at hindi True. 155 00:08:59,810 --> 00:09:04,990 Kaya bumalik kami cursor salita upang ipahiwatig kung ito node ay talagang isang salita, 156 00:09:04,990 --> 00:09:06,530 at iyon ito para sa check. 157 00:09:06,530 --> 00:09:08,310 >> Kaya ni check out Sukat ng ipaalam. 158 00:09:08,310 --> 00:09:11,410 Kaya Sukat ay magiging kaakit-akit sa madaling dahil, alalahanin sa Load, kami ay 159 00:09:11,410 --> 00:09:15,480 incrementing laki ng diksyunaryo para sa bawat salita na nakatagpo kami. 160 00:09:15,480 --> 00:09:20,820 Kaya Sukat ay lamang pagpunta upang bumalik laki ng diksyunaryo, at iyon ito. 161 00:09:20,820 --> 00:09:24,650 >> Ang lahat ng mga karapatan, kaya bilang wakas, mayroon kaming mag-ibis. 162 00:09:24,650 --> 00:09:29,050 Kaya mag-ibis, kami ay pagpunta sa gumamit ng isang recursive function na upang aktwal na gawin ang lahat 163 00:09:29,050 --> 00:09:33,390 ng trabaho para sa amin, kaya ang aming pag-andar ay pagpunta sa tawagin Unloader. 164 00:09:33,390 --> 00:09:35,830 Ano ang Unloader pagpunta sa gawin? 165 00:09:35,830 --> 00:09:40,640 Nakakakita kami dito na Unloader ay pagpunta sa umulit sa ibabaw ng lahat ng mga bata sa 166 00:09:40,640 --> 00:09:45,810 ang partikular na node, at kung ang bata na node ay hindi null, pagkatapos kami ay pagpunta sa 167 00:09:45,810 --> 00:09:47,760 alisan ng bala ang bata node. 168 00:09:47,760 --> 00:09:52,070 >> Kaya ito ay pagpunta sa recursively alisan ng bala lahat ng ating mga anak. 169 00:09:52,070 --> 00:09:55,140 Sa sandaling sigurado kami na ang lahat ng ating mga anak Na-deskargado, pagkatapos namin 170 00:09:55,140 --> 00:09:58,830 Maaari palayain ang ating mga sarili, upang alisan ng bala kami mismo. 171 00:09:58,830 --> 00:10:04,550 Kaya ito ay recursively alisan ng bala ang buong Trie, at pagkatapos ay sa sandaling iyon 172 00:10:04,550 --> 00:10:06,910 tapos na, maaari naming ibalik lamang True. 173 00:10:06,910 --> 00:10:09,770 Hindi maaaring mabigo alisan ng bala, hindi namin pagbabakante lamang bagay. 174 00:10:09,770 --> 00:10:12,985 Kaya sa sandaling tapos na kami pagbabakante ang lahat ng bagay, bumalik True. 175 00:10:12,985 --> 00:10:14,380 At na ito. 176 00:10:14,380 --> 00:10:16,792 Ang pangalan ko ay Rob, at ito ay [hindi marinig]. 177 00:10:16,792 --> 00:10:21,888