1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [CHWARAE CERDDORIAETH] 3 00:00:11,137 --> 00:00:12,220 DAVID J. Malan: pob hawl. 4 00:00:12,220 --> 00:00:13,950 Mae hyn yn CS50. 5 00:00:13,950 --> 00:00:18,560 Mae hon yn wythnos pum parhad, ac yr ydym yn gael rhywfaint o newyddion da a newyddion drwg. 6 00:00:18,560 --> 00:00:21,140 Felly, newyddion da yw bod CS50 lansio ddydd Gwener. 7 00:00:21,140 --> 00:00:24,430 Os hoffech chi ymuno â ni, mentro i'r URL arferol yma. 8 00:00:24,430 --> 00:00:28,670 Hyd yn oed yn well newyddion, dim darlith hyn yn dod Dydd Llun y 13eg. 9 00:00:28,670 --> 00:00:31,970 Ychydig yn llai yn well newyddion, cwis sero yw dydd Mercher nesaf. 10 00:00:31,970 --> 00:00:33,840 Mae rhagor o fanylion yn gael yn URL hwn yma. 11 00:00:33,840 --> 00:00:36,340 A thros y dyddiau ddwy nesaf byddwn yn llenwi'r bylchau 12 00:00:36,340 --> 00:00:39,234 o ran yr ystafelloedd y byddwn wedi neilltuo. 13 00:00:39,234 --> 00:00:41,400 Gwell newyddion yw bod chi helpu fod yn adolygu cyrsiau ar draws y 14 00:00:41,400 --> 00:00:43,570 sesiwn hon yn dod Dydd Llun yn y nos. 15 00:00:43,570 --> 00:00:46,270 Aros diwnio ar y cwrs yn gwefan y lleoliad a manylion. 16 00:00:46,270 --> 00:00:49,290 Adrannau, hyd yn oed er ei fod yn gwyliau, bydd hefyd yn cyfarfod hefyd. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 Newyddion gorau, darlith Dydd Gwener nesaf. 19 00:00:52,940 --> 00:00:56,220 Felly mae hwn yn draddodiad yr ydym gennych, yn unol â'r maes llafur. 20 00:00:56,220 --> 00:00:58,100 Just-- mae'n mynd i fod yn anhygoel. 21 00:00:58,100 --> 00:01:02,510 Byddwch yn gweld pethau fel strwythurau data amser cyson 22 00:01:02,510 --> 00:01:04,730 a thablau hash a choed a geisiau. 23 00:01:04,730 --> 00:01:07,150 A byddwn yn siarad am broblemau pen-blwydd. 24 00:01:07,150 --> 00:01:09,440 Mae criw cyfan o bethau aros Dydd Gwener nesaf. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 OK. 27 00:01:12,200 --> 00:01:13,190 Anyhow. 28 00:01:13,190 --> 00:01:17,080 >> Felly, yn cofio ein bod ni wedi ganolbwyntio ar y llun yma o'r hyn sydd 29 00:01:17,080 --> 00:01:18,980 tu mewn cof ein cyfrifiadur. 30 00:01:18,980 --> 00:01:22,875 Felly cof neu RAM yw lle mae rhaglenni bodoli tra eich bod yn eu rhedeg. 31 00:01:22,875 --> 00:01:25,215 Os ydych yn dwbl-gliciwch i icon i redeg rhyw raglen 32 00:01:25,215 --> 00:01:27,520 neu ddwbl-glicio i icon i agor rhai ffeil, 33 00:01:27,520 --> 00:01:30,430 caiff ei lwytho oddi wrth eich caled gyrru neu yrru cyflwr solet 34 00:01:30,430 --> 00:01:34,190 i mewn i RAM, Random Access Memory, lle mae'n byw nes bod y pŵer yn mynd i ffwrdd, 35 00:01:34,190 --> 00:01:36,700 y clawr y gliniadur yn cau, neu os ydych yn gadael y rhaglen. 36 00:01:36,700 --> 00:01:38,960 >> Nawr bod cof, o sydd mae'n debyg bod gennych 37 00:01:38,960 --> 00:01:41,950 1 gigabeit y dyddiau hyn, 2 gigabyte, neu hyd yn oed yn llawer mwy, 38 00:01:41,950 --> 00:01:44,420 yn gyffredinol osod allan ar gyfer rhaglen a roddir 39 00:01:44,420 --> 00:01:47,170 yn y math hwn o hirsgwar model cysyniadol 40 00:01:47,170 --> 00:01:50,860 lle mae gennym y pentwr ar y gwaelod a bagad o bethau eraill ar y brig. 41 00:01:50,860 --> 00:01:53,140 Y peth ar y brig rydym wedi gweld ar y llun 42 00:01:53,140 --> 00:01:55,670 siarad o'r blaen ond byth am yn y segment testun fel y'u gelwir. 43 00:01:55,670 --> 00:01:58,419 Segment Testun yn unig yw ffordd ffansi o ddweud y sero a rhai sy'n 44 00:01:58,419 --> 00:02:01,150 cyfansoddi eich rhaglen a luniwyd gwirioneddol. 45 00:02:01,150 --> 00:02:03,910 >> Felly pan fyddwch yn dwbl-glicio Microsoft Word ar eich Mac neu PC, 46 00:02:03,910 --> 00:02:08,030 neu pan fyddwch yn rhedeg dot slaes Mario ar Cyfrifiadur Linux yn eich ffenestr terfynell, 47 00:02:08,030 --> 00:02:12,460 y seroau a rhai sy'n cyfansoddi Gair neu Mario yn cael eu storio dros dro 48 00:02:12,460 --> 00:02:16,610 yn RAM eich cyfrifiadur yn yr hyn a elwir yn segment testun ar gyfer rhaglen benodol. 49 00:02:16,610 --> 00:02:19,080 Isod sy'n mynd ymgychwyn a data uninitialized. 50 00:02:19,080 --> 00:02:22,655 Mae hyn yn pethau fel newidynnau byd-eang, nad ydym wedi defnyddio llawer o, 51 00:02:22,655 --> 00:02:24,910 ond ar adegau rydym wedi Roedd gan newidynnau byd-eang 52 00:02:24,910 --> 00:02:28,819 neu llinynnau a ddiffinnir statically sy'n ei godio geiriau fel "helo" anodd 53 00:02:28,819 --> 00:02:31,860 nad ydynt yn cael eu cymryd i mewn gan y defnyddiwr sy'n cael eu hard-coded i mewn i'ch rhaglen. 54 00:02:31,860 --> 00:02:34,230 >> Yn awr, i lawr ar y gwaelod i ni yn cael y pentwr fel y'u gelwir. 55 00:02:34,230 --> 00:02:37,665 Ac yn y pentwr, hyd yma, rydym wedi bod defnyddio ar gyfer pa fathau o ddibenion? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 Beth sydd y pentwr ei ddefnyddio ar gyfer? 58 00:02:40,997 --> 00:02:41,160 Yeah? 59 00:02:41,160 --> 00:02:42,070 >> CYNULLEIDFA: Swyddogaethau. 60 00:02:42,070 --> 00:02:43,320 >> DAVID J. Malan: Ar gyfer swyddogaethau? 61 00:02:43,320 --> 00:02:44,980 Ym mha ystyr gyfer swyddogaethau? 62 00:02:44,980 --> 00:02:48,660 >> CYNULLEIDFA: Pan fyddwch yn ffonio swyddogaeth, mae'r dadleuon yn cael eu copïo ar y pentwr. 63 00:02:48,660 --> 00:02:49,660 >> DAVID J. Malan: Yn union. 64 00:02:49,660 --> 00:02:52,650 Pan fyddwch yn ffonio swyddogaeth, ei dadleuon yn cael eu copïo ar y pentwr. 65 00:02:52,650 --> 00:02:56,330 Felly unrhyw X neu Y. neu A neu B eich bod yn pasio i mewn i swyddogaeth 66 00:02:56,330 --> 00:02:58,680 yn cael eu rhoi dros dro ar y pentwr fel y'u gelwir, 67 00:02:58,680 --> 00:03:02,000 yn union fel un o'r Annenberg hambyrddau neuadd fwyta, a hefyd pethau 68 00:03:02,000 --> 00:03:03,190 fel newidynnau lleol. 69 00:03:03,190 --> 00:03:06,290 Os yw eich swyddogaeth foo neu'ch gyfnewid swyddogaeth wedi newidynnau lleol, 70 00:03:06,290 --> 00:03:08,602 fel tymheredd, dau rhai yn y pen draw ar y pentwr. 71 00:03:08,602 --> 00:03:11,560 Yn awr, ni fyddwn yn siarad gormod am nhw, ond mae newidynnau amgylcheddol hyn 72 00:03:11,560 --> 00:03:15,690 ar y gwaelod gwelsom beth amser yn ôl pan Roeddwn yn futzing ar y bysellfwrdd un diwrnod 73 00:03:15,690 --> 00:03:20,050 ac yr wyf yn dechrau cael gafael ar bethau fel argv 100 neu argv 1,000, 74 00:03:20,050 --> 00:03:22,320 jyst elements-- rwy'n anghofio y numbers-- ond bod 75 00:03:22,320 --> 00:03:24,330 Nid oedd i fod i gael mynediad gan i mi. 76 00:03:24,330 --> 00:03:26,581 Rydym yn dechrau gweld rhai ffynci symbolau ar y sgrin. 77 00:03:26,581 --> 00:03:28,330 Dyna oedd hyn a elwir yn newidynnau amgylchedd 78 00:03:28,330 --> 00:03:32,390 fel lleoliadau byd-eang ar gyfer fy rhaglen neu am 'm chyfrifiadur, nid 79 00:03:32,390 --> 00:03:37,090 heb unrhyw gysylltiad â'r diweddar bug a drafodwyd, 80 00:03:37,090 --> 00:03:39,670 Shellshock, sydd wedi bod plaguing eithaf ychydig o gyfrifiaduron. 81 00:03:39,670 --> 00:03:42,960 >> Nawr yn olaf, mewn ffocws heddiw byddwn yn y pen draw ar y domen. 82 00:03:42,960 --> 00:03:44,864 Mae hyn yn darn arall o gof. 83 00:03:44,864 --> 00:03:47,030 Ac yn sylfaenol i gyd mae hyn cof yn yr un pethau. 84 00:03:47,030 --> 00:03:48,040 Mae yr un caledwedd. 85 00:03:48,040 --> 00:03:49,956 Rydym yn unig fath o thrin gwahanol glystyrau 86 00:03:49,956 --> 00:03:51,460 o bytes i wahanol bwrpasau. 87 00:03:51,460 --> 00:03:56,540 Mae'r domen hefyd yn mynd i fod yn lle newidynnau a chof yr ydych yn gofyn am 88 00:03:56,540 --> 00:03:58,810 oddi wrth y system weithredu yn cael ei storio dros dro. 89 00:03:58,810 --> 00:04:01,890 >> Ond mae fath o broblem yma, gan fod y darlun yn awgrymu. 90 00:04:01,890 --> 00:04:05,261 Rydym yn fath o gael dau llongau am i wrthdaro. 91 00:04:05,261 --> 00:04:08,010 Oherwydd fel y byddwch yn defnyddio mwy a mwy o o'r pentwr, ac fel y gwelwn heddiw 92 00:04:08,010 --> 00:04:11,800 ymlaen, wrth i chi ddefnyddio mwy a mwy o domen, yn sicr y gallai pethau drwg yn digwydd. 93 00:04:11,800 --> 00:04:15,054 Ac yn wir, gallwn gymell y fwriadol neu'n anfwriadol. 94 00:04:15,054 --> 00:04:16,970 Felly yr Cliffhanger diwethaf Roedd amser yn y rhaglen hon, 95 00:04:16,970 --> 00:04:20,570 nad oedd yn gweini unrhyw swyddogaethol ddiben ac eithrio i ddangos 96 00:04:20,570 --> 00:04:24,750 sut yr ydych yn fel y gall dyn drwg mewn gwirionedd yn cymryd mantais o chwilod yn rhaglen rhywun 97 00:04:24,750 --> 00:04:28,460 ac yn cymryd dros raglen neu hyd yn oed system gyfrifiadurol cyfan neu gweinydd. 98 00:04:28,460 --> 00:04:31,660 Felly, dim ond er mwyn yr olwg fyr, byddwch yn sylwi bod prif ar y gwaelod 99 00:04:31,660 --> 00:04:34,510 cymryd mewn llinell orchymyn dadleuon, yn unol argv. 100 00:04:34,510 --> 00:04:38,480 Ac mae ganddo alwad i ffwythiant f, hanfod yn ddienw swyddogaeth o'r enw 101 00:04:38,480 --> 00:04:40,250 f, ac mae'n pasio mewn argv [1]. 102 00:04:40,250 --> 00:04:43,960 >> Felly, pa bynnag air y mathau o ddefnyddwyr mewn o y brydlon ar ôl enw'r rhaglen hon, 103 00:04:43,960 --> 00:04:49,310 ac yna mae hyn yn swyddogaeth mympwyol i fyny top, f, yn cymryd mewn llinyn, AKA golosg *, 104 00:04:49,310 --> 00:04:51,720 fel yr ydym wedi dechrau trafod, a 'i jyst yn galw yn "bar." 105 00:04:51,720 --> 00:04:53,310 Ond gallem ei alw'n unrhyw beth. 106 00:04:53,310 --> 00:04:57,470 Ac yna mae'n datgan, y tu mewn o f, amrywiaeth o gymeriadau 107 00:04:57,470 --> 00:04:59,930 Gelwir c-- 12 o gymeriadau o'r fath. 108 00:04:59,930 --> 00:05:03,580 >> Yn awr, gan y stori roeddwn yn dweud funud yn ôl, lle er cof 109 00:05:03,580 --> 00:05:06,720 yn c, neu 12 y rhai chars mynd i roi diwedd ar i fyny? 110 00:05:06,720 --> 00:05:07,570 Dim ond i fod yn glir. 111 00:05:07,570 --> 00:05:08,070 Yeah? 112 00:05:08,070 --> 00:05:08,590 >> CYNULLEIDFA: Ar y pentwr. 113 00:05:08,590 --> 00:05:09,420 >> DAVID J. Malan: Ar y pentwr. 114 00:05:09,420 --> 00:05:10,720 Felly mae c yn newidyn lleol. 115 00:05:10,720 --> 00:05:14,079 Rydym yn gofyn am 12 chars neu 12 bytes. 116 00:05:14,079 --> 00:05:16,120 Mae'r rhai yn mynd i roi diwedd ar i fyny ar y pentwr fel y'u gelwir. 117 00:05:16,120 --> 00:05:18,530 Yn awr yn olaf mae hyn swyddogaeth arall dyna mewn gwirionedd yn eithaf defnyddiol, 118 00:05:18,530 --> 00:05:20,571 ond nid ydym wedi defnyddio mewn gwirionedd ein hunain, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 Mae'n golygu copi llinyn, ond unig N llythyrau, n cymeriadau. 121 00:05:25,200 --> 00:05:31,990 Felly, bydd cymeriadau n yn copïo o far i mewn c. 122 00:05:31,990 --> 00:05:32,980 A faint o? 123 00:05:32,980 --> 00:05:34,110 Mae hyd y bar. 124 00:05:34,110 --> 00:05:36,330 Felly, mewn geiriau eraill, bod un llinell, strncopy, 125 00:05:36,330 --> 00:05:39,500 yn mynd i gopïo bar yn effeithiol i c. 126 00:05:39,500 --> 00:05:42,340 >> Yn awr, dim ond i fath o rhagweld mae'r moesol y stori hon, 127 00:05:42,340 --> 00:05:44,750 hyn a allai achosi problemau yma? 128 00:05:44,750 --> 00:05:49,710 Hyd yn oed er ein bod yn edrych ar y darn o bar ac yn pasio i mewn strncopy, 129 00:05:49,710 --> 00:05:53,145 beth sy'n eich perfedd yn dweud wrthych yn dal torri am y rhaglen hon? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 Yeah? 132 00:05:55,220 --> 00:05:57,491 >> CYNULLEIDFA: Nid yw'n cynnwys lle i'r cymeriad null. 133 00:05:57,491 --> 00:05:59,990 DAVID J. Malan: Nid yw'n cynnwys lle i'r cymeriad null. 134 00:05:59,990 --> 00:06:02,073 O bosibl, yn wahanol i arfer y gorffennol nid ydym yn ei wneud hyd yn oed yn 135 00:06:02,073 --> 00:06:04,810 cael cymaint fel plws 1 i ddarparu ar gyfer y cymeriad null. 136 00:06:04,810 --> 00:06:06,649 Ond mae hyd yn oed yn waeth na hynny. 137 00:06:06,649 --> 00:06:07,940 Beth arall rydym yn methu â gwneud? 138 00:06:07,940 --> 00:06:08,432 Yeah? 139 00:06:08,432 --> 00:06:09,307 >> CYNULLEIDFA: [Anghlywadwy] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 DAVID J. Malan: Perffaith. 142 00:06:16,440 --> 00:06:18,490 Rydym wedi codio galed 12 'n bert yn fympwyol. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 Nid yw hynny'n gymaint y broblem, ond y ffaith 145 00:06:21,330 --> 00:06:25,630 nad ydym yn hyd yn oed wirio os hyd y bar yn llai na 12, 146 00:06:25,630 --> 00:06:28,530 ac os felly mae'n mynd i fod yn ddiogel i'w roi yn y cof 147 00:06:28,530 --> 00:06:30,260 Gelwir c yr ydym wedi dyrannu. 148 00:06:30,260 --> 00:06:32,960 Yn wir, os yw'r bar yn debyg 20 nod o hyd, 149 00:06:32,960 --> 00:06:39,010 Ymddengys swyddogaeth hon gael ei gopïo 20 cymeriadau o far i mewn c, a thrwy hynny 150 00:06:39,010 --> 00:06:41,310 cymryd o leiaf 8 bytes na ddylai fod. 151 00:06:41,310 --> 00:06:42,690 Dyna goblygiadau yma. 152 00:06:42,690 --> 00:06:44,347 >> Felly, yn rhaglen fer, torri. 153 00:06:44,347 --> 00:06:45,180 Nid yw o'r fath yn beth mawr. 154 00:06:45,180 --> 00:06:46,360 Efallai chi'n cael nam segmentu. 155 00:06:46,360 --> 00:06:47,651 Rydym wedi cael yr holl bugs mewn rhaglenni. 156 00:06:47,651 --> 00:06:50,196 Efallai y byddwn i gyd yn cael bugs mewn rhaglenni ar hyn o bryd. 157 00:06:50,196 --> 00:06:51,320 Ond beth yw'r goblygiadau? 158 00:06:51,320 --> 00:06:54,390 Wel, dyma fersiwn chwyddo i mewn o y darlun o gof fy cyfrifiadur. 159 00:06:54,390 --> 00:06:56,230 Mae hyn yn y waelod fy pentwr. 160 00:06:56,230 --> 00:06:59,644 Ac yn wir, ar yr union gwaelod yw beth sy'n Gelwir stac arferol rhiant, ffordd ffansi 161 00:06:59,644 --> 00:07:00,560 o ddweud hynny'n brif. 162 00:07:00,560 --> 00:07:03,772 Fel bod pwy bynnag a elwir yn y swyddogaeth dd yr ydym yn sôn amdano. 163 00:07:03,772 --> 00:07:05,230 Felly, mae hyn yn y waelod y pentwr. 164 00:07:05,230 --> 00:07:06,640 Cyfeiriad dychwelyd yn rhywbeth newydd. 165 00:07:06,640 --> 00:07:08,810 Mae bob amser wedi bod yno, wedi bod bob amser yn y llun. 166 00:07:08,810 --> 00:07:10,440 Rydym yn unig byth alw sylw ato. 167 00:07:10,440 --> 00:07:15,290 Oherwydd ei fod yn troi allan y ffordd y c gweithio yw pan fydd un yn galw swyddogaeth arall, 168 00:07:15,290 --> 00:07:18,780 nid yn unig yn gwneud y dadleuon i hynny swyddogaeth yn cael eu gwthio ar y pentwr, 169 00:07:18,780 --> 00:07:22,470 nid yn unig yn gwneud lleol y swyddogaeth yn newidynnau yn cael eu gwthio ar y pentwr, 170 00:07:22,470 --> 00:07:26,820 rhywbeth a elwir yn gyfeiriad dychwelyd hefyd yn cael ei roi ar y pentwr. 171 00:07:26,820 --> 00:07:33,330 Yn benodol, os yw prif alwadau foo, prif yn gyfeiriad ei hun mewn cof, ych rhywbeth, 172 00:07:33,330 --> 00:07:38,240 effeithiol yn cael ei roi ar y pentwr felly pan f yn cael ei wneud cyflawni ei 173 00:07:38,240 --> 00:07:43,630 gwybod ble i neidio yn ôl i yn y testun segment er mwyn parhau gweithredu. 174 00:07:43,630 --> 00:07:47,760 >> Felly, os ydym ni yma yn gysyniadol, yn y prif, yna f yn cael ei alw. 175 00:07:47,760 --> 00:07:50,200 Sut mae f yn gwybod pwy i reoli â llaw yn ôl? 176 00:07:50,200 --> 00:07:52,020 Wel, mae hyn ychydig briwsion bara mewn coch yma, 177 00:07:52,020 --> 00:07:54,978 Gelwir y cyfeiriad dychwelyd, 'i jyst sieciau, beth yw bod cyfeiriad dychwelyd? 178 00:07:54,978 --> 00:07:57,039 O, gadewch i mi neidio yn ôl i brif yma. 179 00:07:57,039 --> 00:07:59,080 Ac mae hynny'n ychydig o gorsymleiddio, 180 00:07:59,080 --> 00:08:00,750 oherwydd bod y seroau a rhai ar gyfer y prif yn dechnegol 181 00:08:00,750 --> 00:08:01,967 i fyny yma yn y segment dechnoleg. 182 00:08:01,967 --> 00:08:03,800 Ond dyna y syniad. f jyst wedi i wybod beth 183 00:08:03,800 --> 00:08:06,680 i lle mae rheolaeth yn y pen draw yn mynd yn ôl. 184 00:08:06,680 --> 00:08:09,790 >> Ond mae'r ffordd y cyfrifiaduron wedi gosod hir allan bethau 185 00:08:09,790 --> 00:08:12,320 fel newidynnau lleol ac dadleuon yn debyg i hyn. 186 00:08:12,320 --> 00:08:17,180 Felly, yn y frig y llun yn glas yw'r ffrâm pentwr ar gyfer f, felly mae'r holl 187 00:08:17,180 --> 00:08:19,630 o'r cof bod f yn benodol gan ddefnyddio. 188 00:08:19,630 --> 00:08:22,990 Felly yn unol â hynny, yn sylwi bod bar sydd yn y llun. 189 00:08:22,990 --> 00:08:23,980 Bar oedd ei ddadl. 190 00:08:23,980 --> 00:08:27,240 Ac rydym yn honni bod dadleuon i swyddogaethau yn cael eu gwthio ar y pentwr. 191 00:08:27,240 --> 00:08:29,910 A c, wrth gwrs, yw Hefyd yn y llun. 192 00:08:29,910 --> 00:08:33,520 >> A dim ond ar gyfer dibenion nodiannol, sylwi ar y gornel chwith uchaf 193 00:08:33,520 --> 00:08:37,020 yn beth fyddai c braced 0 a Yna, ychydig i lawr ar y dde 194 00:08:37,020 --> 00:08:38,220 yn c braced 11. 195 00:08:38,220 --> 00:08:41,240 Felly, mewn geiriau eraill, gallwch ddychmygu fod yna grid o bytes 196 00:08:41,240 --> 00:08:44,380 yno, cyntaf ohonynt yw top chwith, gwaelod ohonynt 197 00:08:44,380 --> 00:08:48,360 yw'r olaf o'r rhai 12 bytes. 198 00:08:48,360 --> 00:08:49,930 >> Ond yn awr yn ceisio gyflym ymlaen. 199 00:08:49,930 --> 00:08:55,580 Yr hyn sydd ar fin digwydd os byddwn yn pasio mewn bar llinyn sy'n hwy nag c? 200 00:08:55,580 --> 00:08:59,130 Ac nid ydym yn gwirio os mae'n wir yn hwy na 12. 201 00:08:59,130 --> 00:09:03,146 Pa ran o'r darlun hwn yn mynd i cael overwritten gan bytes 0, 1, 2, 3, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11, ac yna ddrwg, 12, 13 drwy 19? 203 00:09:07,890 --> 00:09:11,820 Beth sy'n mynd i ddigwydd yma, os ydych yn casglu o'r archebu 204 00:09:11,820 --> 00:09:14,790 bod c braced 0 yw ar y top a c braced 11 yn fath o lawr 205 00:09:14,790 --> 00:09:15,812 ar y dde? 206 00:09:15,812 --> 00:09:16,796 Yeah? 207 00:09:16,796 --> 00:09:19,260 >> CYNULLEIDFA: Wel, mae'n mynd i ysgrifennu dros y bar torgoch *. 208 00:09:19,260 --> 00:09:22,260 >> DAVID J. Malan: Yeah, mae'n edrych fel ydych yn mynd i ysgrifennu dros torgoch bar *. 209 00:09:22,260 --> 00:09:26,245 Ac yn waeth, os ydych yn anfon mewn 'n sylweddol hir llinyn, efallai y byddwch hyd yn oed yn throsysgrifo beth? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 Mae'r cyfeiriad dychwelyd. 212 00:09:28,570 --> 00:09:31,380 Sydd unwaith eto, yn union fel briwsion bara i ddweud wrth y rhaglen ble 213 00:09:31,380 --> 00:09:34,060 i fynd yn ôl i'r adeg pan f cael ei wneud yn cael ei alw. 214 00:09:34,060 --> 00:09:37,140 >> Felly pa ddrwg guys fel arfer yn ei wneud yw os ydynt yn dod ar draws rhaglen 215 00:09:37,140 --> 00:09:41,290 eu bod yn chwilfrydig a oes yn ecsploetio'n, bygi yn y fath fodd 216 00:09:41,290 --> 00:09:43,550 y gall ef neu hi eu cymryd manteisio ar hynny byg, 217 00:09:43,550 --> 00:09:45,720 gyffredinol, nid ydynt yn cael hawl hon y tro cyntaf. 218 00:09:45,720 --> 00:09:48,590 Maent yn unig yn dechrau anfon, er enghraifft, llinynnau ar hap i mewn i'ch rhaglen, 219 00:09:48,590 --> 00:09:50,260 boed ar y bysellfwrdd, neu'n dweud y gwir mae'n debyg 220 00:09:50,260 --> 00:09:52,740 ysgrifennu ychydig o raglen i ddim ond cynhyrchu llinynnau yn awtomatig, 221 00:09:52,740 --> 00:09:55,430 a dechrau curo ar eich rhaglen gan anfon mewn llawer o wahanol fewnbynnau 222 00:09:55,430 --> 00:09:56,340 yn wahanol hyd. 223 00:09:56,340 --> 00:09:58,990 >> Cyn gynted ag y bydd eich dyrfau rhaglen, mae hynny'n beth anhygoel. 224 00:09:58,990 --> 00:10:01,020 Oherwydd mae'n golygu ei fod neu hi wedi darganfod 225 00:10:01,020 --> 00:10:02,660 yr hyn sydd yn ôl pob tebyg yn wir a bug. 226 00:10:02,660 --> 00:10:05,830 Ac yna gallant gael mwy clyfar a dechrau canolbwyntio fwy cul 227 00:10:05,830 --> 00:10:07,420 ar sut i fanteisio ar y nam. 228 00:10:07,420 --> 00:10:11,480 Yn benodol, yr hyn y gallai ef neu hi wneud yw anfon, yn yr achos gorau, helo. 229 00:10:11,480 --> 00:10:12,210 Nid oes llawer mawr. 230 00:10:12,210 --> 00:10:14,750 Mae'n llinyn sy'n ddigon byr. 231 00:10:14,750 --> 00:10:18,100 Ond beth os yw ef neu hi yn anfon, a byddwn yn cyffredinoli fel, 232 00:10:18,100 --> 00:10:20,890 ymosodiad code-- felly zeros a rhai sy'n gwneud pethau 233 00:10:20,890 --> 00:10:25,150 fel rm-RF, sy'n tynnu popeth o'r ddisg galed neu anfon spam 234 00:10:25,150 --> 00:10:27,000 neu rhywsut ymosod ar y peiriant? 235 00:10:27,000 --> 00:10:29,570 >> Felly, os bydd pob un o'r rhain llythrennau A dim ond yn cynrychioli, 236 00:10:29,570 --> 00:10:32,380 gysyniadol, ymosodiad, ymosodiad, ymosodiad, ymosodiad, mae rhai cod gwael 237 00:10:32,380 --> 00:10:36,410 bod rhywun arall yn ysgrifennu, ond os yw'r person yn ddigon smart 238 00:10:36,410 --> 00:10:40,790 i nid yn unig yn cynnwys yr holl o'r rhai rm-RFS, ond hefyd 239 00:10:40,790 --> 00:10:46,100 Bod ei ychydig beit diwethaf fod yn rhif sy'n cyfateb 240 00:10:46,100 --> 00:10:50,540 at y cyfeiriad ei neu hi cod ymosodiad ei hun 241 00:10:50,540 --> 00:10:53,820 ei fod wedi pasio mewn dim ond trwy ddarparu ei wrth yr anogwr, 242 00:10:53,820 --> 00:10:58,760 gallwch castia y cyfrifiadur yn effeithiol i sylwi pan f yn cael ei wneud cyflawni, 243 00:10:58,760 --> 00:11:02,400 oh, mae'n amser i mi i neidio yn ôl i'r cyfeiriad dychwelyd coch. 244 00:11:02,400 --> 00:11:06,070 Ond, oherwydd ei fod wedi rywsut gorgyffwrdd y cyfeiriad dychwelyd 245 00:11:06,070 --> 00:11:09,602 gyda eu rhif eu hunain, ac eu bod yn ddigon craff 246 00:11:09,602 --> 00:11:11,560 i wedi ffurfweddu bod rhif i gyfeirio, fel y 247 00:11:11,560 --> 00:11:13,740 weld yn y top super gornel chwith yno, 248 00:11:13,740 --> 00:11:18,020 y cyfeiriad gwirioneddol yn y cyfrifiadur cof am rai o'u cod ymosodiad, 249 00:11:18,020 --> 00:11:21,740 gall dyn drwg castia y cyfrifiadur i mewn i weithredu ei god ei hun. 250 00:11:21,740 --> 00:11:23,700 >> A bod y cod, unwaith eto, gall fod yn unrhyw beth. 251 00:11:23,700 --> 00:11:26,120 Mae'n cael ei alw yn gyffredinol cod cregyn, sydd ychydig 252 00:11:26,120 --> 00:11:29,030 ffordd o ddweud nad yw'n gyffredinol yn rhywbeth mor syml â rm-RF. 253 00:11:29,030 --> 00:11:32,340 Mae'n mewn gwirionedd yn rhywbeth fel Bash, neu'r rhaglen wirioneddol sy'n rhoi iddo 254 00:11:32,340 --> 00:11:37,230 i reolaeth y rhaglennol i weithredu unrhyw beth arall y maent yn dymuno. 255 00:11:37,230 --> 00:11:40,210 Felly, yn fyr, mae hyn i gyd yn deillio o'r ffaith syml 256 00:11:40,210 --> 00:11:44,490 bod nam yma dan sylw beidio gwirio ffiniau eich arae. 257 00:11:44,490 --> 00:11:47,250 Ac oherwydd y ffordd cyfrifiaduron gwaith yw eu bod yn 258 00:11:47,250 --> 00:11:49,430 defnyddiwch y pentwr o effeithiol, yn gysyniadol, 259 00:11:49,430 --> 00:11:54,830 gwaelod ar i fyny, ond yna yr elfennau chi wthio ar y pentwr tyfu brig i lawr, 260 00:11:54,830 --> 00:11:56,624 mae hyn yn hynod broblematig. 261 00:11:56,624 --> 00:11:58,290 Yn awr, mae yna ffyrdd i weithio o amgylch hyn. 262 00:11:58,290 --> 00:12:00,800 Ac yn dweud y gwir, mae yna ieithoedd â hwy i weithio o amgylch hyn. 263 00:12:00,800 --> 00:12:03,100 Java yn imiwnedd, er enghraifft, at y mater penodol hwn. 264 00:12:03,100 --> 00:12:04,110 Oherwydd nad ydynt yn rhoi awgrymiadau i chi. 265 00:12:04,110 --> 00:12:05,943 Nid ydynt yn rhoi i chi cyfeiriadau cof uniongyrchol. 266 00:12:05,943 --> 00:12:08,560 Felly, gyda pŵer hwn sydd gennym i gyffwrdd ag unrhyw beth mewn cof 267 00:12:08,560 --> 00:12:11,580 rydym eisiau dod, rhaid cyfaddef, risg mawr. 268 00:12:11,580 --> 00:12:12,430 >> Felly cadwch lygad allan. 269 00:12:12,430 --> 00:12:14,596 Os, dweud y gwir, yn y misoedd neu flynyddoedd i ddod, unrhyw bryd 270 00:12:14,596 --> 00:12:17,740 eich bod yn darllen am rai ecsbloetio o raglen neu weinydd, 271 00:12:17,740 --> 00:12:22,370 os ydych chi erioed yn gweld awgrym o rywbeth fel trawiad ar y gorlif byffer, 272 00:12:22,370 --> 00:12:25,390 neu Gorlif stac yn fath arall o ymosodiad, debyg o ran ysbryd, 273 00:12:25,390 --> 00:12:28,770 gymaint ag ysbrydoli y wefan enw, os ydych yn ei wybod, 274 00:12:28,770 --> 00:12:33,170 'i' i gyd yn siarad am yn unig gorlifo maint rhai gymeriad 275 00:12:33,170 --> 00:12:36,200 amrywiaeth neu ryw amrywiaeth yn fwy cyffredinol. 276 00:12:36,200 --> 00:12:38,822 Unrhyw gwestiynau, yna, ar hyn? 277 00:12:38,822 --> 00:12:39,780 Peidiwch â cheisio hyn yn y cartref. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> Mae pob hawl. 280 00:12:42,300 --> 00:12:47,270 Hyd yn malloc hyd yn hyn wedi bod yn ein newydd cyfaill yn y gallwn ddyrannu cof 281 00:12:47,270 --> 00:12:50,540 nad ydym o reidrwydd yn gwybod yn ymlaen llaw ein bod am felly nid oes gennym 282 00:12:50,540 --> 00:12:52,920 i cod caled i mewn i'n nifer y rhaglen fel 12. 283 00:12:52,920 --> 00:12:55,550 Unwaith y bydd y defnyddiwr yn dweud wrthym faint o data ef neu hi eisiau mewnbwn, 284 00:12:55,550 --> 00:12:58,000 gallwn malloc bod llawer o gof. 285 00:12:58,000 --> 00:13:01,484 >> Felly malloc mae'n troi allan, i'r raddau rydym wedi bod yn ei ddefnyddio, 286 00:13:01,484 --> 00:13:03,900 benodol tro diwethaf, ac wedyn chi guys wedi bod yn defnyddio ei 287 00:13:03,900 --> 00:13:08,160 gyfer getstring ddiarwybod i sawl wythnos, pob un o gof malloc yn 288 00:13:08,160 --> 00:13:09,820 dod o'r domen hyn a elwir yn. 289 00:13:09,820 --> 00:13:13,852 A dyma pam getstring, er enghraifft, Gellir neilltuo cof ddynamig 290 00:13:13,852 --> 00:13:16,060 heb wybod beth rydych chi'n mynd i deipio o flaen llaw, 291 00:13:16,060 --> 00:13:21,520 llaw i chi yn ôl pwyntydd i'r cof, a bod y cof yn dal i chi i gadw, 292 00:13:21,520 --> 00:13:24,080 hyd yn oed ar ôl getstring ffurflenni. 293 00:13:24,080 --> 00:13:27,450 Gan fod galw i gof ar ôl yr holl bod y pentwr yn mynd yn gyson i fyny ac i lawr, 294 00:13:27,450 --> 00:13:27,950 fyny ac i lawr. 295 00:13:27,950 --> 00:13:30,230 A chyn gynted ag y mae'n mynd i lawr, mae hynny'n golygu unrhyw cof 296 00:13:30,230 --> 00:13:33,030 swyddogaeth hon a ddefnyddir dylai Nid yw yn cael ei ddefnyddio gan unrhyw un arall. 297 00:13:33,030 --> 00:13:34,570 Mae'n gwerthoedd garbage nawr. 298 00:13:34,570 --> 00:13:36,120 >> Ond mae'r domen i fyny fan hyn. 299 00:13:36,120 --> 00:13:39,360 A beth sy'n neis am malloc yw bod pan malloc yn dyrannu cof i fyny fan hyn, 300 00:13:39,360 --> 00:13:42,070 nad yw'n cael effaith, ar gyfer y rhan fwyaf, gan y pentwr. 301 00:13:42,070 --> 00:13:46,000 Ac felly gall unrhyw swyddogaeth gael mynediad cof sydd wedi'i malloc'd, 302 00:13:46,000 --> 00:13:49,120 hyd yn oed gan swyddogaeth fel getstring, hyd yn oed ar ôl iddo gael ei ddychwelyd. 303 00:13:49,120 --> 00:13:51,700 >> Yn awr, mae'r gwrthwyneb o malloc yn rhad ac am ddim. 304 00:13:51,700 --> 00:13:53,900 Ac yn wir, y rheol i chi angen iddynt ddechrau mabwysiadu 305 00:13:53,900 --> 00:13:58,950 yn unrhyw, unrhyw, unrhyw tro y byddwch yn defnyddio malloc mae'n rhaid i chi eich hun yn ei ddefnyddio am ddim, yn y pen draw, 306 00:13:58,950 --> 00:14:00,280 ar yr un pwyntydd. 307 00:14:00,280 --> 00:14:03,289 Pob yr amser hwn, rydym wedi bod yn ysgrifennu bygi, cod bygi, am nifer o resymau. 308 00:14:03,289 --> 00:14:05,580 Ond un o'r rhain wedi bod yn defnyddio'r llyfrgell CS50, a oedd yn 309 00:14:05,580 --> 00:14:09,010 ei hun yn fwriadol buggy, mae'n gollwng cof. 310 00:14:09,010 --> 00:14:11,410 Unrhyw bryd y byddwch wedi galw getstring dros yr ychydig wythnosau diwethaf 311 00:14:11,410 --> 00:14:13,870 rydym yn gofyn i'r gweithredu system, Linux, er cof. 312 00:14:13,870 --> 00:14:15,780 Ac yr ydych wedi erioed unwaith a roddwyd yn ôl. 313 00:14:15,780 --> 00:14:17,730 Ac nid yw hyn yn, yn ymarfer, yn beth da. 314 00:14:17,730 --> 00:14:20,330 >> Ac Valgrind, un o'r arfau a gyflwynwyd yn Pset 4, 315 00:14:20,330 --> 00:14:22,900 yn ymwneud â chi helpu bellach yn dod o hyd i chwilod fel 'na. 316 00:14:22,900 --> 00:14:27,060 Ond diolch byth am Pset 4 Nid oes angen i chi i ddefnyddio'r llyfrgell CS50 neu'r getstring. 317 00:14:27,060 --> 00:14:31,220 Felly mae unrhyw namau yn ymwneud â cof yn y pen draw yn mynd i fod yn eich pen eich hun. 318 00:14:31,220 --> 00:14:34,060 >> Felly malloc yn fwy na dim ond gyfleus ar gyfer y diben hwn. 319 00:14:34,060 --> 00:14:37,420 Gallwn yn awr mewn gwirionedd yn datrys sylfaenol wahanol broblemau, 320 00:14:37,420 --> 00:14:41,640 a datrys problemau sylfaenol yn fwy effeithiol fel yr addewid wythnos sero ar. 321 00:14:41,640 --> 00:14:44,720 Hyd yma mae hyn yw'r sexiest strwythur data rydym wedi cael. 322 00:14:44,720 --> 00:14:47,804 A thrwy strwythur data Fi jyst yn ei olygu ffordd o conceptualizing cof 323 00:14:47,804 --> 00:14:50,720 mewn ffordd sy'n mynd y tu hwnt dim ond dweud, mae hwn yn int, mae hwn yn torgoch. 324 00:14:50,720 --> 00:14:52,930 Gallwn ddechrau clwstwr pethau at ei gilydd. 325 00:14:52,930 --> 00:14:54,460 >> Felly amrywiaeth yn edrych fel hyn. 326 00:14:54,460 --> 00:14:57,270 A beth yn allweddol mewn tua amrywiaeth yw ei fod yn rhoi i chi 327 00:14:57,270 --> 00:14:59,724 darnau o gefn-wrth-gefn cof, pob un ohonynt 328 00:14:59,724 --> 00:15:02,765 yn mynd i fod o'r un math, int, int, int, int, neu torgoch, cols, torgoch, 329 00:15:02,765 --> 00:15:03,330 torgoch. 330 00:15:03,330 --> 00:15:04,496 Ond mae ychydig o anfanteision. 331 00:15:04,496 --> 00:15:06,570 Mae hyn er enghraifft, yn amrywiaeth o maint chwech. 332 00:15:06,570 --> 00:15:10,650 Gadewch i ni dybio eich llenwi arae hwn gyda chwech rhifau ac yna, am ba bynnag reswm, 333 00:15:10,650 --> 00:15:13,187 eich defnyddiwr eisiau rhoi chi seithfed rif. 334 00:15:13,187 --> 00:15:14,020 Ble ydych chi'n ei roi? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> Beth yw'r ateb os oes gennych greu amrywiaeth ar y corn, 337 00:15:18,990 --> 00:15:22,030 er enghraifft, dim ond yn yr wythnos dau nodiant a gyflwynwyd gennym, 338 00:15:22,030 --> 00:15:23,730 o gromfachau sgwâr gyda nifer y tu mewn? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 Wel, oes gennych chi chwe rhifau yn y blychau hyn. 341 00:15:27,260 --> 00:15:28,530 Beth fyddai eich greddf fod? 342 00:15:28,530 --> 00:15:29,973 Ble fyddech chi eisiau ei roi? 343 00:15:29,973 --> 00:15:30,860 >> CYNULLEIDFA: [Anghlywadwy] 344 00:15:30,860 --> 00:15:31,315 >> DAVID J. Malan: Mae'n ddrwg gennyf? 345 00:15:31,315 --> 00:15:32,380 >> CYNULLEIDFA: Rhowch ef ar y diwedd. 346 00:15:32,380 --> 00:15:33,796 >> DAVID J. Malan: Rhowch ef ar y diwedd. 347 00:15:33,796 --> 00:15:35,880 Felly, ychydig dros ar y dde, y tu allan i'r bocs. 348 00:15:35,880 --> 00:15:38,710 Pa yn neis, ond mae'n troi allan na allwch wneud hynny. 349 00:15:38,710 --> 00:15:41,350 Oherwydd os nad ydych wedi gofyn ar gyfer darn hwn o gof, 350 00:15:41,350 --> 00:15:44,490 gallai fod gan gyd-ddigwyddiad bod hyn yn cael ei ddefnyddio gan rai newidyn arall 351 00:15:44,490 --> 00:15:45,030 yn gyfan gwbl. 352 00:15:45,030 --> 00:15:49,210 Meddyliwch yn ôl rhyw wythnos pan fyddwn yn gosodwyd allan enwau Zamyla a Davin a Gabe yn 353 00:15:49,210 --> 00:15:49,930 mewn cof. 354 00:15:49,930 --> 00:15:51,638 Roeddent yn llythrennol gefn wrth gefn wrth gefn. 355 00:15:51,638 --> 00:15:53,550 Felly, na allwn o reidrwydd ymddiried bod beth bynnag ei 356 00:15:53,550 --> 00:15:55,800 dros yma ar gael i mi ei ddefnyddio. 357 00:15:55,800 --> 00:15:56,990 >> Felly, beth arall y gallech ei wneud? 358 00:15:56,990 --> 00:16:00,282 Wel, ar ôl sylweddoli i chi Mae angen amrywiaeth o faint saith, 359 00:16:00,282 --> 00:16:02,490 fe allech chi jyst greu amrywiaeth o faint saith yna defnyddiwch 360 00:16:02,490 --> 00:16:05,950 a ar gyfer dolen neu dolen tra, gopïo i mewn i'r amrywiaeth newydd, 361 00:16:05,950 --> 00:16:09,680 ac yna rhywsut dim ond cael gwared o amrywiaeth hwn neu dim ond rhoi'r gorau i'w defnyddio. 362 00:16:09,680 --> 00:16:12,130 Ond nid yw hynny'n arbennig o effeithlon. 363 00:16:12,130 --> 00:16:15,340 Yn fyr, nid yw araeau yn gadael chi ddeinamig newid maint. 364 00:16:15,340 --> 00:16:17,900 >> Felly, ar y naill law a gewch mynediad ar hap, sydd yn anhygoel. 365 00:16:17,900 --> 00:16:20,108 Oherwydd ei fod yn gadael i ni wneud pethau fel rhaniad a goncro, 366 00:16:20,108 --> 00:16:23,100 chwiliad deuaidd, pob un ohonynt rydym wedi yn siarad am ar y sgrin yma. 367 00:16:23,100 --> 00:16:24,950 Ond byddwch yn peintio eich hun i mewn i gornel. 368 00:16:24,950 --> 00:16:27,810 Cyn gynted ag y byddwch yn taro diwedd eich array, 369 00:16:27,810 --> 00:16:29,980 rhaid i chi wneud yn iawn llawdriniaeth yn ddrud 370 00:16:29,980 --> 00:16:33,910 neu ysgrifennu criw cyfan o god yn hyn ymdrin â'r broblem. 371 00:16:33,910 --> 00:16:36,680 >> Felly beth os yn lle hynny oedd gennym rhywbeth a elwir yn rhestr, 372 00:16:36,680 --> 00:16:38,820 neu restr sy'n gysylltiedig yn benodol? 373 00:16:38,820 --> 00:16:41,930 Beth os hytrach na gorfod petryalau yn ôl i yn ôl i'r cefn, 374 00:16:41,930 --> 00:16:45,730 mae gennym petryalau sy'n gadael ychydig ychydig o ystafell wiggle mewn rhyngddynt? 375 00:16:45,730 --> 00:16:49,670 A hyd yn oed er fy mod i wedi tynnu hyn llun neu ei addasu y llun 376 00:16:49,670 --> 00:16:54,696 o un o'r testunau yma i fod yn ôl i gefn wrth gefn drefnus iawn, mewn gwirionedd, 377 00:16:54,696 --> 00:16:56,820 un o'r petryalau rhai Gallai fod hyd yma mewn cof. 378 00:16:56,820 --> 00:16:58,028 Gallai un ohonynt fod hyd yma. 379 00:16:58,028 --> 00:17:00,420 Gallai un ohonynt fod hyd yma, dros yma, ac yn y blaen. 380 00:17:00,420 --> 00:17:02,910 >> Ond beth os ydym yn tynnu, yn yr achos hwn, saethau 381 00:17:02,910 --> 00:17:05,650 hynny rywsut yn cysylltu'r rhain petryal gyda'i gilydd? 382 00:17:05,650 --> 00:17:08,170 Yn wir, rydym wedi gweld technegol ymgnawdoliad saeth. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 Beth rydym wedi ei ddefnyddio mewn diweddar dyddiau hynny, o dan y cwfl, 385 00:17:13,710 --> 00:17:15,210 yn cynrychioli saeth? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 Mae pwyntydd, dde? 388 00:17:17,349 --> 00:17:19,780 >> Felly beth os, yn hytrach na dim ond storio y rhifau, 389 00:17:19,780 --> 00:17:23,130 fel 9, 17, 22, 26, 34, beth os nad ydym yn storio 390 00:17:23,130 --> 00:17:27,079 dim ond nifer ond pwyntydd nesaf i bob rhif o'r fath? 391 00:17:27,079 --> 00:17:30,690 Fel bod cymaint fel y byddech yn edau a nodwydd drwy criw cyfan o ffabrig, 392 00:17:30,690 --> 00:17:32,950 pethau rhywsut clymu gyda'i gilydd, gall yr un modd 393 00:17:32,950 --> 00:17:35,550 rydym gydag awgrymiadau, fel y incarnated gan saethau yma, 394 00:17:35,550 --> 00:17:38,550 fath o wau petryalau unigol hyn 395 00:17:38,550 --> 00:17:41,780 drwy effeithiol gan ddefnyddio pwyntydd nesaf i bob rhif sy'n 396 00:17:41,780 --> 00:17:46,065 yn cyfeirio at ryw rhif nesaf, y tynnu sylw at, yn ei dro, mae rhai rhif nesaf? 397 00:17:46,065 --> 00:17:47,940 Felly, mewn geiriau eraill, yr hyn os ydym eisiau mewn gwirionedd 398 00:17:47,940 --> 00:17:49,820 i weithredu rhywbeth fel hyn? 399 00:17:49,820 --> 00:17:53,610 Wel yn anffodus, petryalau hyn, o leiaf yr un gyda 9, 17, 22, 400 00:17:53,610 --> 00:17:57,040 ac yn y blaen, bellach mae'r rhain yn sgwariau braf gyda rhifau sengl. 401 00:17:57,040 --> 00:17:59,960 Y gwaelod, petryal o dan 9, er enghraifft, 402 00:17:59,960 --> 00:18:04,330 cynrychioli'r hyn y dylai fod yn pwyntydd, 32 darnau. 403 00:18:04,330 --> 00:18:09,460 Nawr, dydw i ddim yn ymwybodol o unrhyw fath ddata eto yn C sy'n rhoi nid yn unig yn int chi 404 00:18:09,460 --> 00:18:11,630 ond mae pwyntydd yn gyfan gwbl. 405 00:18:11,630 --> 00:18:15,020 >> Felly beth yw'r ateb os ydym am i ddyfeisio ateb ein hunain i hyn? 406 00:18:15,020 --> 00:18:15,760 Yeah? 407 00:18:15,760 --> 00:18:16,640 >> CYNULLEIDFA: [Anghlywadwy] 408 00:18:16,640 --> 00:18:17,360 >> DAVID J. Malan: Beth sy'n bod? 409 00:18:17,360 --> 00:18:17,880 >> CYNULLEIDFA: Strwythur newydd. 410 00:18:17,880 --> 00:18:19,590 >> DAVID J. Malan: Yeah, felly pam peidiwch â ni greu strwythur newydd, 411 00:18:19,590 --> 00:18:20,920 neu yn C, mae struct? 412 00:18:20,920 --> 00:18:25,990 Rydym wedi gweld structs o'r blaen, os yn fyr, lle rydym yn ymdrin â strwythur i fyfyrwyr 413 00:18:25,990 --> 00:18:27,780 fel hyn, a gafodd enw a thŷ. 414 00:18:27,780 --> 00:18:31,980 Yn Pset 3 breakout ddefnyddiwyd gennych yn ei gyfanrwydd criw o GRect a GOvals structs-- 415 00:18:31,980 --> 00:18:34,810 bod Stanford a grëwyd i Gwybodaeth clwstwr gyda'i gilydd. 416 00:18:34,810 --> 00:18:38,580 Felly beth os ydym yn cymryd hyn un syniad o y geiriau allweddol "typedef" a "struct," 417 00:18:38,580 --> 00:18:42,890 ac yna mae rhai pethau penodol i fyfyrwyr-, ac esblygu hyn i mewn i'r canlynol: 418 00:18:42,890 --> 00:18:46,210 typedef struct node-- a'r nod yw dim ond gwyddoniaeth gyfrifiadurol generig iawn 419 00:18:46,210 --> 00:18:49,980 dymor am rywbeth mewn strwythur data, cynhwysydd mewn strwythur data. 420 00:18:49,980 --> 00:18:53,900 Mae nod allaf hawlio yn mynd i gael mae n int, yn hollol syml, 421 00:18:53,900 --> 00:18:58,810 ac yna ychydig yn fwy gryptig, yr ail linell, nod struct * nesaf. 422 00:18:58,810 --> 00:19:01,300 Ond mewn termau llai technegol, beth yw bod ail linell 423 00:19:01,300 --> 00:19:02,980 o god y tu mewn i'r braces cyrliog? 424 00:19:02,980 --> 00:19:03,737 Yeah? 425 00:19:03,737 --> 00:19:04,851 >> CYNULLEIDFA: [Anghlywadwy] 426 00:19:04,851 --> 00:19:06,600 DAVID J. Malan: A pwyntydd i'r nôd arall. 427 00:19:06,600 --> 00:19:09,910 Felly rhaid cyfaddef, cystrawen ychydig yn cryptig. 428 00:19:09,910 --> 00:19:13,250 Ond os ydych yn darllen yn llythrennol, nesaf yw enw'r newidyn. 429 00:19:13,250 --> 00:19:14,410 Beth yw ei fath ddata? 430 00:19:14,410 --> 00:19:18,206 Mae'n ychydig o verbose y tro hwn, ond mae'n y math nôd struct *. 431 00:19:18,206 --> 00:19:22,960 Unrhyw amser yr ydym wedi gweld seren rywbeth, bod yn golygu ei fod yn pwyntydd i'r math data. 432 00:19:22,960 --> 00:19:26,810 Felly nesaf yn ôl pob golwg yn bwyntydd at nod struct. 433 00:19:26,810 --> 00:19:28,310 >> Yn awr, beth yw nod struct? 434 00:19:28,310 --> 00:19:31,044 Wel, yn sylwi ydych yn gweld rhai un geiriau ar gornel dde uchaf. 435 00:19:31,044 --> 00:19:33,960 Ac yn wir, yr ydych hefyd yn gweld y gair "Nod" i lawr yma ar waelod chwith. 436 00:19:33,960 --> 00:19:35,640 Ac mae hyn yn mewn gwirionedd yn unig yw hwylustod. 437 00:19:35,640 --> 00:19:39,930 Sylwch fod yn ein diffiniad myfyrwyr mae y gair "myfyriwr" unwaith yn unig. 438 00:19:39,930 --> 00:19:42,510 Ac mae hynny oherwydd myfyriwr Nid yw gwrthrych yn hunan-cyfeiriadol. 439 00:19:42,510 --> 00:19:45,340 Does dim byd y tu mewn o fyfyriwr y mae angen i bwyntio i fyfyriwr arall, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 Byddai hynny'n fath o rhyfedd yn y byd go iawn. 442 00:19:47,630 --> 00:19:50,880 >> Ond gyda nod mewn cysylltiedig rhestr, rydym yn ei wneud am gael nod 443 00:19:50,880 --> 00:19:53,970 i fod yn cyfeiriadol i wrthrych tebyg. 444 00:19:53,970 --> 00:19:57,900 Ac felly yn sylwi na fydd y newid yma yw union beth sydd y tu mewn i'r braces cyrliog. 445 00:19:57,900 --> 00:20:00,800 Ond rydym yn ychwanegu y gair "nod" ar y brig yn ogystal ag 446 00:20:00,800 --> 00:20:02,930 ychwanegu at y gwaelod yn lle "myfyrwyr." 447 00:20:02,930 --> 00:20:06,000 Ac mae hyn yn unig yw manylion technegol fel eu bod, unwaith eto, eich strwythur data 448 00:20:06,000 --> 00:20:11,380 Gall fod yn hunan-cyfeiriadol, fel bod Gall nod bwyntio at nod o'r fath arall. 449 00:20:11,380 --> 00:20:13,840 >> Felly beth mae hyn yn y pen draw mynd i olygu i ni? 450 00:20:13,840 --> 00:20:17,560 Wel, un, y pethau y tu mewn yn cynnwys ein nod. 451 00:20:17,560 --> 00:20:19,360 Mae hyn yn beth i fyny yma, dde uchaf, yn unig yw hynny 452 00:20:19,360 --> 00:20:20,860 hynny, unwaith eto, gallwn gyfeirio at ein hunain. 453 00:20:20,860 --> 00:20:23,401 Ac yna y stwff pellaf, er bod nod yn derm newydd, 454 00:20:23,401 --> 00:20:25,500 efallai, mae'n dal i fod yr un fath â myfyrwyr a beth 455 00:20:25,500 --> 00:20:27,520 oedd o dan y cwfl yn SPL. 456 00:20:27,520 --> 00:20:31,095 >> Felly, os ydym yn awr yn awyddus i ddechrau weithredu'r rhestr cysylltiedig, 457 00:20:31,095 --> 00:20:33,220 sut y gallem cyfieithu rhywbeth fel hyn i cod? 458 00:20:33,220 --> 00:20:35,350 Wel, gadewch i ni weld enghraifft o raglen sy'n 459 00:20:35,350 --> 00:20:36,840 mewn gwirionedd yn defnyddio rhestr gysylltiedig. 460 00:20:36,840 --> 00:20:40,870 Ymhlith cod dosbarthu heddiw yn rhaglen o'r enw Rhestr Zero. 461 00:20:40,870 --> 00:20:44,980 Ac os wyf yn rhedeg hyn yr wyf yn creu super GUI syml, Rhyngwyneb Defnyddiwr Graffigol, 462 00:20:44,980 --> 00:20:46,460 ond mae'n wirioneddol yn unig printf. 463 00:20:46,460 --> 00:20:50,930 Ac yn awr yr wyf wedi rhoi fy hun ychydig o fwydlen options-- Ddilea, Mewnosod, Chwilio, 464 00:20:50,930 --> 00:20:51,750 a Traverse. 465 00:20:51,750 --> 00:20:52,630 Ac Ymadael. 466 00:20:52,630 --> 00:20:55,970 Mae'r rhain yn weithrediadau unig gyffredin ar strwythur data a elwir yn rhestr gyswllt. 467 00:20:55,970 --> 00:20:58,409 >> Yn awr, Dileu yn mynd i dileu nifer o'r rhestr. 468 00:20:58,409 --> 00:21:00,200 Mewnosod yn mynd i ychwanegu mae nifer at y rhestr. 469 00:21:00,200 --> 00:21:02,181 Chwilio yn mynd i edrych am rif yn y rhestr. 470 00:21:02,181 --> 00:21:04,930 Ac Traverse yn unig yw ffordd ffansi o ddweud, cerdded drwy'r rhestr, 471 00:21:04,930 --> 00:21:06,245 ei hargraffu, ond dyna ni. 472 00:21:06,245 --> 00:21:07,720 Peidiwch â newid mewn unrhyw ffordd. 473 00:21:07,720 --> 00:21:08,570 >> Felly gadewch i ni roi cynnig ar hyn. 474 00:21:08,570 --> 00:21:10,160 Gadewch i ni fynd yn ei flaen a math 2. 475 00:21:10,160 --> 00:21:12,710 Ac yna yr wyf i'n mynd i rhowch y rhif, dywedwch 9. 476 00:21:12,710 --> 00:21:13,620 Enter. 477 00:21:13,620 --> 00:21:17,480 Ac yn awr fy rhaglen yn unig raglennu i ddweud, rhestr yn awr 9. 478 00:21:17,480 --> 00:21:20,190 Yn awr, os wyf yn mynd yn ei flaen a yn Mewnosod eto, gadewch 479 00:21:20,190 --> 00:21:23,680 i mi fynd yn ei flaen ac yn chwyddo allan a theipiwch yn 17. 480 00:21:23,680 --> 00:21:25,770 Nawr mae fy rhestr yw 9, ac yna 17. 481 00:21:25,770 --> 00:21:27,750 Os byddaf yn gwneud mewnosoder eto, gadewch i hepgor un. 482 00:21:27,750 --> 00:21:32,400 Yn hytrach na 22, yn unol â'r darlun rydym wedi bod yn edrych ar fan hyn, gadewch i mi neidio ymlaen 483 00:21:32,400 --> 00:21:34,630 a rhowch yn ei le 26 nesaf. 484 00:21:34,630 --> 00:21:36,230 Felly dw i'n mynd i deipio 26. 485 00:21:36,230 --> 00:21:37,755 Mae'r rhestr fel yr wyf yn disgwyl. 486 00:21:37,755 --> 00:21:40,630 Ond yn awr, dim ond i weld os y cod hwn yn mynd i fod yn hyblyg, gadewch i mi yn awr 487 00:21:40,630 --> 00:21:43,520 math 22, a oedd o leiaf yn gysyniadol, os ydym yn 488 00:21:43,520 --> 00:21:46,520 gan gadw i'r hyn didoli, sydd yn wir mynd i fod yn gôl arall ar hyn o bryd, 489 00:21:46,520 --> 00:21:48,690 Dylai fynd i mewn rhwng 17 a 26. 490 00:21:48,690 --> 00:21:50,270 Felly, yr wyf daro Chofnoda. 491 00:21:50,270 --> 00:21:51,380 Yn wir, mae hynny'n gweithio. 492 00:21:51,380 --> 00:21:54,950 Ac felly yn awr gadewch i mi mewnosoder y diwethaf, fesul y llun, 34. 493 00:21:54,950 --> 00:21:55,450 >> Mae pob hawl. 494 00:21:55,450 --> 00:21:58,980 Felly, am y tro, gadewch i mi nodi y Dileu a Traverse a Chwilio yn ei wneud, 495 00:21:58,980 --> 00:21:59,760 mewn gwirionedd, yn gweithio. 496 00:21:59,760 --> 00:22:04,180 Yn wir, os wyf yn Chwilio rhedeg, gadewch i ni chwilio am y rhif 22, Enter. 497 00:22:04,180 --> 00:22:05,010 Canfu 22. 498 00:22:05,010 --> 00:22:07,580 Felly dyna beth y mae hyn rhaglen Rhestr Zero yn ei wneud. 499 00:22:07,580 --> 00:22:10,230 >> Ond beth sy'n digwydd mewn gwirionedd ar hynny yn gweithredu hyn? 500 00:22:10,230 --> 00:22:14,530 Wel, yn gyntaf efallai y byddwn wedi, ac yn wir Oes gennyf, ffeil o'r enw list0.h. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 Ac yn rhywle yn mae hyn yn llinell, typedef, nod struct, 503 00:22:20,690 --> 00:22:24,850 Yna, yr wyf wedi fy braces cyrliog, int n, ac Yna struct-- beth oedd y diffiniad? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Nod Struct nesaf. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 Felly mae angen i'r seren. 508 00:22:31,045 --> 00:22:33,420 Nawr yn dechnegol rydym yn cael i mewn i yr arfer o dynnu hynny yma. 509 00:22:33,420 --> 00:22:35,670 Efallai y byddwch yn gweld gwerslyfrau a cyfeiriadau ar-lein yn ei wneud yno. 510 00:22:35,670 --> 00:22:36,660 Mae'n swyddogaethol cyfwerth. 511 00:22:36,660 --> 00:22:37,980 Mewn gwirionedd, mae hyn yn ychydig yn fwy nodweddiadol. 512 00:22:37,980 --> 00:22:40,563 Ond byddaf yn gyson â'r hyn gwnaethom y tro diwethaf a gwneud hyn. 513 00:22:40,563 --> 00:22:42,350 Ac yna yn olaf, yr wyf i'n mynd i wneud hyn. 514 00:22:42,350 --> 00:22:45,550 >> Felly, mewn ffeil header rhywle, mewn list0.h 515 00:22:45,550 --> 00:22:49,200 heddiw yw diffiniad struct hwn, ac efallai rhai pethau eraill. 516 00:22:49,200 --> 00:22:52,580 Yn y cyfamser yn list0c mae mynd i fod ychydig o bethau. 517 00:22:52,580 --> 00:22:54,740 Ond rydym ni'n mynd i ddim ond cychwyn ac nid gorffen hyn. 518 00:22:54,740 --> 00:22:59,690 List0.h yn ffeil yr wyf am i gynnwys yn fy ffeil C. 519 00:22:59,690 --> 00:23:03,910 Ac yna ar ryw adeg rwy'n mynd i gael int, prif, annilys. 520 00:23:03,910 --> 00:23:06,530 Ac yna yr wyf i'n mynd i cael rhywfaint o i-wneud yn fan hyn. 521 00:23:06,530 --> 00:23:10,620 Rwyf hefyd yn mynd i gael prototeip, fel ddi-rym, chwilio, int, 522 00:23:10,620 --> 00:23:13,610 n, y mae eu pwrpas mewn bywyd yw i chwilio am elfen. 523 00:23:13,610 --> 00:23:18,310 Ac yna i lawr yma i'n hawlio yn cod heddiw, yn ddi-rym, chwilio, int, n, 524 00:23:18,310 --> 00:23:21,020 dim hanner colon ond braces cyrliog agored. 525 00:23:21,020 --> 00:23:25,049 Ac yn awr yr wyf am i chwilio rhywsut ar gyfer elfen yn y rhestr hon. 526 00:23:25,049 --> 00:23:27,340 Ond nid oes gennym ddigon o gwybodaeth ar y sgrin eto. 527 00:23:27,340 --> 00:23:29,800 Mae gen i nad yw mewn gwirionedd yn cynrychioli y rhestr ei hun. 528 00:23:29,800 --> 00:23:33,070 Felly, un ffordd y gallem gweithredu rhestr gysylltiedig mewn rhaglen 529 00:23:33,070 --> 00:23:37,520 yw wyf yn fath o eisiau gwneud rhywbeth fel ddatgan rhestr gysylltiedig fyny yma. 530 00:23:37,520 --> 00:23:40,520 Er hwylustod, dw i'n mynd i wneud hyn yn fyd-eang, er bod yn ein bod yn gyffredinol 531 00:23:40,520 --> 00:23:41,645 Ni ddylai wneud hyn gormod. 532 00:23:41,645 --> 00:23:43,260 Ond bydd yn symleiddio'r yr enghraifft hon. 533 00:23:43,260 --> 00:23:45,890 Felly, yr wyf am ddatgan restr cysylltu fan hyn. 534 00:23:45,890 --> 00:23:47,010 Nawr, sut y gallwn wneud hynny? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> Dyma y llun o restr cysylltiedig. 537 00:23:50,750 --> 00:23:53,030 Ac nid wyf yn ei wneud mewn gwirionedd yn gwybod ar hyn o bryd sut y 538 00:23:53,030 --> 00:23:56,710 Rydw i'n mynd i fynd ati i gynrychioli cymaint o bethau ag un yn unig 539 00:23:56,710 --> 00:23:58,040 amrywiol yn y cof. 540 00:23:58,040 --> 00:23:59,160 Ond yn meddwl yn ôl eiliad. 541 00:23:59,160 --> 00:24:00,830 Mae hyn i gyd o amser rydym wedi cael llinynnau, yr ydym wedyn yn 542 00:24:00,830 --> 00:24:02,913 datgelu i fod yn araeau o cymeriadau, yr ydym wedyn yn 543 00:24:02,913 --> 00:24:05,740 datgelu i ddim ond fod yn pwyntydd i gymeriad cyntaf 544 00:24:05,740 --> 00:24:08,890 mewn amrywiaeth o gymeriadau sy'n cael ei derfynu nwl. 545 00:24:08,890 --> 00:24:13,530 Felly, gan y rhesymeg, a gyda hyn llun math o hadu eich meddyliau, 546 00:24:13,530 --> 00:24:17,964 yr hyn y mae angen i ni mewn gwirionedd yn ysgrifennu yn ein cod i gynrychioli rhestr cysylltiedig? 547 00:24:17,964 --> 00:24:21,130 Faint o'r wybodaeth hon a oes angen i ddal yn y cod C, fyddech chi'n ei ddweud? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 Yeah? 550 00:24:23,154 --> 00:24:24,738 >> CYNULLEIDFA: Mae arnom angen pwyntydd i nod. 551 00:24:24,738 --> 00:24:26,237 DAVID J. Malan: A pwyntydd at nod. 552 00:24:26,237 --> 00:24:29,320 Yn arbennig, a oedd yn nod y byddai eich greddfau fod i gadw pwyntydd i? 553 00:24:29,320 --> 00:24:30,026 >> CYNULLEIDFA: Y nôd cyntaf. 554 00:24:30,026 --> 00:24:31,942 >> DAVID J. Malan: Yeah, yn ôl pob tebyg dim ond y cyntaf. 555 00:24:31,942 --> 00:24:34,030 Ac yn sylwi, y cyntaf nod yn siâp gwahanol. 556 00:24:34,030 --> 00:24:37,690 Mae'n dim ond hanner maint y struct, am ei fod yn wir, dim ond pwyntydd. 557 00:24:37,690 --> 00:24:44,650 Felly, beth allwch chi wir yn ei wneud yw datgan rhestr cysylltiedig i fod o fath nôd *. 558 00:24:44,650 --> 00:24:47,780 A gadewch i ni jyst alw yn gyntaf ac yn ymgychwyn i null. 559 00:24:47,780 --> 00:24:49,910 Felly null, unwaith eto, yn dod i mewn i'r darlun yma. 560 00:24:49,910 --> 00:24:53,620 Nid yn unig yn cael ei ddefnyddio null fel fel arbennig Gwerth gyfnewid am bethau fel getstring 561 00:24:53,620 --> 00:24:57,770 a malloc, null hefyd y sero bwyntydd, mae'r diffyg pwyntydd, 562 00:24:57,770 --> 00:24:58,430 os mynnwch. 563 00:24:58,430 --> 00:25:00,309 'I jyst yn golygu dim byd eto fan hyn. 564 00:25:00,309 --> 00:25:02,100 Yn awr gyntaf, gallwn i wedi Gelwir unrhyw beth hwn. 565 00:25:02,100 --> 00:25:04,200 Gallwn fod wedi ei alw "rhestr" neu unrhyw nifer o bethau eraill. 566 00:25:04,200 --> 00:25:06,960 Ond dw i'n galw yn "gyntaf" fel bod mae llinellau i fyny ar y darlun hwn. 567 00:25:06,960 --> 00:25:10,280 Felly, yn union fel llinyn yn gallu cael eu cynrychioli gyda chyfeiriad ei beit cyntaf, 568 00:25:10,280 --> 00:25:11,280 felly gall rhestr cysylltiedig. 569 00:25:11,280 --> 00:25:13,480 A byddwn yn gweld data arall strwythurau yn cael eu cynrychioli 570 00:25:13,480 --> 00:25:16,700 gyda dim ond un pwyntydd, 32-bit saeth, pwyntio 571 00:25:16,700 --> 00:25:18,740 yn y nod cyntaf un yn y strwythur. 572 00:25:18,740 --> 00:25:20,340 >> Ond yn awr gadewch i ni rhagweld problem. 573 00:25:20,340 --> 00:25:23,230 Os ydw i'n cofio yn unig yn fy rhaglen y cyfeiriad 574 00:25:23,230 --> 00:25:27,220 y nod cyntaf, y cyntaf Petryal yn y strwythur data, 575 00:25:27,220 --> 00:25:31,760 yr hyn a oedd gan fod yn wir am y gwell gweithrediad y gweddill fy rhestr? 576 00:25:31,760 --> 00:25:35,820 Beth yw manylion allweddol sy'n mynd er mwyn sicrhau bod hyn yn gweithio mewn gwirionedd? 577 00:25:35,820 --> 00:25:39,250 A thrwy "mewn gwirionedd yn gweithio" Rwy'n yn golygu, yn debyg iawn i llinyn, 578 00:25:39,250 --> 00:25:42,180 gadael i ni fynd o gymeriad cyntaf yn enw'r Davin i'r ail, 579 00:25:42,180 --> 00:25:44,755 i'r trydydd, i'r bedwerydd, at y diwedd un, 580 00:25:44,755 --> 00:25:47,880 sut rydym yn gwybod pan fyddwn ni'n ar y diwedd o restr cysylltiedig sy'n edrych fel hyn? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 Pan mae'n null. 583 00:25:50,660 --> 00:25:53,640 Ac yr wyf wedi cynrychioli y math hwn o fel fel gallai peiriannydd trydan, 584 00:25:53,640 --> 00:25:56,420 gyda'r sylfaen bach symbol, o ryw fath. 585 00:25:56,420 --> 00:25:58,246 Ond mae hynny'n ei olygu yw null yn yr achos hwn. 586 00:25:58,246 --> 00:26:00,370 Gallwch dynnu unrhyw nifer o ffyrdd, ond mae awdur hwn 587 00:26:00,370 --> 00:26:02,800 ddigwyddodd i ddefnyddio'r symbol hwn yma. 588 00:26:02,800 --> 00:26:06,260 >> Ar yr amod ein bod yn stringing pob un o'r nodau hyn at ei gilydd, 589 00:26:06,260 --> 00:26:08,600 Dim ond cofio ble yr un cyntaf yw, cyn belled 590 00:26:08,600 --> 00:26:11,760 wrth i ni rhoi symbol arbennig yn y nôd olaf un yn y rhestr, 591 00:26:11,760 --> 00:26:15,130 a byddwn yn defnyddio null, oherwydd dyna hyn sydd gennym ar gael i ni, 592 00:26:15,130 --> 00:26:16,480 rhestr hon yn gyflawn. 593 00:26:16,480 --> 00:26:20,190 A hyd yn oed os mai dim ond rhoi i chi pwyntydd yr elfen gyntaf, chi, y rhaglennydd, 594 00:26:20,190 --> 00:26:22,486 yn sicr gael mynediad at y gweddill ohono. 595 00:26:22,486 --> 00:26:24,360 Ond gadewch i ni gadael i'ch meddyliau crwydro ychydig bach, 596 00:26:24,360 --> 00:26:26,140 os nad ydynt yn barod eithaf wandered-- beth sydd 597 00:26:26,140 --> 00:26:28,723 mynd i fod yr amser yn rhedeg o dod o hyd i unrhyw beth yn y rhestr hon? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 Damn ei, 'i' O fawr o n, sydd ddim yn ddrwg, i fod yn deg. 600 00:26:33,470 --> 00:26:34,800 Ond mae'n llinol. 601 00:26:34,800 --> 00:26:37,980 Yr ydym wedi rhoi'r gorau pa nodwedd o araeau drwy symud mwy 602 00:26:37,980 --> 00:26:43,130 tuag at y llun yma o ddeinamig gwehyddu gyda'i gilydd neu nodau cysylltiedig? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 Rydym wedi rhoi'r gorau mynediad ar hap. 605 00:26:46,687 --> 00:26:48,770 Amrywiaeth yn braf oherwydd popeth yn fathemategol 606 00:26:48,770 --> 00:26:50,340 yn gefn wrth gefn wrth gefn wrth gefn. 607 00:26:50,340 --> 00:26:52,370 Er bod y darlun hwn edrych yn bert, a hyd yn oed 608 00:26:52,370 --> 00:26:55,830 er ei fod yn edrych fel nodau hyn yn cael eu gwasgaru'n 'n glws ar wahân, mewn gwirionedd 609 00:26:55,830 --> 00:26:56,830 gallent fod yn unrhyw le. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99, mae'r rhain Gallai nodau fod unrhyw le. 611 00:27:01,590 --> 00:27:05,960 Oherwydd bod malloc yn dyrannu cof oddi wrth y domen, ond yn unrhyw le yn y domen. 612 00:27:05,960 --> 00:27:09,080 Dydych chi ddim o reidrwydd yn gwybod ei fod yn mynd i fod yn gefn wrth gefn wrth gefn. 613 00:27:09,080 --> 00:27:12,460 Ac felly y llun hwn mewn gwirionedd yn ddim yn mynd i fod yn eithaf hon 'n bert. 614 00:27:12,460 --> 00:27:16,140 >> Felly, mae'n mynd i gymryd ychydig o yn gweithio i weithredu'r swyddogaeth hon. 615 00:27:16,140 --> 00:27:17,880 Felly gadewch i ni weithredu nawr chwiliad. 616 00:27:17,880 --> 00:27:20,250 A byddwn yn gweld y math o ffordd glyfar o wneud hyn. 617 00:27:20,250 --> 00:27:24,660 Felly, os wyf yn swyddogaeth chwilio a Rydw i'n rhoi amrywiol, cyfanrif n 618 00:27:24,660 --> 00:27:28,490 i chwilio am, mae angen i mi wybod y cystrawen newydd i edrych y tu mewn 619 00:27:28,490 --> 00:27:32,400 strwythur sy'n tynnu sylw at, i ddod o hyd n. 620 00:27:32,400 --> 00:27:33,210 Felly gadewch i ni wneud hyn. 621 00:27:33,210 --> 00:27:36,030 >> Felly, cyntaf i mi i'n mynd i fynd ymlaen a datgan nod *. 622 00:27:36,030 --> 00:27:39,400 Ac yr wyf i'n mynd i alw yn pwyntydd, dim ond drwy confensiwn. 623 00:27:39,400 --> 00:27:41,710 Ac yr wyf i'n mynd i ymgychwyn i gyntaf. 624 00:27:41,710 --> 00:27:43,770 Ac yn awr y gallaf wneud hyn mewn nifer o ffyrdd. 625 00:27:43,770 --> 00:27:45,436 Ond dw i'n mynd i gymryd ymagwedd gyffredin. 626 00:27:45,436 --> 00:27:50,180 Er nad pwyntydd yn hafal i null, ac mae hynny'n cystrawen dilys. 627 00:27:50,180 --> 00:27:54,550 A 'i jyst yn golygu gwneud y canlynol, felly ar yr amod nad ydych yn pwyntio at ddim byd. 628 00:27:54,550 --> 00:27:55,800 Beth ydw i am ei wneud? 629 00:27:55,800 --> 00:28:01,939 >> Os yw n pwyntydd dot, gadewch i mi ddod yn ôl at hynny, equals-- hafal beth? 630 00:28:01,939 --> 00:28:03,105 Pa werth ydw i'n chwilio? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 Y n union a basiwyd mewn. 633 00:28:06,590 --> 00:28:09,020 Felly dyma nodwedd arall o C a llawer o ieithoedd. 634 00:28:09,020 --> 00:28:13,705 Er bod y strwythur a elwir yn nod Mae gan werth a n, hollol gyfreithlon 635 00:28:13,705 --> 00:28:17,530 hefyd i gael dadl lleol neu amrywiol o'r enw n. 636 00:28:17,530 --> 00:28:20,085 Oherwydd hyd yn oed yr ydym, gyda llygaid dynol, yn gallu gwahaniaethu 637 00:28:20,085 --> 00:28:22,087 n bod hyn yn ôl pob tebyg wahanol i n hwn. 638 00:28:22,087 --> 00:28:23,420 Oherwydd bod y gystrawen yn wahanol. 639 00:28:23,420 --> 00:28:26,211 Rydych chi wedi got a dot ac pwyntydd, tra bod yr un yma Nid oes y fath beth. 640 00:28:26,211 --> 00:28:27,290 Felly, mae hyn yn iawn. 641 00:28:27,290 --> 00:28:29,120 Hynny'n iawn eu galw yr un pethau. 642 00:28:29,120 --> 00:28:32,380 >> Os wyf yn ydych yn dod o hyd i hyn, rwy'n mynd i eisiau i wneud rhywbeth 643 00:28:32,380 --> 00:28:35,000 hoffi gyhoeddi ein bod yn dod o hyd n. 644 00:28:35,000 --> 00:28:37,930 A byddwn yn gadael hynny fel sylwadau neu cod pseudocode. 645 00:28:37,930 --> 00:28:40,190 Else, a dyma y rhan ddiddorol, beth 646 00:28:40,190 --> 00:28:47,320 ydw i am ei wneud os bydd y nôd presennol Nid yw cynnwys n fy mod yn poeni am? 647 00:28:47,320 --> 00:28:50,700 Sut ydw i'n cyrraedd y canlynol? 648 00:28:50,700 --> 00:28:53,710 Os yw fy mys yn y hyn o bryd yw PTR, ac mae'n 649 00:28:53,710 --> 00:28:55,920 pwyntio at ba bynnag cyntaf yn pwyntio at, 650 00:28:55,920 --> 00:28:59,290 sut ydw i'n symud fy mys at y nod nesaf yn y cod? 651 00:28:59,290 --> 00:29:01,915 Wel, beth yw'r briwsion bara rydym yn mynd i ddilyn yn yr achos hwn? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 CYNULLEIDFA: [Anghlywadwy]. 654 00:29:04,380 --> 00:29:05,630 DAVID J. Malan: Yeah, felly nesaf. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 Felly, os byddaf yn mynd yn ôl at fy cod yma, yn wir, rwy'n 657 00:29:09,824 --> 00:29:12,990 mynd i fynd yn ei flaen a dweud pwyntydd, a oedd yn yn unig yw variable-- dros dro 'i' 658 00:29:12,990 --> 00:29:15,320 enw rhyfedd, ptr, ond 'i' yn union fel temp-- 659 00:29:15,320 --> 00:29:19,234 Rydw i'n mynd i osod pwyntydd gyfartal i ba bynnag pwyntydd yw-- 660 00:29:19,234 --> 00:29:22,150 ac unwaith eto, mae hyn yn mynd i fod yn ychydig bygi ar gyfer dot moment-- nesaf. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 Mewn geiriau eraill, yr wyf i'n mynd i gymryd fy bys sydd wedi pwyntio at nod hwn 663 00:29:26,550 --> 00:29:31,247 yma ac yr wyf i'n mynd i ddweud, eich bod yn gwybod yr hyn, cymerwch olwg ar y cae nesaf 664 00:29:31,247 --> 00:29:33,330 ac yn symud eich bys i beth bynnag mae'n pwyntio at. 665 00:29:33,330 --> 00:29:35,163 Ac mae hyn yn mynd i ailadrodd, ailadrodd, dro ar ôl tro. 666 00:29:35,163 --> 00:29:37,630 Ond pan mae fy mys rhoi'r gorau i wneud unrhyw beth o gwbl? 667 00:29:37,630 --> 00:29:40,095 Cyn gynted ag yr hyn y llinell o god yn cychwyn? 668 00:29:40,095 --> 00:29:40,970 CYNULLEIDFA: [Anghlywadwy] 669 00:29:40,970 --> 00:29:43,060 DAVID J. Malan: Os yw pwynt tra Nid pwyntydd yn hafal i null. 670 00:29:43,060 --> 00:29:44,900 Ar ryw adeg fy mys yn mynd i fod yn pwyntio at null 671 00:29:44,900 --> 00:29:47,070 ac yr wyf i'n mynd i wireddu dyna ddiwedd y rhestr hon. 672 00:29:47,070 --> 00:29:48,910 Yn awr, mae hyn yn ychydig yn gorwedd gwyn ar gyfer symlrwydd. 673 00:29:48,910 --> 00:29:51,580 Mae'n ymddangos bod hyd yn oed er ein bod newydd eu dysgu nodiant hwn dot 674 00:29:51,580 --> 00:29:55,220 gyfer strwythurau, nid pwyntydd yn struct. 675 00:29:55,220 --> 00:29:56,580 ptr yw beth? 676 00:29:56,580 --> 00:29:58,350 Dim ond i fod yn fwy nitpicky. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 Mae'n pwyntydd i nod. 679 00:30:01,360 --> 00:30:03,120 Dyw hi ddim yn nod ynddo'i hun. 680 00:30:03,120 --> 00:30:06,650 Os oedd gen i ddim seren yma, pwyntydd absolutely-- ei fod yn nod. 681 00:30:06,650 --> 00:30:08,650 Mae hyn yn debyg i un wythnos datganiad o newidyn, 682 00:30:08,650 --> 00:30:10,120 er bod y gair "nod" yn newydd. 683 00:30:10,120 --> 00:30:13,860 >> Ond, cyn gynted ag y byddwn yn cyflwyno seren, 'i' bellach yn pwyntydd i nod. 684 00:30:13,860 --> 00:30:17,960 Ac yn anffodus ni allwch ddefnyddio'r y dot nodiant ar gyfer pwyntydd. 685 00:30:17,960 --> 00:30:21,070 Mae'n rhaid i chi ddefnyddio'r saeth nodiant, sydd, yn drawiadol, 686 00:30:21,070 --> 00:30:23,470 yw unrhyw ddarn y tro cyntaf cystrawen yn edrych 'n athrylithgar. 687 00:30:23,470 --> 00:30:25,245 Mae hyn yn llythrennol yn edrych fel saeth. 688 00:30:25,245 --> 00:30:26,370 Ac felly mae hynny'n beth da. 689 00:30:26,370 --> 00:30:28,995 Ac i lawr fan hyn yn llythrennol edrych fel saeth. 690 00:30:28,995 --> 00:30:31,870 Felly yr wyf yn credu mai dyna'r la-- Nid wyf yn ei wneud meddwl fy mod yn or-ymrwymo Yma-- wyf 691 00:30:31,870 --> 00:30:34,120 credu mai dyna'r darn newydd ddiwethaf cystrawen rydyn ni'n mynd i weld. 692 00:30:34,120 --> 00:30:36,500 Ac diolch byth, mae'n wir ychydig yn fwy 'n athrylithgar. 693 00:30:36,500 --> 00:30:40,090 >> Yn awr, ar gyfer y rhai ohonoch sydd Efallai y byddai'n well yn yr hen ffordd, 694 00:30:40,090 --> 00:30:42,550 gallwch barhau i ddefnyddio'r dot nodiant. 695 00:30:42,550 --> 00:30:45,380 Ond, fel y dydd Llun sgwrs, rydym yn gyntaf 696 00:30:45,380 --> 00:30:50,530 angen i chi fynd yno, ewch i hynny mynd i'r afael, ac yna gael mynediad i'r cae. 697 00:30:50,530 --> 00:30:51,897 Felly, mae hyn hefyd yn gywir. 698 00:30:51,897 --> 00:30:53,730 A dweud y gwir, mae hyn yn ychydig yn fwy bedantig. 699 00:30:53,730 --> 00:30:56,530 Rydych yn ei ddweud yn llythrennol, Dadgyfeirio y pwyntydd ac yn mynd yno. 700 00:30:56,530 --> 00:30:59,320 Yna cydio .n, y cae a elwir yn n. 701 00:30:59,320 --> 00:31:01,370 Ond dweud y gwir, does neb eisiau i deipio neu ddarllen hwn. 702 00:31:01,370 --> 00:31:03,620 Ac felly y byd dyfeisio y nodiant saeth, a oedd yn 703 00:31:03,620 --> 00:31:06,980 yn gyfwerth, union yr un fath, 'i' jyst siwgr cystrawennol. 704 00:31:06,980 --> 00:31:10,570 Felly, yn ffordd ffansi o ddweud hyn edrych yn well, neu'n edrych yn symlach. 705 00:31:10,570 --> 00:31:12,296 >> Felly, yn awr yr wyf i'n mynd i wneud un peth arall. 706 00:31:12,296 --> 00:31:15,420 Dw i'n mynd i ddweud "egwyl" unwaith dwi wedi ddarganfuwyd ei fod felly nid wyf yn cadw yn chwilio amdano. 707 00:31:15,420 --> 00:31:17,620 Ond mae hyn yn hanfod o swyddogaeth chwilio. 708 00:31:17,620 --> 00:31:21,710 Ond mae'n llawer haws, yn y pen draw, nid i gerdded drwy'r cod. 709 00:31:21,710 --> 00:31:25,570 Mae hyn yn wir yn y gweithredu ffurfiol o chwilio yn y cod dosbarthu heddiw. 710 00:31:25,570 --> 00:31:30,530 Mae'n siŵr gen i nad yw mewnosodiad yn arbennig o hwyl i gerdded trwy 711 00:31:30,530 --> 00:31:33,180 ar eu golwg, ac nid yw dileu, hyd yn oed ond ar ddiwedd y dydd 712 00:31:33,180 --> 00:31:35,460 maent yn berwi i lawr i deg heuristics syml. 713 00:31:35,460 --> 00:31:36,330 >> Felly gadewch i ni wneud hyn. 714 00:31:36,330 --> 00:31:39,250 Os wnewch chi helpu hiwmor mi yma, i ddim dod â criw o beli straen. 715 00:31:39,250 --> 00:31:40,620 Yr wyf yn dod â criw o rifau. 716 00:31:40,620 --> 00:31:46,562 A gallem gael dim ond ychydig o wirfoddolwyr i gynrychioli 9, 17, 20, 22, 29, a 34? 717 00:31:46,562 --> 00:31:48,270 Felly, yn y bôn mae pawb pwy sydd yma heddiw. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 Dyna oedd un, dau, tri, pedwar, pump, chwech o bobl. 720 00:31:52,760 --> 00:31:55,740 Ac yr wyf wedi cael cais i go-- weld, dim un yn y cefn yn codi eu dwylo. 721 00:31:55,740 --> 00:32:01,910 OK, un, dau, tri, pedwar, five-- gadewch i mi llwytho balance-- chwech. 722 00:32:01,910 --> 00:32:03,051 OK, byddwch chwech yn dod ymlaen i fyny. 723 00:32:03,051 --> 00:32:04,050 Bydd angen pobl eraill arnom. 724 00:32:04,050 --> 00:32:05,460 Rydym yn dod â peli straen ychwanegol. 725 00:32:05,460 --> 00:32:08,200 Ac os ydych yn allai, am dim ond hyn o bryd, llinell 726 00:32:08,200 --> 00:32:10,490 eich hunain i fyny yn unig fel hyn llun yma. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> Mae pob hawl. 729 00:32:15,959 --> 00:32:17,125 Gadewch i ni weld, beth yw eich enw? 730 00:32:17,125 --> 00:32:17,550 >> CYNULLEIDFA: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> DAVID J. Malan: Andrew, rydych yn rhif 9. 732 00:32:18,800 --> 00:32:19,540 Neis i gwrdd â chi. 733 00:32:19,540 --> 00:32:20,400 Yma byddwch yn mynd. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 CYNULLEIDFA: Jen. 736 00:32:22,176 --> 00:32:22,662 DAVID J. Malan: Jen. 737 00:32:22,662 --> 00:32:23,162 Dafydd. 738 00:32:23,162 --> 00:32:23,765 Rhif 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 Ie? 741 00:32:25,450 --> 00:32:26,400 >> CYNULLEIDFA: Rwy'n Julia. 742 00:32:26,400 --> 00:32:26,980 >> DAVID J. Malan: Julia, David. 743 00:32:26,980 --> 00:32:27,545 Rhif 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 CYNULLEIDFA: Cristnogol. 746 00:32:29,340 --> 00:32:30,715 DAVID J. Malan: Cristnogol, David. 747 00:32:30,715 --> 00:32:31,541 Rhif 22. 748 00:32:31,541 --> 00:32:32,040 A? 749 00:32:32,040 --> 00:32:32,649 >> CYNULLEIDFA: JP. 750 00:32:32,649 --> 00:32:33,440 DAVID J. Malan: JP. 751 00:32:33,440 --> 00:32:34,880 Rhif 29. 752 00:32:34,880 --> 00:32:37,080 Felly, mynd yn ei flaen a chael in-- Uh oh. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 Standby. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 Oes gan unrhyw un marciwr? 760 00:32:43,682 --> 00:32:44,890 CYNULLEIDFA: Mae gen i Sharpie. 761 00:32:44,890 --> 00:32:45,660 DAVID J. Malan: Rydych yn cael Sharpie? 762 00:32:45,660 --> 00:32:46,159 OK. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 Ac oes unrhyw un yn cael darn o bapur? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 Achub y ddarlith. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 Dewch ar. 769 00:32:55,362 --> 00:32:56,320 CYNULLEIDFA: Rydym wedi got it. 770 00:32:56,320 --> 00:32:57,600 DAVID J. Malan: Rydym yn cael ei? 771 00:32:57,600 --> 00:32:58,577 Mae pob hawl, diolch i chi. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 Yma rydym yn mynd. 774 00:33:02,520 --> 00:33:03,582 A oedd hyn yn oddi wrthych? 775 00:33:03,582 --> 00:33:04,540 Yr ydych newydd achub y dydd. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 Felly 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 Mae pob hawl. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 Yr wyf gamsillafu 29, ond yn OK. 782 00:33:14,890 --> 00:33:15,720 Fynd yn ei flaen. 783 00:33:15,720 --> 00:33:18,114 Mae pob hawl, byddaf yn rhoi i chi eich pen yn ôl am ennyd. 784 00:33:18,114 --> 00:33:19,280 Felly, rydym wedi Folks hyn yma. 785 00:33:19,280 --> 00:33:20,330 Gadewch i ni gael un arall. 786 00:33:20,330 --> 00:33:23,750 Gabe, ydych chi eisiau i chwarae yr elfen gyntaf yma? 787 00:33:23,750 --> 00:33:25,705 Bydd angen i chi Rydym i bwynt ar y rhain Folks ddirwy. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 Felly 9, 17, 20, 22, didoli o 29, ac yna 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 A wnaethom ni colli rhywun? 792 00:33:33,325 --> 00:33:33,950 Mae gen i 34. 793 00:33:33,950 --> 00:33:36,730 Lle did-- OK, sydd eisiau bod yn 34? 794 00:33:36,730 --> 00:33:37,605 OK, yn dod ar i fyny, 34. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 Mae pob hawl, bydd hyn yn yn werth y uchafbwynt. 797 00:33:41,220 --> 00:33:41,550 Beth yw eich enw? 798 00:33:41,550 --> 00:33:42,040 >> CYNULLEIDFA: Peter. 799 00:33:42,040 --> 00:33:43,456 >> DAVID J. Malan: Peter, yn dod ar i fyny. 800 00:33:43,456 --> 00:33:46,810 Mae pob hawl, felly dyma criw cyfan o nodau. 801 00:33:46,810 --> 00:33:49,060 Mae pob un ohonoch guys yn cynrychioli un o'r petryalau hyn. 802 00:33:49,060 --> 00:33:51,930 Ac Gabe, mae'r ychydig yn od dyn allan, yn cynrychioli gyntaf. 803 00:33:51,930 --> 00:33:54,850 Felly ei pwyntydd ychydig yn llai ar y sgrin na phawb arall. 804 00:33:54,850 --> 00:33:58,120 Ac yn yr achos hwn, bob un o'ch chwith dwylo yn mynd i naill ai dynnu i lawr, 805 00:33:58,120 --> 00:34:01,085 a thrwy hynny yn cynrychioli null, felly dim ond absenoldeb pwyntydd, 806 00:34:01,085 --> 00:34:03,210 neu mae'n mynd i gael ei bwyntio ar nod nesaf i chi. 807 00:34:03,210 --> 00:34:05,440 >> Felly, ar hyn o bryd os ydych yn addurno eich hunain fel y llun 808 00:34:05,440 --> 00:34:07,585 yma, mynd yn ei flaen a phwynt ar ei gilydd, gyda Gabe 809 00:34:07,585 --> 00:34:11,030 yn pwyntio penodol ar rhif 9 i gynrychioli'r rhestr. 810 00:34:11,030 --> 00:34:14,050 OK, a rhif 34, eich llaw chwith ond dylid ei bwyntio at y llawr. 811 00:34:14,050 --> 00:34:15,750 >> Iawn, felly mae hwn yn rhestr cysylltiedig. 812 00:34:15,750 --> 00:34:17,580 Felly, mae hyn yn y senario dan sylw. 813 00:34:17,580 --> 00:34:20,210 Ac yn wir, mae hyn yn gynrychioliadol o ddosbarth o broblemau 814 00:34:20,210 --> 00:34:21,929 y gallai byddwch yn ceisio datrys â chod. 815 00:34:21,929 --> 00:34:25,020 Byddwch am mewnosod yn y pen draw elfen newydd i mewn i'r rhestr. 816 00:34:25,020 --> 00:34:27,494 Yn yr achos hwn, rydym yn mynd i ceisiwch osod y rhif 55. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 Ond mae mynd i fod achosion gwahanol i'w hystyried. 819 00:34:30,860 --> 00:34:34,409 Ac yn wir, mae hyn yn mynd i fod yn un o'r darlun mawr-fwyd parod yma, yw, 820 00:34:34,409 --> 00:34:35,659 beth yw'r gwahanol achosion. 821 00:34:35,659 --> 00:34:39,120 Beth yw'r gwahanol os bydd amodau neu canghennau y gallai eich rhaglen yn cael? 822 00:34:39,120 --> 00:34:42,024 >> Wel, mae nifer yr ydych yn ceisio ei mewnosoder, yr ydym yn gwybod yn awr i fod yn 55, 823 00:34:42,024 --> 00:34:44,650 ond os nad oeddech yn gwybod o flaen llaw, mae'n debygol iawn 824 00:34:44,650 --> 00:34:47,840 disgyn i o leiaf dri sefyllfaoedd posibl. 825 00:34:47,840 --> 00:34:49,717 Lle y gallai elfen newydd fod? 826 00:34:49,717 --> 00:34:51,050 CYNULLEIDFA: A'r pen neu'r canol. 827 00:34:51,050 --> 00:34:54,150 DAVID J. Malan: Ar y diwedd, yn y canol, neu ar y dechrau. 828 00:34:54,150 --> 00:34:56,650 Felly yr wyf yn honni mae o leiaf dair problem y mae angen i ddatrys. 829 00:34:56,650 --> 00:34:58,691 Gadewch i ddewis beth sy'n bosibl gellid dadlau y symlaf 830 00:34:58,691 --> 00:35:01,090 un, lle mae'r elfen newydd yn perthyn ar y dechrau. 831 00:35:01,090 --> 00:35:04,040 Felly dw i'n mynd i gael cod eithaf fel chwilio, yr wyf newydd ei ysgrifennu. 832 00:35:04,040 --> 00:35:07,670 Ac yr wyf i'n mynd i gael ptr, sy'n 'N annhymerus' yn cynrychioli yma gyda fy mys, 833 00:35:07,670 --> 00:35:08,370 fel arfer. 834 00:35:08,370 --> 00:35:12,430 >> A chofiwch, pa werth wnaethom ni ymgychwyn ptr i? 835 00:35:12,430 --> 00:35:15,300 Felly, rydym yn ymgychwyn iddo null lle cyntaf. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 Ond yna yr hyn a wnaethom ni ar ôl i ni Roedd y tu mewn i'n swyddogaeth chwilio? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 Rydym yn gosod ei bod yn hafal i yn gyntaf, nad yw'n golygu gwneud hyn. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 Os byddaf yn gosod ptr cyfartal i yn gyntaf, beth Dylai fy llaw mewn gwirionedd yn pwyntio at? 842 00:35:30,570 --> 00:35:31,070 Hawl. 843 00:35:31,070 --> 00:35:33,290 Felly os Gabe ac yr wyf yn mynd i fod gwerthoedd cyfartal yma, 844 00:35:33,290 --> 00:35:34,760 mae angen i ddau bwynt yn rhif 9. 845 00:35:34,760 --> 00:35:36,420 >> Felly, roedd hyn yn ddechrau ein stori. 846 00:35:36,420 --> 00:35:38,700 Ac yn awr mae hyn yn unig yw syml, er bod y gystrawen yn newydd. 847 00:35:38,700 --> 00:35:40,580 Gysyniadol dyma chwiliad llinol yn unig. 848 00:35:40,580 --> 00:35:42,750 Yw 55 sy'n hafal i 9? 849 00:35:42,750 --> 00:35:45,559 Neu yn hytrach, gadewch i ni ddweud yn llai na 9. 850 00:35:45,559 --> 00:35:47,600 Gan fy mod i'n ceisio chyfrif i maes ble i roi 55. 851 00:35:47,600 --> 00:35:51,270 Llai na 9, yn llai na 17, llai na 20, yn llai na 22, yn llai na 29, 852 00:35:51,270 --> 00:35:52,510 llai na 34, dim. 853 00:35:52,510 --> 00:35:55,080 Felly nawr rydym yn rhag ofn un o leiaf dri. 854 00:35:55,080 --> 00:35:59,910 >> Os ydw i eisiau i fewnosod 55 dros fan hyn, beth llinellau o angen cod i gael eu gweithredu? 855 00:35:59,910 --> 00:36:01,890 Sut mae llun hwn o Mae angen i bobl newid? 856 00:36:01,890 --> 00:36:03,181 Beth ddylwn i ei wneud gyda fy llaw chwith? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 Dylai hyn fod yn null y cychwyn, oherwydd fy mod ar ddiwedd y rhestr. 859 00:36:07,360 --> 00:36:09,318 A beth ddylai ddigwydd yma gyda Pedr, oedd hi? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 Yn amlwg mae'n mynd i dynnu sylw i mi. 862 00:36:12,430 --> 00:36:15,580 Felly yr wyf yn honni mae o leiaf dwy linell o god yn y cod sampl o heddiw 863 00:36:15,580 --> 00:36:18,570 mae hynny'n mynd i weithredu hyn senario o ychwanegu 55 yn y gynffon. 864 00:36:18,570 --> 00:36:20,950 A gallwn gael rhywun hop i fyny a dim ond yn cynrychioli 55? 865 00:36:20,950 --> 00:36:22,200 Mae pob hawl, chi yw'r 55 newydd. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> Felly nawr beth os yw'r nesaf senario yn dod ar hyd, 868 00:36:27,054 --> 00:36:29,720 ac rydym am mewnosoder ar y dechrau neu bennaeth rhestr hon? 869 00:36:29,720 --> 00:36:31,100 A beth yw eich enw, rhif 55? 870 00:36:31,100 --> 00:36:31,420 >> CYNULLEIDFA: Jack. 871 00:36:31,420 --> 00:36:32,295 >> DAVID J. Malan: Jack? 872 00:36:32,295 --> 00:36:33,585 OK, neis i gwrdd â chi. 873 00:36:33,585 --> 00:36:34,210 Croeso ar fwrdd. 874 00:36:34,210 --> 00:36:36,640 Felly nawr rydym yn mynd i mewnosoder, dyweder, mae'r rhif 5. 875 00:36:36,640 --> 00:36:39,840 Dyma yr ail achos yr tri rydym yn dod i fyny gyda blaen. 876 00:36:39,840 --> 00:36:43,050 Felly os 5 yn perthyn ar y dechrau, gadewch i ni weld sut yr ydym yn canfod bod allan. 877 00:36:43,050 --> 00:36:46,310 Rwy'n ymgychwyn fy ptr pwyntydd i rif 9 eto. 878 00:36:46,310 --> 00:36:49,140 Ac yr wyf yn sylweddoli, oh, 5 yn llai na 9. 879 00:36:49,140 --> 00:36:50,880 Felly atgyweiria y llun hwn ar ein rhan. 880 00:36:50,880 --> 00:36:54,820 Eu dwylo, Gabe neu Dewi or-- beth yw enw'r rhif 9 yn? 881 00:36:54,820 --> 00:36:55,740 >> CYNULLEIDFA: Jen. 882 00:36:55,740 --> 00:36:58,406 >> DAVID J. Malan: hands-- Jen yn pa rai o'n dwylo angen newid? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 Iawn, felly Gabe pwyntio at yr hyn nawr? 885 00:37:00,970 --> 00:37:01,640 Arnaf. 886 00:37:01,640 --> 00:37:02,750 Fi yw'r nod newydd. 887 00:37:02,750 --> 00:37:04,870 Felly, 'n annhymerus' jyst fath o symud yma i weld ei fod yn weledol. 888 00:37:04,870 --> 00:37:06,435 Ac yn y cyfamser beth ddylwn i dynnu sylw at hynny? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 Still lle dwi'n pwyntio. 891 00:37:09,020 --> 00:37:10,000 Felly dyna ni. 892 00:37:10,000 --> 00:37:13,717 Felly dim ond mewn gwirionedd un llinell o chyfyngderau cod y mater arbennig hwn, byddai'n ymddangos. 893 00:37:13,717 --> 00:37:14,800 Mae pob hawl, felly dyna dda. 894 00:37:14,800 --> 00:37:17,580 A gall rhywun fod yn dalfan ar gyfer 5? 895 00:37:17,580 --> 00:37:18,080 Dewch ar i fyny. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 Byddwn yn cael y tro nesaf i chi. 898 00:37:21,320 --> 00:37:24,280 >> Mae pob hawl, felly now-- a wrth fynd heibio, yr enwau 899 00:37:24,280 --> 00:37:28,510 Dydw i ddim yn gwneud cyfeiriad penodol at hawl yn awr, pwyntydd pred, pwyntydd rhagflaenydd 900 00:37:28,510 --> 00:37:31,260 a pwyntydd newydd, dyna dim ond yr enwau a roddir 901 00:37:31,260 --> 00:37:35,280 yn y cod sampl i'r awgrymiadau neu fy nwylo sydd wedi fath o bwyntio gwmpas. 902 00:37:35,280 --> 00:37:36,060 Beth yw eich enw? 903 00:37:36,060 --> 00:37:36,700 >> CYNULLEIDFA: Christine. 904 00:37:36,700 --> 00:37:37,100 >> DAVID J. Malan: Christine. 905 00:37:37,100 --> 00:37:38,090 Croeso ar fwrdd. 906 00:37:38,090 --> 00:37:42,180 Mae pob hawl, felly gadewch i ni ystyried nawr senario ychydig yn fwy blino, 907 00:37:42,180 --> 00:37:46,350 lle yr wyf am i fewnosod rhywbeth fel 26 i mewn i hyn. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 Beth? 910 00:37:47,590 --> 00:37:50,510 Mae'r rhain yw-- beth da rydym wedi pen hwn. 911 00:37:50,510 --> 00:37:51,955 Mae pob hawl, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 Pe gallai rhywun gael darn arall o papur yn barod, rhag achos-- pob hawl. 914 00:37:57,570 --> 00:37:58,370 O, diddorol. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 Wel mae hyn yn enghraifft o nam darlith. 917 00:38:02,390 --> 00:38:03,894 Iawn felly beth yw eich enw eto? 918 00:38:03,894 --> 00:38:04,560 CYNULLEIDFA: Julia. 919 00:38:04,560 --> 00:38:07,559 DAVID J. Malan: Julia, allwch chi pop allan ac yn esgus eich bod byth yno? 920 00:38:07,559 --> 00:38:09,040 OK, byth yn digwydd yma. 921 00:38:09,040 --> 00:38:09,680 Diolch yn fawr. 922 00:38:09,680 --> 00:38:12,180 Felly, mae'n debyg ein bod eisiau mewnosod Julia i mewn i'r rhestr gysylltiedig. 923 00:38:12,180 --> 00:38:13,780 Hi yw nifer 20. 924 00:38:13,780 --> 00:38:15,530 Ac wrth gwrs mae hi'n mynd i berthyn yn y 925 00:38:15,530 --> 00:38:17,521 begin-- nid ydynt yn pwyntio at unrhyw beth eto. 926 00:38:17,521 --> 00:38:20,020 Fel y gall eich llaw math o fod yn lawr null neu ryw werth garbage. 927 00:38:20,020 --> 00:38:21,210 Gadewch i ni ddweud y stori gyflym. 928 00:38:21,210 --> 00:38:22,980 Im 'yn pwyntio at rif 5 y tro hwn. 929 00:38:22,980 --> 00:38:23,880 Yna, yr wyf yn gwirio 9. 930 00:38:23,880 --> 00:38:25,130 Yna, yr wyf yn gwirio 17. 931 00:38:25,130 --> 00:38:26,247 Yna, yr wyf yn gwirio 22. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 Ac yr wyf yn sylweddoli, ooh, Julia Mae angen i fynd cyn 22. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 Felly beth sydd angen digwydd? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 Mae angen eu dwylo i newid? 938 00:38:36,910 --> 00:38:38,360 Julia, fy, or-- beth yw eich enw eto? 939 00:38:38,360 --> 00:38:39,230 >> CYNULLEIDFA: Cristnogol. 940 00:38:39,230 --> 00:38:40,060 >> DAVID J. Malan: Cristnogol neu? 941 00:38:40,060 --> 00:38:40,560 >> CYNULLEIDFA: Andy. 942 00:38:40,560 --> 00:38:40,905 >> DAVID J. Malan: Andy. 943 00:38:40,905 --> 00:38:41,654 Christian neu Andy? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Mae angen Andy i bwynt ar? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 Mae pob hawl. 949 00:38:47,840 --> 00:38:48,960 Felly Andy, ydych chi eisiau i bwyntio at Julia? 950 00:38:48,960 --> 00:38:50,120 Ond arhoswch funud. 951 00:38:50,120 --> 00:38:53,260 Yn y stori hyd yn hyn, Fi yw'r math o un 952 00:38:53,260 --> 00:38:56,800 â gofal, yn yr ystyr bod pwyntydd yw'r peth sy'n 953 00:38:56,800 --> 00:38:57,850 symud drwy'r rhestr. 954 00:38:57,850 --> 00:39:00,800 Efallai gennym enw ar gyfer Andy, ond does dim o'r enw Andy newidyn. 955 00:39:00,800 --> 00:39:04,320 Yr unig newidyn arall gennym yw yn gyntaf, sydd wedi ei gynrychioli gan Gabe. 956 00:39:04,320 --> 00:39:07,690 >> Felly, mae hyn mewn gwirionedd pam felly yn hyn nid ydym wedi ei angen hwn. 957 00:39:07,690 --> 00:39:10,846 Ond yn awr ar y sgrin mae sôn eto o pwyntydd pred. 958 00:39:10,846 --> 00:39:11,970 Felly, gadewch i mi fod yn fwy eglur. 959 00:39:11,970 --> 00:39:14,820 Os yw hyn yn pwyntydd, gwell imi cael ychydig yn fwy deallus 960 00:39:14,820 --> 00:39:15,950 am fy iteriad. 961 00:39:15,950 --> 00:39:19,580 Os nad ydych yn meddwl fy mynd drwy fan hyn eto, gan dynnu sylw yma, pwyntio yma. 962 00:39:19,580 --> 00:39:22,500 Ond gadewch i mi fod â pwyntydd pred, pwyntydd rhagflaenydd, dyna 963 00:39:22,500 --> 00:39:24,740 math o pwyntio at y elfen Roeddwn yn unig yn. 964 00:39:24,740 --> 00:39:27,330 Felly, pan fyddaf yn mynd yma, yn awr fy diweddariadau llaw chwith. 965 00:39:27,330 --> 00:39:29,370 Pan fyddaf yn mynd fan hyn fy diweddariadau llaw chwith. 966 00:39:29,370 --> 00:39:33,090 Ac yn awr yr wyf wedi nid yn unig pwyntydd i yr elfen sy'n mynd ar ôl Julia, 967 00:39:33,090 --> 00:39:36,300 Yr wyf yn dal i gael pwyntydd i Andy, yr elfen o'r blaen. 968 00:39:36,300 --> 00:39:39,430 Felly, rydych yn cael mynediad, yn y bôn, briwsion bara, os mynnwch, 969 00:39:39,430 --> 00:39:41,500 i bob un o'r pwyntiau angenrheidiol. 970 00:39:41,500 --> 00:39:43,710 >> Felly, os ydw i'n pwyntio at Andy, a dwi hefyd bwyntio 971 00:39:43,710 --> 00:39:47,105 yn Cristnogol, y mae eu dwylo Dylech yn awr gael ei sylw at y ffaith yn rhywle arall? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 Felly Andy bellach yn gallu pwyntio at Julia. 974 00:39:51,960 --> 00:39:54,460 Gall Julia bellach yn pwyntio at Christian. 975 00:39:54,460 --> 00:39:56,950 Oherwydd y gall hi gopïo fy pwyntydd llaw dde yn. 976 00:39:56,950 --> 00:40:00,044 A bod yn effeithiol yn rhoi i chi yn ôl i'r lle hwn yma. 977 00:40:00,044 --> 00:40:02,460 Felly, yn fyr, er bod hyn yn cymryd i ni fath o am byth 978 00:40:02,460 --> 00:40:04,510 i ddiweddaru gwirionedd yn rhestr gysylltiedig, yn sylweddoli 979 00:40:04,510 --> 00:40:06,580 bod y gweithrediadau yn gymharol syml. 980 00:40:06,580 --> 00:40:10,030 Mae'n o un, dau, tri llinellau o god yn y pen draw. 981 00:40:10,030 --> 00:40:12,780 Ond lapio o amgylch y rhai llinellau o god yn ôl pob tebyg 982 00:40:12,780 --> 00:40:16,350 yn dipyn o resymeg sydd yn effeithiol gofyn y cwestiwn, ble rydym ni? 983 00:40:16,350 --> 00:40:18,970 A ydym ar y dechrau, y canol, neu y diwedd? 984 00:40:18,970 --> 00:40:21,890 >> Yn awr, mae yn sicr rhyw arall gweithrediadau gallem gweithredu. 985 00:40:21,890 --> 00:40:24,880 A lluniau hyn yma yn unig darlunio hyn yr ydym yn unig oedd â phobl. 986 00:40:24,880 --> 00:40:26,080 Beth am symud? 987 00:40:26,080 --> 00:40:30,650 Os ydw i eisiau, er enghraifft, gwared ar y rhif 34 neu 55, 988 00:40:30,650 --> 00:40:34,680 Efallai fy mod yn cael yr un math o god, ond dw i'n mynd i angen un neu ddau gam. 989 00:40:34,680 --> 00:40:36,110 Oherwydd beth sy'n newydd? 990 00:40:36,110 --> 00:40:40,460 Os byddaf yn symud rhywun ar y diwedd, fel rhif 55 ac yna 34, 991 00:40:40,460 --> 00:40:42,995 hyn sydd hefyd yn rhaid i hyn newid gan fy mod yn gwneud hynny? 992 00:40:42,995 --> 00:40:44,870 Mae'n rhaid i mi beidio evict-- beth yw eich enw eto? 993 00:40:44,870 --> 00:40:45,380 >> CYNULLEIDFA: Jack. 994 00:40:45,380 --> 00:40:46,255 >> DAVID J. Malan: Jack. 995 00:40:46,255 --> 00:40:49,770 Rhaid i nid yn unig evict-- Jack rhad ac am ddim i mi, felly yn llythrennol yn galw Jack rhad ac am ddim, neu o leiaf 996 00:40:49,770 --> 00:40:53,530 y pwyntydd yno hefyd, ond erbyn hyn beth sydd angen newid gyda Peter? 997 00:40:53,530 --> 00:40:55,510 Mae ei law yn well dechrau pwyntio i lawr. 998 00:40:55,510 --> 00:40:59,300 Oherwydd cyn gynted ag yr wyf ffoniwch am ddim ar Jack, os yw Pedr yn dal pwyntio at Jack 999 00:40:59,300 --> 00:41:02,530 ac felly yr wyf yn cadw croesi y rhestr a mynediad pwyntydd hwn, 1000 00:41:02,530 --> 00:41:05,650 dyna pryd mae ein cyfaill hen segmentu Efallai fai mewn gwirionedd yn cicio i mewn. 1001 00:41:05,650 --> 00:41:07,860 Oherwydd ein bod wedi cael y cof yn ôl i Jack. 1002 00:41:07,860 --> 00:41:10,760 >> Gallwch aros yno lletchwith am ddim ond ennyd. 1003 00:41:10,760 --> 00:41:13,410 Oherwydd ein bod wedi dim ond cwpl gweithrediadau terfynol i'w hystyried. 1004 00:41:13,410 --> 00:41:15,600 Cael gwared ar y pennaeth y rhestr, neu'r beginning-- ac mae hyn yn un o 1005 00:41:15,600 --> 00:41:16,349 ychydig yn blino. 1006 00:41:16,349 --> 00:41:19,640 Oherwydd bod yn rhaid i gwybod bod Gabe yn fath o arbennig yn y rhaglen hon. 1007 00:41:19,640 --> 00:41:21,440 Oherwydd yn wir, mae wedi ei pwyntydd hun. 1008 00:41:21,440 --> 00:41:24,860 Dyw e ddim yn unig yn cael ei sylw at y ffaith yn, fel y mae bron pawb arall yma. 1009 00:41:24,860 --> 00:41:28,112 >> Felly pan fydd y pennaeth y rhestr yn dileu, y mae eu dwylo angen newid nawr? 1010 00:41:28,112 --> 00:41:29,070 Beth yw eich enw eto? 1011 00:41:29,070 --> 00:41:29,450 >> CYNULLEIDFA: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> DAVID J. Malan: Rwy'n ofnadwy mewn enwau, yn ôl pob golwg. 1013 00:41:31,408 --> 00:41:34,011 Felly, Christine a Gabe, y mae eu dwylo angen ei newid 1014 00:41:34,011 --> 00:41:36,510 pan fyddwn yn ceisio cael gwared Christine, rhif 5, oddi wrth y llun? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 Iawn, felly gadewch i ni wneud Gabe. 1017 00:41:38,820 --> 00:41:40,950 Gabe yn mynd i bwynt, yn ôl pob tebyg, yn rhif 9. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 Ond beth ddylai ddigwydd nesaf? 1020 00:41:44,642 --> 00:41:46,600 CYNULLEIDFA: Christine dylai yn null [Anghlywadwy]. 1021 00:41:46,600 --> 00:41:50,244 DAVID J. Malan: Iawn, dylem yn ôl pob tebyg make-- Clywais "null" rhywle. 1022 00:41:50,244 --> 00:41:51,410 CYNULLEIDFA: Null ac yn rhydd iddi. 1023 00:41:51,410 --> 00:41:51,855 DAVID J. Malan: nwl beth? 1024 00:41:51,855 --> 00:41:53,074 CYNULLEIDFA: Null ac yn rhydd iddi. 1025 00:41:53,074 --> 00:41:54,490 DAVID J. Malan: Null ac yn rhydd iddi. 1026 00:41:54,490 --> 00:41:55,422 Felly, mae hyn yn hawdd iawn. 1027 00:41:55,422 --> 00:41:58,380 Ac mae'n berffaith eich bod yn awr yn fath o sefyll yno, nad ydynt yn perthyn. 1028 00:41:58,380 --> 00:42:00,430 Oherwydd eich bod wedi bod ddatgysylltu oddi ar y rhestr. 1029 00:42:00,430 --> 00:42:02,820 Rydych chi wedi bod yn effeithiol amddifad o'r rhestr. 1030 00:42:02,820 --> 00:42:07,770 Ac felly rydym yn well wedi ffoniwch am ddim yn awr ar Christine i roi'r cof ôl. 1031 00:42:07,770 --> 00:42:10,240 Fel arall, bob tro yr ydym yn dileu nod o'r rhestr 1032 00:42:10,240 --> 00:42:14,230 efallai y byddwn yn gwneud y rhestr byrrach, ond nid mewn gwirionedd yn gostwng 1033 00:42:14,230 --> 00:42:15,096 maint yn y cof. 1034 00:42:15,096 --> 00:42:17,720 Ac felly os ydym yn cadw adio a gan ychwanegu, gan ychwanegu pethau at y rhestr, 1035 00:42:17,720 --> 00:42:19,280 Efallai fy cyfrifiadur yn cael arafach ac yn arafach ac yn arafach, 1036 00:42:19,280 --> 00:42:21,740 oherwydd fy mod yn rhedeg allan o cof, hyd yn oed os nad wyf mewn gwirionedd yn 1037 00:42:21,740 --> 00:42:25,580 ddefnyddio bytes Christine yn o gof anymore. 1038 00:42:25,580 --> 00:42:28,500 >> Felly, yn y diwedd, mae eraill senarios, o dynnu course-- 1039 00:42:28,500 --> 00:42:30,640 yn y canol, cael gwared ar y diwedd, fel y gwelsom. 1040 00:42:30,640 --> 00:42:32,348 Ond y mwyaf diddorol her yn awr yw 1041 00:42:32,348 --> 00:42:34,770 mynd i fod i ystyried yn union beth yw'r amser yn rhedeg yn. 1042 00:42:34,770 --> 00:42:36,640 Felly, nid yn unig y gallwch chi gadw eich darnau o bapur, os, Gabe, 1043 00:42:36,640 --> 00:42:38,640 Ni fyddech yn meddwl rhoi pawb pêl straen. 1044 00:42:38,640 --> 00:42:42,100 Diolch yn fawr i'n rhestr cysylltiedig chi o wirfoddolwyr yma, os ydych yn gallu. 1045 00:42:42,100 --> 00:42:45,320 >> [Cymeradwyaeth] 1046 00:42:45,320 --> 00:42:46,700 >> DAVID J. Malan: pob hawl. 1047 00:42:46,700 --> 00:42:51,110 Felly, ychydig o dadansoddol cwestiynau hynny, pe gallwn. 1048 00:42:51,110 --> 00:42:59,670 Rydym wedi gweld nodiant hwn o'r blaen, O a omega mawr, arffiniau uchaf 1049 00:42:59,670 --> 00:43:02,520 i nerth is ar y rhedeg amser o ryw algorithm. 1050 00:43:02,520 --> 00:43:04,950 Felly, gadewch i ni ystyried yn unig un neu ddau o gwestiynau. 1051 00:43:04,950 --> 00:43:07,090 >> Un, ac yr ydym yn dweud ei o'r blaen, beth yw'r rhedeg 1052 00:43:07,090 --> 00:43:10,647 amser o chwilio am Rhestr o ran O mawr? 1053 00:43:10,647 --> 00:43:13,480 Beth sydd uchaf yn rhwymo ar y gwaith o redeg amser o chwilio rhestr cysylltiedig 1054 00:43:13,480 --> 00:43:16,340 fel y gweithredu gan ein gwirfoddolwyr yma? 1055 00:43:16,340 --> 00:43:17,820 Mae'n O fawr o n, llinol. 1056 00:43:17,820 --> 00:43:20,630 Oherwydd yn yr achos gwaethaf, yr elfen, fel 55, 1057 00:43:20,630 --> 00:43:23,830 efallai y byddwn yn chwilio am y gallai fod lle Roedd Jack, yr holl ffordd ar y diwedd. 1058 00:43:23,830 --> 00:43:28,250 Ac yn anffodus, yn wahanol arae ni allwn gael ffansi y tro hwn. 1059 00:43:28,250 --> 00:43:31,820 Er bod pob un o'n pobl yn datrys o elfennau bach, 5, 1060 00:43:31,820 --> 00:43:35,900 holl ffordd i fyny at yr elfen mwy, 55, mae hynny'n beth da fel arfer. 1061 00:43:35,900 --> 00:43:38,815 Ond beth mae hynny'n dybiaeth bellach yn caniatáu i ni ei wneud? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 CYNULLEIDFA: [Anghlywadwy] 1064 00:43:40,650 --> 00:43:40,920 DAVID J. Malan: Dweud eto? 1065 00:43:40,920 --> 00:43:41,800 CYNULLEIDFA: Mynediad ar hap. 1066 00:43:41,800 --> 00:43:43,049 DAVID J. Malan: mynediad ar hap. 1067 00:43:43,049 --> 00:43:46,330 Ac yn ei dro mae hyn yn golygu y gallwn ni defnyddio zeros gwan, greddf yn hwy, 1068 00:43:46,330 --> 00:43:49,365 a obviousness o ddefnyddio deuaidd chwilio a rhannu a gorchfygu. 1069 00:43:49,365 --> 00:43:51,240 Oherwydd er ein Gallai pobl yn amlwg 1070 00:43:51,240 --> 00:43:54,610 gweld a oedd Andy neu Christian yn fras yng nghanol y rhestr, 1071 00:43:54,610 --> 00:43:57,670 byddwn ond yn gwybod bod fel cyfrifiadur drwy sgimio y rhestr 1072 00:43:57,670 --> 00:43:59,029 o'r cychwyn cyntaf. 1073 00:43:59,029 --> 00:44:00,570 Felly, rydym wedi rhoi'r gorau bod mynediad ar hap. 1074 00:44:00,570 --> 00:44:04,380 >> O mor fawr o n nawr yw'r uchaf rhwymo ar ein hamser chwilio. 1075 00:44:04,380 --> 00:44:07,920 Beth am omega ein chwiliad? 1076 00:44:07,920 --> 00:44:11,535 Beth yw'r isaf rhwymo ar chwilio am ryw nifer yn y rhestr hon? 1077 00:44:11,535 --> 00:44:12,410 CYNULLEIDFA: [Anghlywadwy] 1078 00:44:12,410 --> 00:44:13,040 DAVID J. Malan: Dweud eto? 1079 00:44:13,040 --> 00:44:13,420 CYNULLEIDFA: Un. 1080 00:44:13,420 --> 00:44:13,800 DAVID J. Malan: Un. 1081 00:44:13,800 --> 00:44:14,760 Amser mor gyson. 1082 00:44:14,760 --> 00:44:17,020 Yn yr achos gorau, Christine yn yn wir, ar ddechrau'r y rhestr. 1083 00:44:17,020 --> 00:44:19,020 Ac rydym yn chwilio am rhif 5, felly rydym yn dod o hyd iddi. 1084 00:44:19,020 --> 00:44:19,787 Felly nid oes llawer mawr. 1085 00:44:19,787 --> 00:44:22,370 Ond mae hi 'got i fod yn yr gan ddechrau o'r rhestr yn yr achos hwn. 1086 00:44:22,370 --> 00:44:23,745 Beth am rywbeth fel Dileu? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 Beth os ydych chi am ddileu elfen? 1089 00:44:26,300 --> 00:44:29,200 Beth sydd uchaf y rhwymo ac isaf rhwymo ar ddileu rhywbeth o cysylltiedig 1090 00:44:29,200 --> 00:44:29,699 rhestru? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 CYNULLEIDFA: [Anghlywadwy] 1093 00:44:36,070 --> 00:44:36,420 DAVID J. Malan: Dweud eto? 1094 00:44:36,420 --> 00:44:37,067 CYNULLEIDFA: n. 1095 00:44:37,067 --> 00:44:38,900 DAVID J. Malan: n yn yn wir y uchaf rhwymo. 1096 00:44:38,900 --> 00:44:41,700 Oherwydd yn yr achos gwaethaf rydym yn ceisio i ddileu Jack, fel rydym yn unig oedd. 1097 00:44:41,700 --> 00:44:43,050 Mae'n holl ffordd ar y diwedd. 1098 00:44:43,050 --> 00:44:45,419 Cymryd ni am byth, neu n camau i ddod o hyd iddo. 1099 00:44:45,419 --> 00:44:46,460 Felly dyna uchaf yn rhwymo. 1100 00:44:46,460 --> 00:44:47,430 Dyna llinol, yn sicr. 1101 00:44:47,430 --> 00:44:50,970 A bod yr achos gorau yn rhedeg amser, neu y terfynau is yn yr achos gorau 1102 00:44:50,970 --> 00:44:51,975 fyddai amser yn gyson. 1103 00:44:51,975 --> 00:44:54,600 Oherwydd efallai rydym yn ceisio dileu Christine, ac rydym yn unig yn cael lwcus 1104 00:44:54,600 --> 00:44:55,558 hi ar y dechrau. 1105 00:44:55,558 --> 00:44:56,350 Nawr arhoswch funud. 1106 00:44:56,350 --> 00:44:59,370 Gabe Roedd hefyd ar y dechrau, ac roedd gennym hefyd i ddiweddaru Gabe. 1107 00:44:59,370 --> 00:45:01,150 Felly nid oedd mai dim ond un cam. 1108 00:45:01,150 --> 00:45:04,210 Felly a yw'n wir gyson amser, yn yr achos gorau, 1109 00:45:04,210 --> 00:45:06,345 i gael gwared ar yr elfen lleiaf? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 Y mae, hyd yn oed er y gallai fod yn ddau, tri, neu hyd yn oed 100 o linellau o god, 1112 00:45:10,960 --> 00:45:14,000 os yw'n yr un nifer o llinellau, nid mewn rhyw dolen, 1113 00:45:14,000 --> 00:45:16,577 ac yn annibynnol o faint o'r rhestr, yn hollol. 1114 00:45:16,577 --> 00:45:18,660 Dileu yr elfen yn ddechrau'r rhestr, 1115 00:45:18,660 --> 00:45:21,940 hyd yn oed os oes rhaid inni ddelio â Gabe, yn dal i fod amser yn gyson. 1116 00:45:21,940 --> 00:45:24,220 >> Felly, mae hyn yn ymddangos fel gam enfawr yn ôl. 1117 00:45:24,220 --> 00:45:27,000 A beth yn wastraff amser os, mewn un wythnos a'r wythnos 1118 00:45:27,000 --> 00:45:30,250 sero oedd gennym, nid yn unig cod pseudocode ond cod gwirioneddol 1119 00:45:30,250 --> 00:45:35,780 i weithredu rhywbeth sy'n log sylfaen n, neu log, yn hytrach, o n, sylfaen 2, 1120 00:45:35,780 --> 00:45:37,150 o ran ei amser rhedeg. 1121 00:45:37,150 --> 00:45:40,710 Felly, pam y byddai'r heck ydym am ddechrau defnyddio rhywbeth fel rhestr cysylltiedig? 1122 00:45:40,710 --> 00:45:41,517 Yeah. 1123 00:45:41,517 --> 00:45:44,022 >> CYNULLEIDFA: Felly, gallwch ychwanegu elfen i'r casgliad. 1124 00:45:44,022 --> 00:45:46,230 DAVID J. Malan: Felly, gallwch ychwanegu elfennau at y rhesi. 1125 00:45:46,230 --> 00:45:47,550 Ac mae hyn hefyd yn thematig. 1126 00:45:47,550 --> 00:45:49,740 A byddwn yn parhau i weld hyn, mae hyn yn fasnach-off, llawer 1127 00:45:49,740 --> 00:45:51,573 fel rydym wedi gweld cyfaddawd gyda'r math uno. 1128 00:45:51,573 --> 00:45:54,606 Gallem mewn gwirionedd gyflymu'r chwilio neu'n didoli, yn hytrach, 1129 00:45:54,606 --> 00:45:57,480 os byddwn yn gwario ychydig yn fwy o ofod a cael darn ychwanegol o cof 1130 00:45:57,480 --> 00:45:58,760 neu arae ar gyfer math uno. 1131 00:45:58,760 --> 00:46:01,270 Ond rydym yn gwario mwy gofod, ond yr ydym yn arbed amser. 1132 00:46:01,270 --> 00:46:04,820 Yn yr achos hwn, rydym yn rhoi'r gorau i amser, ond rydym yn 1133 00:46:04,820 --> 00:46:08,170 cael hyblygrwydd, ddynamiaeth os mynnwch, 1134 00:46:08,170 --> 00:46:10,280 sydd yn dadlau yn nodwedd gadarnhaol. 1135 00:46:10,280 --> 00:46:11,520 >> Rydym ni hefyd yn gwario gofod. 1136 00:46:11,520 --> 00:46:13,710 Ym mha ystyr yw cysylltu rhestru yn ddrutach 1137 00:46:13,710 --> 00:46:15,700 yn nhermau gofod na'r arae? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 Ble mae'r lle ychwanegol yn dod o? 1140 00:46:19,920 --> 00:46:20,460 Yeah? 1141 00:46:20,460 --> 00:46:21,800 >> CYNULLEIDFA: [Anghlywadwy] pwyntydd. 1142 00:46:21,800 --> 00:46:23,310 >> DAVID J. Malan: Yeah, rydym yn hefyd yn cael y pwyntydd. 1143 00:46:23,310 --> 00:46:25,560 Felly mae hyn yn minorly blino yn nad yw bellach mod 1144 00:46:25,560 --> 00:46:27,780 Yr wyf yn storio unig int i gynrychioli int. 1145 00:46:27,780 --> 00:46:30,990 Im 'yn storio yn int ac mae pwyntydd, sydd hefyd yn 32 ddarnau. 1146 00:46:30,990 --> 00:46:33,470 Felly dw i'n llythrennol dyblu faint o le dan sylw. 1147 00:46:33,470 --> 00:46:36,040 Felly dyna cyfaddawd, ond dyna yn achos int. 1148 00:46:36,040 --> 00:46:39,580 Tybiwch nad ydych yn storio int, ond mae'n debyg pob un o'r petryalau hyn 1149 00:46:39,580 --> 00:46:43,290 neu bob un o'r bobl hyn yn cynrychioli gair, gair Saesneg sy'n 1150 00:46:43,290 --> 00:46:46,430 allai fod pum cymeriad, 10 cymeriadau, efallai hyd yn oed yn fwy. 1151 00:46:46,430 --> 00:46:49,940 Yna, dim ond 32 gan ychwanegu mwy o darnau Gallai fod yn llai o dipyn o beth. 1152 00:46:49,940 --> 00:46:52,160 >> Beth os bydd pob un o'r myfyrwyr yn yn yr arddangosiad 1153 00:46:52,160 --> 00:46:55,107 Roedd yn llythrennol structs fyfyrwyr sy'n enwau a thai ac efallai 1154 00:46:55,107 --> 00:46:57,065 rhifau ffôn a Twitter ymdrin ac yn y blaen. 1155 00:46:57,065 --> 00:46:59,564 Felly yr holl o'r meysydd rydym yn dechrau siarad am y diwrnod o'r blaen, 1156 00:46:59,564 --> 00:47:02,410 llawer llai o llawer fawr fel ein nodau yn cael mwy diddorol 1157 00:47:02,410 --> 00:47:05,972 a mawr i wario, eh, yn ychwanegol bwyntydd dim ond er mwyn eu cysylltu â'i gilydd. 1158 00:47:05,972 --> 00:47:07,180 Ond yn wir, mae'n cyfaddawd. 1159 00:47:07,180 --> 00:47:09,560 Ac yn wir, mae'r cod yn mwy cymhleth, fel y wnewch chi helpu 1160 00:47:09,560 --> 00:47:11,770 gweld drwy sgimio drwy yr enghraifft benodol. 1161 00:47:11,770 --> 00:47:14,302 Ond beth os oedd rhywfaint greal sanctaidd yma. 1162 00:47:14,302 --> 00:47:17,010 Beth os nad ydym yn cymryd cam tuag yn ôl, ond yn gam enfawr ymlaen 1163 00:47:17,010 --> 00:47:19,180 a gweithredu data strwythur trwy yr ydym yn 1164 00:47:19,180 --> 00:47:22,870 Gellir dod o hyd i elfennau megis Jack neu Christine neu unrhyw elfennau eraill 1165 00:47:22,870 --> 00:47:25,870 yn y casgliad hwn mewn gwir amser yn gyson? 1166 00:47:25,870 --> 00:47:26,920 Chwilio yn gyson. 1167 00:47:26,920 --> 00:47:28,320 Dileu yn gyson. 1168 00:47:28,320 --> 00:47:29,570 Mewnosod yn gyson. 1169 00:47:29,570 --> 00:47:32,260 Mae pob un o'r gweithrediadau hyn yn gyson. 1170 00:47:32,260 --> 00:47:33,750 Byddai hynny'n ein greal sanctaidd. 1171 00:47:33,750 --> 00:47:36,690 A dyna lle'r ydym yn Bydd codi tro nesaf. 1172 00:47:36,690 --> 00:47:38,600 Welwn ni chi wedyn. 1173 00:47:38,600 --> 00:47:39,371