1 00:00:00,000 --> 00:00:12,350 >> [CHWARAE CERDDORIAETH] 2 00:00:12,350 --> 00:00:13,050 >> ROB BOWDEN: Hi. 3 00:00:13,050 --> 00:00:13,640 Rwy'n Rob. 4 00:00:13,640 --> 00:00:16,210 A gadewch i ni ateb hyn. 5 00:00:16,210 --> 00:00:20,070 Felly dyma ni yn mynd i weithredu tabl cyffredinol. 6 00:00:20,070 --> 00:00:24,090 Rydym yn gweld bod y nod strwythur ein tabl yn mynd i edrych fel hyn. 7 00:00:24,090 --> 00:00:28,710 Felly, mae'n mynd i gael gair torgoch amrywiaeth o faint HYD + 1. 8 00:00:28,710 --> 00:00:32,259 Peidiwch ag anghofio y + 1, gan fod yr uchafswm gair yn y geiriadur yn 45 9 00:00:32,259 --> 00:00:33,130 cymeriadau. 10 00:00:33,130 --> 00:00:37,070 Ac yna rydym yn mynd i angen un ychwanegol cymeriad ar gyfer y sero slaes. 11 00:00:37,070 --> 00:00:40,870 >> Ac yna mae ein hashtable ym mhob bwced yn mynd i storio 12 00:00:40,870 --> 00:00:42,320 rhestr gysylltiedig o nodau. 13 00:00:42,320 --> 00:00:44,420 Nid ydym yn gwneud llinol dreiddgar yma. 14 00:00:44,420 --> 00:00:48,430 Ac felly er mwyn cysylltu i'r nesaf elfen yn y bwced, mae angen 15 00:00:48,430 --> 00:00:50,390 nod strwythur * nesaf. 16 00:00:50,390 --> 00:00:51,110 OK. 17 00:00:51,110 --> 00:00:53,090 Felly, dyna beth yw nod yn edrych. 18 00:00:53,090 --> 00:00:56,180 >> Nawr dyma yw'r datganiad ein hashtable. 19 00:00:56,180 --> 00:00:59,640 Mae'n mynd i gael 16,834 bwcedi. 20 00:00:59,640 --> 00:01:01,910 Ond nid y rhif hwnnw yn wirioneddol bwysig. 21 00:01:01,910 --> 00:01:05,450 Ac yn olaf, rydym yn mynd i gael y maint hashtable amrywiol byd-eang, sy'n 22 00:01:05,450 --> 00:01:07,000 yn mynd i ddechrau i ffwrdd fel sero. 23 00:01:07,000 --> 00:01:10,760 Ac mae'n mynd i gadw golwg ar faint llawer o eiriau yn ein geiriadur. 24 00:01:10,760 --> 00:01:13,710 >> Felly, gadewch i ni edrych ar lwyth. 25 00:01:13,710 --> 00:01:16,390 Hysbysiad bod llwyth, mae'n dychwelyd i bool. 26 00:01:16,390 --> 00:01:20,530 Byddwch yn dychwelyd yn wir os oedd yn llwyddiannus llwytho, a ffug fel arall. 27 00:01:20,530 --> 00:01:23,990 Ac mae'n cymryd * torgoch Etholaeth geiriadur, sef y geiriadur 28 00:01:23,990 --> 00:01:25,280 yr ydym am ei agor. 29 00:01:25,280 --> 00:01:27,170 Felly, dyna'r peth cyntaf rydym yn mynd i'w wneud. 30 00:01:27,170 --> 00:01:29,500 >> Rydym yn mynd i fopen y geiriadur ar gyfer darllen. 31 00:01:29,500 --> 00:01:31,680 Ac rydym yn mynd i gael i wneud sicrhau ei fod yn llwyddo. 32 00:01:31,680 --> 00:01:35,920 Felly, os bydd yn dychwelyd NULL, yna ni wnaethom agor y geiriadur yn llwyddiannus. 33 00:01:35,920 --> 00:01:37,440 Ac mae angen i ddychwelyd ffug. 34 00:01:37,440 --> 00:01:41,580 Ond gan dybio bod y gwnaeth yn llwyddiannus agored, yna rydym yn awyddus i ddarllen y 35 00:01:41,580 --> 00:01:42,400 geiriadur. 36 00:01:42,400 --> 00:01:46,450 Felly cadwch dolennu nes i ni ddod o hyd i rheswm i dorri allan o'r cylch hwn, 37 00:01:46,450 --> 00:01:47,570 y byddwn yn ei weld. 38 00:01:47,570 --> 00:01:48,920 Felly cadwch dolennu. 39 00:01:48,920 --> 00:01:51,780 >> Ac yn awr rydym yn mynd i malloc un nod sengl. 40 00:01:51,780 --> 00:01:54,020 Ac wrth gwrs, mae angen i wyntyllu'r wirio eto. 41 00:01:54,020 --> 00:01:58,680 Felly, os nad mallocing yn llwyddo, yna rydym am i ddadlwytho unrhyw nod yr ydym yn 42 00:01:58,680 --> 00:02:02,590 ddigwyddodd i malloc o'r blaen, cau'r geiriadur a dychwelyd ffug. 43 00:02:02,590 --> 00:02:06,830 Ond ac anwybyddu hynny, gan dybio ein bod llwyddo, yna rydym eisiau defnyddio fscanf 44 00:02:06,830 --> 00:02:12,400 i ddarllen un gair gan ein eiriadur yn ein nod. 45 00:02:12,400 --> 00:02:17,940 Felly cofiwch fod cofnod> gair yn y torgoch byffer gair o faint LENGHTH + 1 46 00:02:17,940 --> 00:02:20,300 ein bod yn mynd i storio'r gair i mewn 47 00:02:20,300 --> 00:02:25,070 >> Felly fscanf yn mynd i ddychwelyd 1, ar yr amod gan ei fod yn gallu llwyddo i 48 00:02:25,070 --> 00:02:26,750 ddarllen gair o'r ffeil. 49 00:02:26,750 --> 00:02:30,460 Os yw naill ai gwall yn digwydd, neu os byddwn yn cyrraedd diwedd y ffeil, mae'n 50 00:02:30,460 --> 00:02:31,950 Ni fydd yn dychwelyd 1. 51 00:02:31,950 --> 00:02:35,180 Ac yn yr achos nid yw'n dychwelyd 1, rydym yn olaf yn mynd i dorri allan o'r 52 00:02:35,180 --> 00:02:37,280 hwn dolen amser. 53 00:02:37,280 --> 00:02:42,770 Felly, rydym yn gweld bod unwaith y byddwn wedi llwyddo i darllen gair yn 54 00:02:42,770 --> 00:02:48,270 mynediad> gair, yna rydym yn mynd i'r geiriau gan ddefnyddio ein swyddogaeth hash. 55 00:02:48,270 --> 00:02:49,580 >> Gadewch i ni edrych ar y swyddogaeth hash. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Felly peidiwch 'n sylweddol angen i chi i ddeall hyn. 58 00:02:55,610 --> 00:02:59,460 Ac mewn gwirionedd rydym yn unig tynnu hash hwn gweithredu oddi ar y rhyngrwyd. 59 00:02:59,460 --> 00:03:04,010 Yr unig beth sydd angen i chi ei gydnabod yn bod hyn yn cymryd torgoch * gair Etholaeth. 60 00:03:04,010 --> 00:03:08,960 Felly, mae'n cymryd llinyn fel mewnbwn, a dychwelyd yn int heb eu harwyddo fel allbwn. 61 00:03:08,960 --> 00:03:12,360 Felly dyna i gyd swyddogaeth hash yw, a yw'n cymryd mewn mewnbwn ac yn rhoi i chi yn 62 00:03:12,360 --> 00:03:14,490 mynegai i mewn i'r hashtable. 63 00:03:14,490 --> 00:03:18,530 >> Sylwch ein bod yn moding gan NUM_BUCKETS, fel bod gwerth a ddychwelwyd 64 00:03:18,530 --> 00:03:21,730 mewn gwirionedd yn fynegai i'r hashtable ac nid yw'n mynegai y tu hwnt i'r 65 00:03:21,730 --> 00:03:24,320 ffiniau y rhesi. 66 00:03:24,320 --> 00:03:28,060 Felly, o ystyried swyddogaeth honno, rydym yn mynd i hash y gair yr ydym yn darllen y 67 00:03:28,060 --> 00:03:29,390 geiriadur. 68 00:03:29,390 --> 00:03:31,700 Ac yna rydym yn mynd i ddefnyddio y hash i mewnosoder y 69 00:03:31,700 --> 00:03:33,750 mynediad i mewn i'r hashtable. 70 00:03:33,750 --> 00:03:38,520 >> Hash Nawr hashtable yw'r cerrynt rhestr gysylltiedig yn y tabl. 71 00:03:38,520 --> 00:03:41,410 Ac mae'n bosib iawn mai dim ond NULL. 72 00:03:41,410 --> 00:03:44,960 Rydym am i fewnosod ein cofnod yn y dechrau y rhestr gysylltiedig. 73 00:03:44,960 --> 00:03:48,600 Ac felly rydym yn mynd i gael ein cyfredol pwynt mynediad i'r hyn y mae'r hashtable 74 00:03:48,600 --> 00:03:50,380 ar hyn o bryd yn cyfeirio at. 75 00:03:50,380 --> 00:03:53,310 Ac yna rydym yn mynd i storio, yn y hashtable yn y 76 00:03:53,310 --> 00:03:55,350 hash, y cofnod ar hyn o bryd. 77 00:03:55,350 --> 00:03:59,320 Felly mae'r rhain ddwy linell mewnosod yn llwyddiannus y cofnod ar ddechrau'r 78 00:03:59,320 --> 00:04:02,260 rhestr gysylltiedig ar y mynegai yn y hashtable. 79 00:04:02,260 --> 00:04:04,900 >> Unwaith y byddwn yn ei wneud â hynny, rydym yn gwybod ein bod yn dod o hyd i air arall yn y 80 00:04:04,900 --> 00:04:07,790 geiriadur, ac yr ydym yn cynyddiad eto. 81 00:04:07,790 --> 00:04:13,960 Felly rydym yn cadw gwneud hynny hyd nes y fscanf yn olaf dychwelyd rhywbeth nad ydynt yn-1 yn 82 00:04:13,960 --> 00:04:16,950 mae pwynt cofiwch fod mae angen i fynediad am ddim. 83 00:04:16,950 --> 00:04:19,459 Felly i fyny yma rydym yn malloced cofnod. 84 00:04:19,459 --> 00:04:21,329 Ac rydym yn ceisio darllen rhywbeth gan y geiriadur. 85 00:04:21,329 --> 00:04:23,910 Ac nid ydym yn darllen yn llwyddiannus rhywbeth o'r geiriadur, yn 86 00:04:23,910 --> 00:04:26,650 ac os felly mae angen i ni ryddhau'r cofnod nad ydym byth yn rhoi mewn gwirionedd yn y 87 00:04:26,650 --> 00:04:29,140 hashtable, ac yn olaf torri. 88 00:04:29,140 --> 00:04:32,750 >> Unwaith y byddwn yn torri allan mae angen i ni weld, yn dda, wnaethom ni dorri allan oherwydd nad 89 00:04:32,750 --> 00:04:34,360 Roedd gwall wrth ddarllen o'r ffeil? 90 00:04:34,360 --> 00:04:37,120 Neu wnaethon ni dorri allan oherwydd ein bod yn cyrraedd diwedd y ffeil? 91 00:04:37,120 --> 00:04:39,480 Os oedd camgymeriad, yna rydym yn awyddus i ddychwelyd ffug. 92 00:04:39,480 --> 00:04:40,930 Oherwydd nad llwyth lwyddodd. 93 00:04:40,930 --> 00:04:43,890 Ac yn y broses yr ydym am i ddadlwytho holl eiriau a ydym yn darllen yn, a 94 00:04:43,890 --> 00:04:45,670 cau'r ffeil geiriadur. 95 00:04:45,670 --> 00:04:48,740 >> Gan dybio y byddwn yn llwyddo, yna rydym yn unig dal i fod angen i gau'r geiriadur 96 00:04:48,740 --> 00:04:53,040 ffeilio, ac yn olaf yn dychwelyd yn wir ers i ni llwytho y geiriadur yn llwyddiannus. 97 00:04:53,040 --> 00:04:54,420 A dyna ni ar gyfer llwyth. 98 00:04:54,420 --> 00:04:59,020 Felly nawr gwirio, yn cael hashtable llwytho, yn mynd i edrych fel hyn. 99 00:04:59,020 --> 00:05:03,140 Felly siec, mae'n dychwelyd i bool, sy'n mynd i nodi a yw'r basio 100 00:05:03,140 --> 00:05:07,530 yn torgoch * gair, a oedd y pasio yn llinyn yn ein geiriadur. 101 00:05:07,530 --> 00:05:09,890 Felly, os yw yn y geiriadur, os yw yn ein hashtable, 102 00:05:09,890 --> 00:05:11,170 byddwn yn dychwelyd yn wir. 103 00:05:11,170 --> 00:05:13,380 Ac os nad yw'n, byddwn yn dychwelyd ffug. 104 00:05:13,380 --> 00:05:17,740 >> O ystyried hyn a basiwyd mewn gair, rydym yn mynd i hash y gair. 105 00:05:17,740 --> 00:05:22,110 Nawr yn beth pwysig i'w gydnabod yw bod yn llwyth rydym yn gwybod bod pob un o'r 106 00:05:22,110 --> 00:05:23,820 geiriau rydym yn mynd i fod yn llythrennau bach. 107 00:05:23,820 --> 00:05:25,820 Ond yma nid ydym yn mor siŵr. 108 00:05:25,820 --> 00:05:29,510 Os byddwn yn edrych ar ein swyddogaeth hash, ein swyddogaeth hash mewn gwirionedd 109 00:05:29,510 --> 00:05:32,700 yn casin is pob cymeriad y gair. 110 00:05:32,700 --> 00:05:37,940 Felly, beth bynnag y cyfalafu gair, ein swyddogaeth hash yw'r elw 111 00:05:37,940 --> 00:05:42,270 yr un mynegai ar gyfer beth bynnag fo'r cyfalafu yw, gan y byddai'n cael 112 00:05:42,270 --> 00:05:45,280 dychwelyd ar gyfer hollol llythrennau bach fersiwn o'r gair. 113 00:05:45,280 --> 00:05:46,600 Alright. 114 00:05:46,600 --> 00:05:49,790 Dyna ein mynegai cael i mewn i'r hashtable gyfer y gair hwn. 115 00:05:49,790 --> 00:05:52,940 >> Nawr mae hyn ar gyfer dolen yn mynd i ailadrodd dros y rhestr gysylltiedig 116 00:05:52,940 --> 00:05:55,000 a oedd ar y mynegai. 117 00:05:55,000 --> 00:05:59,610 Felly, yn sylwi ein bod yn ymgychwyn mynediad i dynnu sylw at y mynegai. 118 00:05:59,610 --> 00:06:02,750 Rydym yn mynd i barhau tra bod mynediad! = NULL. 119 00:06:02,750 --> 00:06:07,770 A chofiwch fod ddiweddaru'r pwyntydd yn ein rhestr mynediad cysylltiedig = cofnod> nesaf. 120 00:06:07,770 --> 00:06:14,400 Felly, rhaid ein man mynediad presennol i yr eitem nesaf yn y rhestr cysylltiedig. 121 00:06:14,400 --> 00:06:19,250 >> Felly, ar gyfer pob cofnod yn y rhestr gysylltiedig, rydym yn mynd i ddefnyddio strcasecmp. 122 00:06:19,250 --> 00:06:20,330 Dyw hi ddim yn strcomp. 123 00:06:20,330 --> 00:06:23,780 Oherwydd unwaith eto, rydym am wneud pethau achos ansensitif. 124 00:06:23,780 --> 00:06:27,870 Felly, rydym yn defnyddio strcasecmp i gymharu gair a basiwyd drwy'r 125 00:06:27,870 --> 00:06:31,860 swyddogaeth yn erbyn y gair sydd yn y cofnod hwn. 126 00:06:31,860 --> 00:06:35,570 Os bydd yn dychwelyd sero, mae hynny'n golygu nad oedd gêm, ac yn yr achos yr ydym am ei 127 00:06:35,570 --> 00:06:36,630 dychwelyd yn wir. 128 00:06:36,630 --> 00:06:39,590 Rydym yn dod o hyd yn llwyddiannus y gair yn ein hashtable. 129 00:06:39,590 --> 00:06:43,040 >> Os nad oedd yn cyfateb, yna rydym yn mynd i'r ddolen eto ac edrych ar y 130 00:06:43,040 --> 00:06:43,990 cofnod nesaf. 131 00:06:43,990 --> 00:06:47,640 A byddwn yn parhau dolennu er bod yn cofnodion yn y rhestr cysylltiedig. 132 00:06:47,640 --> 00:06:50,160 Beth fydd yn digwydd os byddwn yn torri allan o hyn ar gyfer dolen? 133 00:06:50,160 --> 00:06:55,110 Mae hynny'n golygu nad ydym yn dod o hyd i gofnod y cyfateb gair hwn, ac yn yr achos 134 00:06:55,110 --> 00:07:00,220 byddwn yn dychwelyd ffug i ddangos bod ein Nid hashtable oedd yn cynnwys y gair hwn. 135 00:07:00,220 --> 00:07:02,540 Ac mae hynny'n siec. 136 00:07:02,540 --> 00:07:04,790 >> Felly, gadewch i ni edrych ar faint. 137 00:07:04,790 --> 00:07:06,970 Nawr maint yn mynd i fod yn eithaf syml. 138 00:07:06,970 --> 00:07:11,080 Ers cofio yn llwyth, i bob gair rydym yn dod o hyd, rydym yn gynyddrannedig yn fyd-eang 139 00:07:11,080 --> 00:07:12,880 maint hashtable amrywiol. 140 00:07:12,880 --> 00:07:16,480 Felly, y swyddogaeth maint yn unig yw mynd i ddychwelyd amrywiol byd-eang. 141 00:07:16,480 --> 00:07:18,150 A dyna ni. 142 00:07:18,150 --> 00:07:22,300 >> Nawr yn olaf, mae angen i ddadlwytho'r geiriadur unwaith popeth ei wneud. 143 00:07:22,300 --> 00:07:25,340 Felly, sut ydym yn mynd i wneud hynny? 144 00:07:25,340 --> 00:07:30,440 I'r dde yma rydym yn dolennu dros pob bwcedi o ein bwrdd. 145 00:07:30,440 --> 00:07:33,240 Felly mae bwcedi NUM_BUCKETS. 146 00:07:33,240 --> 00:07:37,410 Ac ar gyfer pob rhestr gysylltiedig yn ein hashtable, rydyn ni'n mynd i ddolen dros 147 00:07:37,410 --> 00:07:41,070 y cyfan y rhestr cysylltiedig, rhyddhau pob elfen. 148 00:07:41,070 --> 00:07:42,900 >> Nawr mae angen i ni fod yn ofalus. 149 00:07:42,900 --> 00:07:47,910 Felly dyma gennym newidyn dros dro sy'n cael ei storio y pwyntydd i'r nesaf 150 00:07:47,910 --> 00:07:49,730 elfen yn y rhestr cysylltiedig. 151 00:07:49,730 --> 00:07:52,140 Ac yna rydym yn mynd i rhad ac am ddim yr elfen gyfredol. 152 00:07:52,140 --> 00:07:55,990 Mae angen i ni fod yn sicr rydym yn gwneud hyn ers i ni Ni all dim ond rhad ac am ddim yr elfen gyfredol 153 00:07:55,990 --> 00:07:59,180 ac yna ceisiwch i gael mynediad i'r pwyntydd nesaf, ers unwaith rydym wedi rhyddhau ei, 154 00:07:59,180 --> 00:08:00,870 y cof yn dod yn annilys. 155 00:08:00,870 --> 00:08:04,990 >> Felly mae angen i gadw o gwmpas pwyntydd i i'r elfen nesaf, yna gallwn ryddhau'r 156 00:08:04,990 --> 00:08:08,360 elfen ar hyn o bryd, ac yna gallwn ddiweddaru ein bodd yn bresennol i dynnu sylw at 157 00:08:08,360 --> 00:08:09,550 i'r elfen nesaf. 158 00:08:09,550 --> 00:08:12,800 Rydym yn bydd dolen er bod elfennau yn y rhestr gysylltiedig. 159 00:08:12,800 --> 00:08:15,620 Byddwn yn gwneud hynny ar gyfer pob cysylltiedig rhestrau yn yr hashtable. 160 00:08:15,620 --> 00:08:19,460 Ac unwaith y byddwn yn ei wneud â hynny, rydym wedi dadlwytho y hashtable yn gyfan gwbl, a 161 00:08:19,460 --> 00:08:20,190 rydym yn ei wneud. 162 00:08:20,190 --> 00:08:23,200 Felly, mae'n amhosibl i dadlwytho i byth yn dychwelyd ffug. 163 00:08:23,200 --> 00:08:26,470 A phan rydym yn ei wneud, rydym yn dim ond dychwelyd yn wir. 164 00:08:26,470 --> 00:08:29,000 >> Gadewch i ni roi cynnig ateb hwn. 165 00:08:29,000 --> 00:08:33,070 Felly, gadewch i ni edrych ar yr hyn y mae ein Bydd nod strwythur yn edrych fel. 166 00:08:33,070 --> 00:08:36,220 Yma rydym yn gweld ein bod yn mynd i gael bool gair a nod strwythur * plant 167 00:08:36,220 --> 00:08:37,470 ALPHABET braced. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Felly, y peth cyntaf efallai y byddwch yn meddwl, pam fod ALPHABET 170 00:08:42,020 --> 00:08:44,660 ed a ddiffinnir fel 27? 171 00:08:44,660 --> 00:08:47,900 Wel, cofiwch ein bod yn mynd i angen i gael ei drin y collnod. 172 00:08:47,900 --> 00:08:51,910 Felly, mae hynny'n mynd i fod yn dipyn o achos arbennig drwy gydol y rhaglen hon. 173 00:08:51,910 --> 00:08:54,710 >> Nawr cofio sut mae trie yn gweithio mewn gwirionedd. 174 00:08:54,710 --> 00:08:59,380 Gadewch i ni ddweud ein bod yn mynegeio y gair "Cathod." Yna o wraidd trie, 175 00:08:59,380 --> 00:09:02,610 rydym yn mynd i edrych ar y plant amrywiaeth, ac rydym yn mynd i edrych ar y 176 00:09:02,610 --> 00:09:08,090 mynegai sy'n cyfateb i'r llythyr C. Felly a fydd yn cael ei fynegeio 2. 177 00:09:08,090 --> 00:09:11,530 Felly o ystyried, bydd hynny rhoi nod newydd. 178 00:09:11,530 --> 00:09:13,820 Ac yna byddwn yn gweithio o'r nod. 179 00:09:13,820 --> 00:09:17,770 >> Felly, o ystyried bod nod, rydym yn unwaith eto mynd i edrych ar yr amrywiaeth plant. 180 00:09:17,770 --> 00:09:22,110 Ac rydym yn mynd i edrych ar y mynegai sero i gyfateb i'r A mewn cath. 181 00:09:22,110 --> 00:09:27,170 Felly, yna rydym yn mynd i fynd i'r nod, ac o gofio bod nod rydym yn mynd 182 00:09:27,170 --> 00:09:31,090 i edrych ar y diwedd ei fod yn cyfateb i T. Ac yn symud ymlaen i'r nod, 183 00:09:31,090 --> 00:09:35,530 yn olaf, rydym wedi edrych yn gyfan gwbl drwy ein gair "cath." Ac yn awr bool 184 00:09:35,530 --> 00:09:40,960 gair i fod i nodi a y gair a roddir mewn gwirionedd gair. 185 00:09:40,960 --> 00:09:43,470 >> Felly, pam mae angen yr achos arbennig? 186 00:09:43,470 --> 00:09:47,700 Wel beth am y gair "trychineb" yn ein geiriadur, ond mae'r 187 00:09:47,700 --> 00:09:50,150 Nid yw gair "cath" yw? 188 00:09:50,150 --> 00:09:54,580 Felly, ac yn edrych i weld a yw'r gair "cath" yn yn ein geiriadur, rydym yn 189 00:09:54,580 --> 00:09:59,970 mynd i edrych llwyddiannus drwy mynegeion C-A-T yn rhanbarth nod. 190 00:09:59,970 --> 00:10:04,290 Ond mae hynny'n unig oherwydd trychineb ddigwyddodd i greu nodau ar y ffordd 191 00:10:04,290 --> 00:10:07,190 o C-A-T, yr holl ffordd i ddiwedd y gair. 192 00:10:07,190 --> 00:10:12,020 Felly bool gair yn cael ei ddefnyddio i nodi a y lleoliad penodol hwn 193 00:10:12,020 --> 00:10:14,310 mewn gwirionedd yn dangos gair. 194 00:10:14,310 --> 00:10:15,140 >> Mae pob hawl. 195 00:10:15,140 --> 00:10:19,310 Felly nawr ein bod yn gwybod beth mae'n ei trie yn mynd i edrych fel, gadewch i ni edrych ar y 196 00:10:19,310 --> 00:10:20,730 llwytho swyddogaeth. 197 00:10:20,730 --> 00:10:24,610 Felly, llwyth yn mynd i ddychwelyd bool am a ydym yn llwyddiannus neu 198 00:10:24,610 --> 00:10:26,720 aflwyddiannus llwytho y geiriadur. 199 00:10:26,720 --> 00:10:30,460 Ac mae hyn yn mynd i fod y geiriadur yr ydym am i lwytho. 200 00:10:30,460 --> 00:10:33,930 >> Beth felly yn gyntaf rydym yn ei wneud yw agor i fyny y geiriadur hwnnw ar gyfer darllen. 201 00:10:33,930 --> 00:10:36,160 Ac mae'n rhaid i wneud yn siŵr doedden ni ddim yn methu. 202 00:10:36,160 --> 00:10:39,580 Felly, os nad y geiriadur oedd agor yn llwyddiannus, bydd yn dychwelyd 203 00:10:39,580 --> 00:10:42,400 null, ac os felly rydym yn mynd i ddychwelyd ffug. 204 00:10:42,400 --> 00:10:47,230 Ond gan dybio ei fod yn llwyddo i agor, yna gallwn mewn gwirionedd yn darllen 205 00:10:47,230 --> 00:10:48,220 trwy y geiriadur. 206 00:10:48,220 --> 00:10:50,880 >> Beth felly yn gyntaf rydym yn mynd i eisiau ei wneud yw gennym y 207 00:10:50,880 --> 00:10:52,500 gwraidd amrywiol byd-eang. 208 00:10:52,500 --> 00:10:56,190 Nawr gwraidd yn mynd i fod yn nod *. 209 00:10:56,190 --> 00:10:59,760 Mae'n frig ein trie ein bod ni'n mynd i gael ei bwysleisio'r drwy. 210 00:10:59,760 --> 00:11:02,660 Felly, y peth cyntaf yr ydym yn mynd i am ei wneud yw dyrannu 211 00:11:02,660 --> 00:11:04,140 cof am ein gwreiddiau. 212 00:11:04,140 --> 00:11:07,980 Sylwch ein bod yn defnyddio'r calloc swyddogaeth, sydd yn y bôn yr un fath 213 00:11:07,980 --> 00:11:11,500 gan fod y swyddogaeth malloc, ac eithrio ei fod yn sicr o ddychwelyd rhywbeth sy'n 214 00:11:11,500 --> 00:11:13,180 zeroed allan yn gyfan gwbl. 215 00:11:13,180 --> 00:11:17,290 Felly, os ydym yn defnyddio malloc, byddai angen i ni mynd drwy bob un o'r awgrymiadau yn ein 216 00:11:17,290 --> 00:11:20,160 nod, a sicrhau bod maen nhw i gyd null. 217 00:11:20,160 --> 00:11:22,710 Felly, bydd calloc wneud hynny i ni. 218 00:11:22,710 --> 00:11:26,330 >> Nawr yn union fel malloc, mae angen i ni wneud yn siŵr bod y dyraniad oedd mewn gwirionedd yn 219 00:11:26,330 --> 00:11:27,520 llwyddiannus. 220 00:11:27,520 --> 00:11:29,990 Os bydd hyn yn dychwelyd null, yna rydym yn Mae angen i gau neu geiriadur 221 00:11:29,990 --> 00:11:32,100 ffeilio a dychwelyd ffug. 222 00:11:32,100 --> 00:11:36,835 Felly, gan dybio dyraniad a oedd yn llwyddiannus, rydym yn mynd i ddefnyddio nod * 223 00:11:36,835 --> 00:11:40,270 cyrchwr i ailadrodd drwy ein trie. 224 00:11:40,270 --> 00:11:43,890 Felly mae ein gwreiddiau byth yn mynd i newid, ond rydym yn mynd i ddefnyddio cyrchwr i 225 00:11:43,890 --> 00:11:47,875 mewn gwirionedd yn mynd o nod i nod. 226 00:11:47,875 --> 00:11:50,940 >> Felly, yn hyn ar gyfer dolen rydym yn ei ddarllen trwy'r ffeil geiriadur. 227 00:11:50,940 --> 00:11:53,670 Ac rydym yn defnyddio fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc yn mynd i fachu un cymeriad o'r ffeil. 229 00:11:56,290 --> 00:11:59,370 Rydym yn mynd i barhau grabbing cymeriadau er nad ydym yn cyrraedd y 230 00:11:59,370 --> 00:12:01,570 ddiwedd y ffeil. 231 00:12:01,570 --> 00:12:03,480 >> Mae dau achos mae angen i ni drin. 232 00:12:03,480 --> 00:12:06,610 Y cyntaf, os yw'r cymeriad Nid oedd llinell newydd. 233 00:12:06,610 --> 00:12:10,450 Felly rydym yn gwybod os oedd yn llinell newydd, yna rydym chi ar fin i symud ymlaen i gair newydd. 234 00:12:10,450 --> 00:12:15,240 Ond gan dybio nad oedd yn llinell newydd, yna yma rydym am i chyfrif i maes y 235 00:12:15,240 --> 00:12:18,380 mynegai rydyn ni'n mynd i mynegai i yn yr arae plant 236 00:12:18,380 --> 00:12:19,810 buom yn edrych ar blaen. 237 00:12:19,810 --> 00:12:23,880 >> Felly, fel y dywedais o'r blaen, mae angen i ni achos arbennig y collnod. 238 00:12:23,880 --> 00:12:26,220 Sylwi ein bod yn defnyddio'r deiran gweithredwr yma. 239 00:12:26,220 --> 00:12:29,580 Felly, rydym yn mynd i ddarllen hwn oherwydd, os cymeriad ydym yn darllen yn yn 240 00:12:29,580 --> 00:12:35,330 collnod, yna rydym yn mynd i osod mynegai = "ALPHABET" -1, a fydd yn 241 00:12:35,330 --> 00:12:37,680 fydd y mynegai 26. 242 00:12:37,680 --> 00:12:41,130 >> Else, os nad oedd yn collnod, mae rydym yn mynd i osod y mynegai 243 00:12:41,130 --> 00:12:43,760 cyfartal i c - a. 244 00:12:43,760 --> 00:12:49,030 Felly cofiwch ôl o p-setiau o'r blaen, c - mae yn mynd i roi i ni y 245 00:12:49,030 --> 00:12:53,410 sefyllfa yn nhrefn yr wyddor o C. Felly, os C yw'r llythyren A, bydd hyn yn 246 00:12:53,410 --> 00:12:54,700 rhoi mynegai sero ni. 247 00:12:54,700 --> 00:12:58,120 Am y llythyr B, bydd yn rhoi i ni y mynegai 1, ac yn y blaen. 248 00:12:58,120 --> 00:13:03,010 >> Felly, mae hyn yn rhoi mynegai yn y ni plant amrywiaeth yr ydym am. 249 00:13:03,010 --> 00:13:08,890 Nawr, os mynegai hwn yn null hyn o bryd yn y plant, mae hynny'n golygu bod nod 250 00:13:08,890 --> 00:13:11,830 yn bodoli ar hyn o bryd o'r llwybr. 251 00:13:11,830 --> 00:13:15,160 Felly mae angen i ddyrannu yn nod ar gyfer y llwybr hwnnw. 252 00:13:15,160 --> 00:13:16,550 Dyna beth y byddwn yn ei wneud yma. 253 00:13:16,550 --> 00:13:20,690 >> Felly, rydym yn mynd eto i ddefnyddio'r calloc swyddogaeth, fel nad oes rhaid i ni 254 00:13:20,690 --> 00:13:22,880 sero allan yr holl awgrymiadau. 255 00:13:22,880 --> 00:13:27,240 Ac unwaith eto mae angen i ni wirio nad yw calloc oedd yn methu. 256 00:13:27,240 --> 00:13:30,700 Os calloc oedd yn methu, yna mae angen i ddadlwytho popeth, cau ein 257 00:13:30,700 --> 00:13:32,820 geiriadur, a dychwelyd ffug. 258 00:13:32,820 --> 00:13:40,050 Felly gan dybio nad oedd yn methu, yna Bydd hyn yn creu plentyn newydd i ni. 259 00:13:40,050 --> 00:13:41,930 Ac yna byddwn yn mynd i'r plentyn hwnnw. 260 00:13:41,930 --> 00:13:44,960 Bydd ein cyrchwr ailadrodd i lawr i'r plentyn hwnnw. 261 00:13:44,960 --> 00:13:49,330 >> Nawr, os nad oedd hyn yn null i ddechrau, yna gall y cyrchwr yn unig ailadrodd 262 00:13:49,330 --> 00:13:52,590 i lawr i'r plentyn hwnnw heb holi i gorfod i ddyrannu unrhyw beth. 263 00:13:52,590 --> 00:13:56,730 Mae hyn yn wir lle'r ydym digwydd gyntaf dyrannu y gair "cath." A 264 00:13:56,730 --> 00:14:00,330 mae hynny'n golygu pan fyddwn yn mynd i ddyrannu "Trychineb," Nid oes angen i ni greu 265 00:14:00,330 --> 00:14:01,680 nodau ar gyfer C-A-T eto. 266 00:14:01,680 --> 00:14:04,830 Maent eisoes yn bodoli. 267 00:14:04,830 --> 00:14:06,080 >> Beth mae hyn yn arall? 268 00:14:06,080 --> 00:14:10,480 Mae hyn yn y cyflwr lle c yn slaes n, lle mae c yn llinell newydd. 269 00:14:10,480 --> 00:14:13,710 Mae hyn yn golygu ein bod wedi llwyddo i cwblhau gair. 270 00:14:13,710 --> 00:14:16,860 Nawr beth ydym ni eisiau ei wneud pan fyddwn yn cwblhau gair yn llwyddiannus? 271 00:14:16,860 --> 00:14:21,100 Rydym yn mynd i ddefnyddio y maes hwn gair tu mewn ein nod strwythur. 272 00:14:21,100 --> 00:14:23,390 Rydym yn awyddus i sefydlu hynny yn wir. 273 00:14:23,390 --> 00:14:27,150 Felly mae hynny'n dangos bod nod hwn yn dangos llwyddiannus 274 00:14:27,150 --> 00:14:29,250 geiriau, air go iawn. 275 00:14:29,250 --> 00:14:30,940 >> Nawr sefydlu hynny yn wir. 276 00:14:30,940 --> 00:14:35,150 Rydym am i ailosod ein cyrchwr i bwynt i ddechrau'r trie eto. 277 00:14:35,150 --> 00:14:40,160 Ac yn olaf, cynyddiad ein geiriadur maint, ers i ni o hyd i waith arall. 278 00:14:40,160 --> 00:14:43,230 Felly, rydym yn mynd i barhau i wneud hynny, darllen o ran cymeriad gan gymeriad, 279 00:14:43,230 --> 00:14:49,150 adeiladu nodau newydd yn ein trie a ar gyfer pob gair yn y geiriadur, hyd nes y 280 00:14:49,150 --> 00:14:54,020 rydym o'r diwedd yn cyrraedd C! = EOF, lle ofn y byddwn dorri allan y ffeil. 281 00:14:54,020 --> 00:14:57,050 >> Erbyn hyn mae dau achos o dan y gallem fod wedi taro EOF. 282 00:14:57,050 --> 00:15:00,980 Y cyntaf yw os bu camgymeriad darllen o'r ffeil. 283 00:15:00,980 --> 00:15:03,470 Felly, os oedd camgymeriad, rydym yn hangen i wneud y nodweddiadol. 284 00:15:03,470 --> 00:15:06,460 Dadlwytho popeth, yn agos y ffeil, yn dychwelyd ffug. 285 00:15:06,460 --> 00:15:09,810 Gan dybio nad oedd camgymeriad, bod yn unig yn golygu ein bod mewn gwirionedd yn cyrraedd y diwedd 286 00:15:09,810 --> 00:15:13,750 y ffeil, ac os felly, yr ydym yn cau'r ffeilio a dychwelyd yn wir ers i ni 287 00:15:13,750 --> 00:15:17,330 geiriadur llwytho yn llwyddiannus yn ein trie. 288 00:15:17,330 --> 00:15:20,170 >> Felly nawr gadewch i ni edrych ar siec. 289 00:15:20,170 --> 00:15:25,156 O edrych ar y swyddogaeth siec, rydym yn gweld y siec yn mynd i ddychwelyd bool. 290 00:15:25,156 --> 00:15:29,680 Mae'n dychwelyd wir os gair hwn ei fod yn yn cael eu trosglwyddo yn ein trie. 291 00:15:29,680 --> 00:15:32,110 Mae'n dychwelyd ffug fel arall. 292 00:15:32,110 --> 00:15:36,050 Felly, sut ydych chi'n penderfynu a gair hwn yn ein trie? 293 00:15:36,050 --> 00:15:40,190 >> Rydym yn gweld yma fod, yn union fel o'r blaen, rydym yn mynd i ddefnyddio cyrchwr i ailadrodd 294 00:15:40,190 --> 00:15:41,970 drwy ein trie. 295 00:15:41,970 --> 00:15:46,600 Nawr dyma ni yn mynd i ailadrodd dros ein gair cyfan. 296 00:15:46,600 --> 00:15:50,620 Felly bwysleisio'r dros y gair yr ydym yn y gorffennol, rydyn ni'n mynd i benderfynu ar y 297 00:15:50,620 --> 00:15:56,400 mynegai i'r amrywiaeth blant sy'n yn cyfateb i air I. braced Felly, mae hyn 298 00:15:56,400 --> 00:15:59,670 yn mynd i edrych yn union fel llwyth, lle os air [i] 299 00:15:59,670 --> 00:16:03,310 yn collnod, yna rydym am i ddefnyddio mynegai "ALPHABET" - 1. 300 00:16:03,310 --> 00:16:05,350 Oherwydd ein bod yn benderfynol bod lle rydym yn mynd i storio 301 00:16:05,350 --> 00:16:07,100 collnodau. 302 00:16:07,100 --> 00:16:11,780 >> Arall rydym yn mynd i ddefnyddio dau air is braced I. Felly cofiwch y gair hwnnw yn gallu 303 00:16:11,780 --> 00:16:13,920 cael cyfalafu mympwyol. 304 00:16:13,920 --> 00:16:17,540 Ac felly rydym yn awyddus i wneud yn siŵr ein bod ni'n gan ddefnyddio fersiwn lythrennau bach o bethau. 305 00:16:17,540 --> 00:16:21,920 Ac yna tynnu o hynny 'a' i unwaith unwaith eto yn rhoi i ni yn nhrefn yr wyddor 306 00:16:21,920 --> 00:16:23,880 sefyllfa cymeriad hwnnw. 307 00:16:23,880 --> 00:16:27,680 Felly, mae hynny'n mynd i fod yn ein mynegai i mewn i'r amrywiaeth plant. 308 00:16:27,680 --> 00:16:32,420 >> Ac yn awr os yw'r mynegai i'r plant amrywiaeth yn null, sy'n golygu ein bod 309 00:16:32,420 --> 00:16:34,990 yn gallu parhau bwysleisio'r mwyach i lawr ein trie. 310 00:16:34,990 --> 00:16:38,870 Os yw hynny'n wir, ni all y gair hwn o bosibl fod yn ein trie. 311 00:16:38,870 --> 00:16:42,340 Oherwydd os petai, byddai hynny'n yn golygu y byddai llwybr 312 00:16:42,340 --> 00:16:43,510 i lawr at y gair hwnnw. 313 00:16:43,510 --> 00:16:45,290 Ac ni fyddech byth yn dod ar draws null. 314 00:16:45,290 --> 00:16:47,850 Felly dod ar draws null, byddwn yn dychwelyd ffug. 315 00:16:47,850 --> 00:16:49,840 Nid yw'r gair yn y geiriadur. 316 00:16:49,840 --> 00:16:53,660 Os nad yw'n yn null, yna rydym yn mynd i barhau bwysleisio'r. 317 00:16:53,660 --> 00:16:57,220 >> Felly, rydym yn mynd allan yno cyrchwr i dynnu sylw at y manylyn hwnnw 318 00:16:57,220 --> 00:16:59,760 nod ar y mynegai. 319 00:16:59,760 --> 00:17:03,150 Rydym yn cadw gwneud hynny drwy gydol y gair cyfan, gan dybio 320 00:17:03,150 --> 00:17:03,950 yr ydym byth yn taro null. 321 00:17:03,950 --> 00:17:07,220 Mae hynny'n golygu ein bod wedi gallu i gael drwy y gair cyfan a dod o hyd 322 00:17:07,220 --> 00:17:08,920 yn nod yn ein cais. 323 00:17:08,920 --> 00:17:10,770 Ond nid ydym yn hollol wneud eto. 324 00:17:10,770 --> 00:17:12,290 >> Nid ydym am i ddim ond dychwelyd yn wir. 325 00:17:12,290 --> 00:17:14,770 Rydym yn awyddus i ddychwelyd cyrchwr> gair. 326 00:17:14,770 --> 00:17:18,980 Ers cofio eto, yw "cath" Nid yw yn ein geiriadur, a "trychineb" 327 00:17:18,980 --> 00:17:22,935 yw, yna byddwn yn llwyddiannus byddwn yn cael trwy'r gair "cath." Ond cyrchwr 328 00:17:22,935 --> 00:17:25,760 Bydd geiriau yn ffug ac ddim yn wir. 329 00:17:25,760 --> 00:17:30,930 Felly, byddwn yn dychwelyd gair cyrchwr i nodi boed nod hwn mewn gwirionedd yn air. 330 00:17:30,930 --> 00:17:32,470 A dyna ni am siec. 331 00:17:32,470 --> 00:17:34,250 >> Felly, gadewch i ni edrych ar maint. 332 00:17:34,250 --> 00:17:37,350 Felly, maint yn mynd i fod yn eithaf hawdd ers hynny, cofio yn llwyth, rydym yn 333 00:17:37,350 --> 00:17:41,430 incrementing maint y geiriadur ar gyfer pob gair yr ydym yn dod ar eu traws. 334 00:17:41,430 --> 00:17:45,350 Felly, maint yn unig yn mynd i dychwelyd maint geiriadur. 335 00:17:45,350 --> 00:17:47,390 A dyna ni. 336 00:17:47,390 --> 00:17:50,590 >> Felly, yn olaf, rydym wedi dadlwytho. 337 00:17:50,590 --> 00:17:55,100 Felly dadlwytho, rydym yn mynd i ddefnyddio swyddogaeth ailadroddus i wneud mewn gwirionedd yn yr holl 338 00:17:55,100 --> 00:17:56,530 o'r gwaith i ni. 339 00:17:56,530 --> 00:17:59,340 Felly mae ein swyddogaeth yn mynd i cael eu galw ar unloader. 340 00:17:59,340 --> 00:18:01,650 Beth yw unloader mynd i'w wneud? 341 00:18:01,650 --> 00:18:06,580 Rydym yn gweld yma fod unloader yn mynd i ailadrodd dros bob un o'r plant yn 342 00:18:06,580 --> 00:18:08,410 hwn nod penodol. 343 00:18:08,410 --> 00:18:11,750 Ac os nad yw'r nod plentyn yn null, yna rydym yn mynd i 344 00:18:11,750 --> 00:18:13,730 dadlwytho'r nôd plentyn. 345 00:18:13,730 --> 00:18:18,010 >> Felly, mae hyn yw eich recursively ddadlwytho bob un o'n plant. 346 00:18:18,010 --> 00:18:21,080 Unwaith y byddwn yn sicr bod pob un o'n plant wedi cael eu dadlwytho, yna rydym yn 347 00:18:21,080 --> 00:18:25,210 Gall rhad ac am ddim ni ein hunain, felly dadlwytho ein hunain. 348 00:18:25,210 --> 00:18:29,460 Bydd hyn yn gweithio'n recursively dadlwytho'r trie cyfan. 349 00:18:29,460 --> 00:18:32,850 Ac yna unwaith sy'n cael ei wneud, allwn ei ddychwelyd yn wir. 350 00:18:32,850 --> 00:18:34,210 Ni all dadlwytho yn methu. 351 00:18:34,210 --> 00:18:35,710 Rydym yn unig rhyddhau pethau. 352 00:18:35,710 --> 00:18:38,870 Felly, ar ôl i ni yn ei wneud rhyddhau popeth, yn dychwelyd yn wir. 353 00:18:38,870 --> 00:18:40,320 A dyna ni. 354 00:18:40,320 --> 00:18:41,080 Fy enw i yw Rob. 355 00:18:41,080 --> 00:18:42,426 Ac roedd hyn yn sillafu. 356 00:18:42,426 --> 00:18:47,830 >> [CHWARAE CERDDORIAETH]