1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Oke. 3 00:00:11,940 --> 00:00:16,470 Dus dit is CS50, en dit is nu het begin van week drie. 4 00:00:16,470 --> 00:00:19,960 >> Dus tot nu toe, we hebben het schrijven van programma's in C 5 00:00:19,960 --> 00:00:23,210 dat ziet er een beetje zoiets als dit hier. 6 00:00:23,210 --> 00:00:25,470 Dus hebben we een paar kreeg scherpe omvat bovenaan. 7 00:00:25,470 --> 00:00:28,490 We hebben int, belangrijkste, leegte gekregen, en dan is er iets te doen in het midden, 8 00:00:28,490 --> 00:00:30,590 enkele bit van de code binnen van die functie. 9 00:00:30,590 --> 00:00:34,170 Maar belangrijkste is dat we hebben gezegd hier leegte. 10 00:00:34,170 --> 00:00:39,320 Dus leegte, al die tijd, specificeert dat dit programma, wanneer deze wordt uitgevoerd, 11 00:00:39,320 --> 00:00:41,300 kan alleen worden uitgevoerd via de naam. 12 00:00:41,300 --> 00:00:46,330 U kunt geen andere woorden te typen of getallen achter de naam van het programma, wanneer 13 00:00:46,330 --> 00:00:46,830 actief is. 14 00:00:46,830 --> 00:00:51,200 Dus, bijvoorbeeld, als het programma was gecompileerd in een bestand genaamd hello, 15 00:00:51,200 --> 00:00:53,480 je kon ./hello doen, maar dat is het. 16 00:00:53,480 --> 00:00:56,750 >> De enige manier waarop je zou kunnen geven input voor dit programma 17 00:00:56,750 --> 00:00:57,960 is door te bellen naar een functie. 18 00:00:57,960 --> 00:00:59,790 Bijvoorbeeld, welke functie gebruiken we al tot nu toe 19 00:00:59,790 --> 00:01:00,950 om input van de gebruiker te krijgen? 20 00:01:00,950 --> 00:01:02,117 >> PUBLIEK: Get string. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Om draad te krijgen, of krijgen int, of je hebt anderen gezien, 22 00:01:04,700 --> 00:01:07,630 zelfs als je dat nog niet hebt gebruikt, zoals te lange, lange en dergelijke. 23 00:01:07,630 --> 00:01:09,380 Maar stel dat we eigenlijk willen beginnen 24 00:01:09,380 --> 00:01:12,760 het schrijven van programma's die weinig meer zijn veelzijdig, en, eerlijk gezegd, een beetje meer 25 00:01:12,760 --> 00:01:15,090 zoals de commando's die je hebt gekregen, hopelijk, 26 00:01:15,090 --> 00:01:16,550 een beetje gewend. 27 00:01:16,550 --> 00:01:18,560 Zoals cd ruimte Dropbox. 28 00:01:18,560 --> 00:01:20,800 Dit, natuurlijk, veranderingen uw telefoonboek, in de veronderstelling 29 00:01:20,800 --> 00:01:23,590 je bent in het huis van John Harvard directory, om je Dropbox-map. 30 00:01:23,590 --> 00:01:27,380 Ondertussen, een commando als dit maakt een nieuwe directory genaamd pset2, 31 00:01:27,380 --> 00:01:30,290 zoals je misschien al of zal binnenkort voor het probleem set twee. 32 00:01:30,290 --> 00:01:33,970 Maak Hallo, is natuurlijk een commando dat een programma genaamd bouwt hello 33 00:01:33,970 --> 00:01:35,770 van een bestand genaamd hello punt c. 34 00:01:35,770 --> 00:01:39,140 En in elk van deze gevallen, nu, we hebben gehad 35 00:01:39,140 --> 00:01:43,620 geven een argument zogenaamde command line, de knipperende prompt, 36 00:01:43,620 --> 00:01:48,540 dus dat merk weet wat op te bouwen, en zo dat mkdir weet welke map te creëren, 37 00:01:48,540 --> 00:01:51,110 en zodat cd weet waar je naartoe wilt. 38 00:01:51,110 --> 00:01:54,720 Maar tot nu toe houden we zeggen dat de belangrijkste, je standaard functie, 39 00:01:54,720 --> 00:01:58,500 heeft een leegte uitdrukking binnenkant van deze haakjes 40 00:01:58,500 --> 00:02:01,250 wat betekent dat het kan geen argumenten nemen. 41 00:02:01,250 --> 00:02:03,240 >> Dus vanaf vandaag, wat we gaan doen 42 00:02:03,240 --> 00:02:06,270 is, gaan we beginnen dingen ondersteunen als deze zelfs. 43 00:02:06,270 --> 00:02:08,990 In feite, in dit geval, waar je meestal niet handmatig invoeren, 44 00:02:08,990 --> 00:02:11,130 Maken is dit te doen voor ons, zijn er niet 45 00:02:11,130 --> 00:02:15,840 een maar een, twee, drie extra snaren na het programma met de naam 46 00:02:15,840 --> 00:02:16,850 Clang. 47 00:02:16,850 --> 00:02:18,240 Dus hoe kunnen we dit bereiken? 48 00:02:18,240 --> 00:02:20,260 >> Nou, vanaf vandaag, in gevallen waar we willen 49 00:02:20,260 --> 00:02:22,855 om input te geven via het zogenaamde opdrachtregel 50 00:02:22,855 --> 00:02:24,980 we gaan beginnen met het toevoegen hier wat er in yellow-- 51 00:02:24,980 --> 00:02:30,520 leegte te vervangen door int argc komma reeks argv haakje openen haakje sluiten. 52 00:02:30,520 --> 00:02:32,520 Nu is dit interessant voor een paar redenen. 53 00:02:32,520 --> 00:02:35,690 Een, het gaat om ons te laten schrijven programma's die iets dynamischer. 54 00:02:35,690 --> 00:02:37,570 Maar, meer dwingend, het gaat om het openstellen van 55 00:02:37,570 --> 00:02:40,340 Nu een gesprek over wat arrays kan echt 56 00:02:40,340 --> 00:02:43,300 worden gebruikt, wat een tekenreeks echt onder de motorkap, 57 00:02:43,300 --> 00:02:47,320 tot volgende week, wanneer we beginnen met duiken in nog dieper hoe de machine 58 00:02:47,320 --> 00:02:48,590 het maken van al deze dingen werken. 59 00:02:48,590 --> 00:02:51,920 Maar voor nu, laten trekken, misschien een foto. 60 00:02:51,920 --> 00:02:54,950 >> Wanneer u een programma te schrijven met de belangrijkste verklaard 61 00:02:54,950 --> 00:02:58,810 op deze manier, zodat main heeft twee argumenten, een int 62 00:02:58,810 --> 00:03:03,233 en-- welk gegevenstype is het tweede argument? 63 00:03:03,233 --> 00:03:04,529 >> PUBLIEK: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Dus het ziet er op het eerste gezicht alsof het een snaar, maar let op de vierkante haakjes. 66 00:03:09,170 --> 00:03:12,760 Herinneren de laatste keer dat we geïntroduceerd de notie van een array. 67 00:03:12,760 --> 00:03:16,210 En arrays gebruiken vierkante haken in een paar contexten. 68 00:03:16,210 --> 00:03:19,160 Je zou het plein gebruiken beugels in een array gaan 69 00:03:19,160 --> 00:03:22,710 en krijg een bepaald element, zoals beugel 0 of beugel 1 of beugel 2. 70 00:03:22,710 --> 00:03:25,500 Maar we zagen, als het kort, vorige week dat u ook 71 00:03:25,500 --> 00:03:28,790 Gebruik deze vierkante haken te verklaren de grootte van een array, 72 00:03:28,790 --> 00:03:31,790 als je weet van tevoren hoeveel ints of hoeveel strings of wat je 73 00:03:31,790 --> 00:03:32,630 eigenlijk willen. 74 00:03:32,630 --> 00:03:34,790 Zo blijkt er's een derde context here 75 00:03:34,790 --> 00:03:37,890 dat heeft geen nummer binnen van de vierkante haken. 76 00:03:37,890 --> 00:03:41,920 Wanneer u opgeeft, zoals ik hier heb, de naam van iets als argv, 77 00:03:41,920 --> 00:03:44,550 dat is gewoon een mooie manier om zeggend argument vector, welke 78 00:03:44,550 --> 00:03:47,750 is een mooie manier om te zeggen een reeks van argumenten, 79 00:03:47,750 --> 00:03:50,870 haakje openen haakje sluiten gewoon betekent dat je per se niet 80 00:03:50,870 --> 00:03:52,960 van tevoren weten hoe groot de matrix gaat worden, 81 00:03:52,960 --> 00:03:55,070 maar je weet dat het gaat om een ​​array zijn. 82 00:03:55,070 --> 00:03:57,320 Dus als je niet weet wat de nummer zet het niet daar, 83 00:03:57,320 --> 00:04:01,160 voor de open beugel haakje sluiten betekent dat argv is niet een string, 84 00:04:01,160 --> 00:04:03,124 maar een array van strings. 85 00:04:03,124 --> 00:04:05,040 Dus syntactisch, als je denk vorige week terug, 86 00:04:05,040 --> 00:04:09,460 het is zeer vergelijkbaar met zeggen iets als int leeftijden haakje openen, 87 00:04:09,460 --> 00:04:10,984 en dan is er iets daarna. 88 00:04:10,984 --> 00:04:12,150 Dus wat heeft dit eruit? 89 00:04:12,150 --> 00:04:13,399 Laten we nu een foto te trekken. 90 00:04:13,399 --> 00:04:18,756 Dus als je dit programma met Hoofd draaien hebben twee argumenten binnenkant gedefinieerd 91 00:04:18,756 --> 00:04:21,339 van die haakjes, u hoofdzakelijk ten minste twee brokken 92 00:04:21,339 --> 00:04:23,560 geheugen overhandigd aan u onder de motorkap. 93 00:04:23,560 --> 00:04:26,550 Een, zoals ik kom trekt als deze rechthoek, gaat argc genoemd te worden. 94 00:04:26,550 --> 00:04:30,645 En net als een korte samenvatting, wat is het datatype van argc? 95 00:04:30,645 --> 00:04:31,270 Dus het is een int. 96 00:04:31,270 --> 00:04:33,480 Dus een aantal gaat om te gaan in argc-- bochten 97 00:04:33,480 --> 00:04:35,660 dat staat voor argumenten tellen. 98 00:04:35,660 --> 00:04:38,887 Ondertussen heb ik getekend argv als een array. 99 00:04:38,887 --> 00:04:40,970 En ik weet niet echt hoe lang het gaat worden, 100 00:04:40,970 --> 00:04:42,470 dus met het oog op de huidige dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Het zou kunnen krijgen van wat lengte. 102 00:04:43,636 --> 00:04:45,640 Maar ik heb hier afgebeeld ten minste vier rechthoeken. 103 00:04:45,640 --> 00:04:50,970 Dus argv een stuk van het geheugen dat winkels snaar snaar snaar dot dot dot, 104 00:04:50,970 --> 00:04:53,950 en argc is slechts een brok geheugen voor een geheel getal. 105 00:04:53,950 --> 00:04:55,710 >> Dus nu, laten we een beetje nauwkeuriger. 106 00:04:55,710 --> 00:04:59,200 Als, als ik strings in deze array, genaamd 107 00:04:59,200 --> 00:05:03,290 argv, ik wil bij hen te komen individueel, net als vorige week, 108 00:05:03,290 --> 00:05:05,670 we gaan notatie als argv beugel 0 109 00:05:05,670 --> 00:05:07,650 om het eerste wat krijgen een array. 110 00:05:07,650 --> 00:05:10,440 Argv beugel 1 naar het krijgen tweede ding, enzovoort. 111 00:05:10,440 --> 00:05:14,597 De sleutel is hier dat we nog steeds 0 indexed-- we zijn nog aan het tellen vanaf 0. 112 00:05:14,597 --> 00:05:16,430 Dus laten we nu eigenlijk zet iets in deze. 113 00:05:16,430 --> 00:05:21,670 Als ik een programma genaamd compileren hello van een bestand met de naam hello dot c, 114 00:05:21,670 --> 00:05:24,340 en dan heb ik dat programma uit te voeren met dot slash hallo, 115 00:05:24,340 --> 00:05:28,380 wat doet mijn computer, mijn laptop, lijken onder de motorkap 116 00:05:28,380 --> 00:05:31,300 het moment dat ik run dot slash hallo en druk op Enter? 117 00:05:31,300 --> 00:05:33,500 Nou, dit is misschien wel wat we zouden kunnen omschrijven 118 00:05:33,500 --> 00:05:37,010 als de inhoud van uw computer geheugen, of RAM-- Random Access Memory. 119 00:05:37,010 --> 00:05:40,330 Met andere woorden, de computer, een of andere manier voor u op magische wijze, 120 00:05:40,330 --> 00:05:45,360 zet de nummer 1 in argc, AKA argcount, en het brengt letterlijk de string 121 00:05:45,360 --> 00:05:48,200 ./hello in argv beugel 0. 122 00:05:48,200 --> 00:05:51,750 Ik heb geen idee, eerlijk gezegd, wat is in argv beugel 1 of 2 of 3, 123 00:05:51,750 --> 00:05:55,550 want als de gebruiker niet typte iets anders ./hello, 124 00:05:55,550 --> 00:05:58,550 We gaan ervan uit dat deze hoogstwaarschijnlijk vuilnis waarden 125 00:05:58,550 --> 00:05:59,700 zo te zeggen. 126 00:05:59,700 --> 00:06:02,650 Die delen van het geheugen bestaan, maar het is niet aan ons 127 00:06:02,650 --> 00:06:05,710 om te kijken naar hen, omdat de argcount is slechts een. 128 00:06:05,710 --> 00:06:07,870 >> Nu, ondertussen, als ik schrijf een ander programma uit te voeren, 129 00:06:07,870 --> 00:06:12,250 cd, die juister een opdracht in uw knipperende prompt-- cd ruimte 130 00:06:12,250 --> 00:06:17,200 Dropbox-- wanneer ik dat, effectief, wanneer de cd-programma wordt uitgevoerd, argc, 131 00:06:17,200 --> 00:06:22,270 binnenkant van het geheugen van mijn computer, is voor de meest kortste tweede het nummer 2. 132 00:06:22,270 --> 00:06:25,936 En dan argv beugel o heeft cd, argv beugel 1 heeft Dropbox, 133 00:06:25,936 --> 00:06:28,560 en dan natuurlijk het commando voltooit, zodat al dit geheugen 134 00:06:28,560 --> 00:06:30,420 gaat in wezen weg en wordt gebruikt voor iets anders. 135 00:06:30,420 --> 00:06:32,270 En dat is waarom ik zeg slechts een fractie van een seconde. 136 00:06:32,270 --> 00:06:35,720 >> Ondertussen, als we dat doen mkdir pset2, de foto ziet er bijna hetzelfde, 137 00:06:35,720 --> 00:06:37,900 maar met verschillende snaren binnenin argv. 138 00:06:37,900 --> 00:06:42,570 Als ik dat doe clang dash hello hello dot c, hetzelfde idee. 139 00:06:42,570 --> 00:06:47,060 Meer spullen wordt ingevuld voor argv en argc natuurlijk is 4. 140 00:06:47,060 --> 00:06:49,150 Dus met andere woorden, ofschoon deze array 141 00:06:49,150 --> 00:06:52,950 misschien dot dot dot, van sommige variabele lengte, om zo te zeggen, 142 00:06:52,950 --> 00:06:56,720 weet u altijd waar het einde van het is, omdat argc zal u vertellen 143 00:06:56,720 --> 00:07:00,120 op welk punt moet je stoppen te kijken naar elementen in argv. 144 00:07:00,120 --> 00:07:03,660 Je kunt alleen kijken naar vier in totaal in dit geval. 145 00:07:03,660 --> 00:07:06,600 >> Dus laten we nu eens kijken naar, misschien een eenvoudig programma. 146 00:07:06,600 --> 00:07:09,070 Een die gewoon zegt hallo iemand als Zamyla. 147 00:07:09,070 --> 00:07:12,620 Dus ik beweer ik ga een programma te schrijven in slechts een moment via die ik kon doen 148 00:07:12,620 --> 00:07:16,670 ./hello ruimte Zamyla, en dan wil ik mijn programma om uit te printen iets 149 00:07:16,670 --> 00:07:18,520 super-simpels als "hallo, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Nu in het verleden hebben we gebruikt getString. 151 00:07:20,100 --> 00:07:22,850 Dus in het verleden, zelfs indien je nieuw bent in het programmeren bent, 152 00:07:22,850 --> 00:07:27,180 kans groot dat u zou kunnen zweep een programma dat gebruik maakt van getString 153 00:07:27,180 --> 00:07:29,390 en gebruikt vervolgens printf goeiedag te zeggen tegen Zamyla. 154 00:07:29,390 --> 00:07:31,290 Maar laten we niet te gebruiken getString deze tijd. 155 00:07:31,290 --> 00:07:37,510 Laat me maar gaan in de Appliant en weet zijn standaard I O dot h. 156 00:07:37,510 --> 00:07:41,160 Laat me ook CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Int nu de belangrijkste, en nu ben ik niet van plan nietig te doen vandaag. 158 00:07:44,730 --> 00:07:51,200 In plaats daarvan ga ik int argc doen reeks argv geopend beugel dicht beugel, 159 00:07:51,200 --> 00:07:52,640 een aantal niet te specificeren. 160 00:07:52,640 --> 00:07:54,644 En nu hier is mijn zogenaamde te doen. 161 00:07:54,644 --> 00:07:57,560 Wat ik nu ga doen is, ik ben ga een beetje een sprong van het geloof te doen, 162 00:07:57,560 --> 00:08:00,560 Ik ga ervan uit dat de gebruiker ga dit programma correct te gebruiken, 163 00:08:00,560 --> 00:08:04,980 en ik ben gewoon naar doen printf hello,% sn. 164 00:08:04,980 --> 00:08:06,630 Dus niets nieuws. 165 00:08:06,630 --> 00:08:11,470 Maar ik wil nu zetten wat het woord van de types gebruiker achter de naam van het programma. 166 00:08:11,470 --> 00:08:16,970 Dus als ik het doe ./hello ruimte Zamyla, I willen een of andere manier programmatisch toegang 167 00:08:16,970 --> 00:08:20,870 citeer unquote "Zamyla." dus ik kan gaan in mijn betoog vector, 168 00:08:20,870 --> 00:08:25,980 mijn array van strings, en als de opdracht, nogmaals, was ./hello ruimte Zamyla, 169 00:08:25,980 --> 00:08:29,340 Welk nummer moet ik wil hier in argv te zetten? 170 00:08:29,340 --> 00:08:29,840 PUBLIEK: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, omdat beugel 0 blijkt 172 00:08:32,355 --> 00:08:34,230 gaat het worden naam van het programma is, zoals we zagen. 173 00:08:34,230 --> 00:08:37,789 Dus beugel 1 is het eerste woord dat ik, de gebruiker heeft getypt. 174 00:08:37,789 --> 00:08:39,559 Ik ga om te gaan en sla dit. 175 00:08:39,559 --> 00:08:42,830 Ik ga in mijn map te gaan waar ik dit bestand heb geplaatst. 176 00:08:42,830 --> 00:08:44,920 Ik ga doen maken hello 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp IO's. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Wat heb ik verkeerd gedaan? 180 00:08:54,480 --> 00:08:57,270 Ik was verrast mezelf voor slechts een moment daar. 181 00:08:57,270 --> 00:08:58,230 Wat heb ik verkeerd gedaan? 182 00:08:58,230 --> 00:08:59,220 >> PUBLIEK: Naam. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: Het bestand eigenlijk heet hello3.c. 184 00:09:01,767 --> 00:09:03,850 En ik deed dat alleen voor consistentie, want we hebben 185 00:09:03,850 --> 00:09:06,550 had hello.c's in de verleden in de online code. 186 00:09:06,550 --> 00:09:11,550 Dus laten we dit oplossen ./hello beugel dash 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 En nu hebben we gedag, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Ondertussen kan ik dit veranderen naar zijn Rob, of eigenlijk een ander woord. 190 00:09:17,650 --> 00:09:19,230 >> Maar laten we eens kijken naar een hoek geval. 191 00:09:19,230 --> 00:09:24,360 Wat zou je verwachten dat er zal gebeuren als Ik weet niet de naam van iemand typt op alle? 192 00:09:24,360 --> 00:09:25,270 >> PUBLIEK: Fout. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: Er is een fout van een soort, misschien. 194 00:09:27,300 --> 00:09:28,200 Laten we eens kijken. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Dus printf wordt daadwerkelijk een beetje beschermend van ons 198 00:09:33,870 --> 00:09:38,131 hier, en letterlijk afdrukken geopend paren null, maar nog erger dingen kunnen gebeuren. 199 00:09:38,131 --> 00:09:40,130 En alleen maar om aan te tonen iets wat je absoluut 200 00:09:40,130 --> 00:09:42,800 niet moet doen, laten we gaan in hier en beginnen rondneuzen. 201 00:09:42,800 --> 00:09:43,300 Rechts? 202 00:09:43,300 --> 00:09:46,410 Als ik weet dat de foto in geheugen wezen dit 203 00:09:46,410 --> 00:09:52,660 argv beugel 1 heeft Zamyla, argv beugel 0 heeft ./hello of ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Wat is in de beugel 2? 205 00:09:55,400 --> 00:09:58,210 Dus ik kan antwoorden dat vraag ik me af, toch? 206 00:09:58,210 --> 00:10:00,460 Ik kan alleen maar veranderen de 1 naar een 2. 207 00:10:00,460 --> 00:10:07,270 Ik kan nu opnieuw compileren hello 3, ./hello3 Laten we in te zoomen en druk op Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Geen aanhalingsteken. 210 00:10:10,660 --> 00:10:12,540 Interessant. 211 00:10:12,540 --> 00:10:15,530 Dus dat is wel cool om te te zien wat er nog meer in hier. 212 00:10:15,530 --> 00:10:17,130 >> Dus wat is de binnenkant van mijn laptop? 213 00:10:17,130 --> 00:10:20,390 Laten we redden het met beugel 3. 214 00:10:20,390 --> 00:10:25,190 Maak hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Nieuwsgierig. 216 00:10:26,500 --> 00:10:30,560 En laten we nu echt bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Dus dat is echt diep duiken in het geheugen van mijn computer. 218 00:10:34,340 --> 00:10:35,930 50 indexen in. 219 00:10:35,930 --> 00:10:41,950 Dus zorg hello 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Nieuwsgierig. 221 00:10:42,680 --> 00:10:44,660 Oke, nu ben ik gewoon gaat roekeloos krijgen. 222 00:10:44,660 --> 00:10:47,331 Laten we gaan naar 5000. 223 00:10:47,331 --> 00:10:47,830 Oke. 224 00:10:47,830 --> 00:10:49,520 Dus laat me opnieuw te compileren. 225 00:10:49,520 --> 00:10:51,460 Maak hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Nu sommigen van jullie, er zou zijn een gloeilamp afgaat. 229 00:10:59,250 --> 00:11:01,900 Hoeveel van jullie hebben eerder gezien dit bericht? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Ja, waarom? 232 00:11:04,420 --> 00:11:07,250 >> Odds zijn-- en er is anders dingen die dit kan veroorzaken 233 00:11:07,250 --> 00:11:09,730 en duidelijk je in goede company-- we hebben duidelijk 234 00:11:09,730 --> 00:11:11,900 veroorzaakt wat heet een segmentation fault. 235 00:11:11,900 --> 00:11:15,890 En lang verhaal kort te maken voor vandaag, ik een segment van het geheugen aangeraakt 236 00:11:15,890 --> 00:11:17,060 dat ik niet zou moeten hebben. 237 00:11:17,060 --> 00:11:19,970 Wanneer een segment betekent gewoon een brok van het geheugen dat ik niet moeten doen. 238 00:11:19,970 --> 00:11:25,530 Nu de computer garandeert dat als ik lopen ./helloZamyla dat ik argv kan aanraken 239 00:11:25,530 --> 00:11:27,760 zijn beugel 0 en argv beugel 1. 240 00:11:27,760 --> 00:11:32,730 Maar argc waarde 2, dat betekent dat ik ben alleen allowed-- het is een soort van de eer 241 00:11:32,730 --> 00:11:35,180 system-- aan te raken bracket 0 en beugel 1. 242 00:11:35,180 --> 00:11:37,990 Als ik verder ga, is er absoluut gaat geheugen er zijn. 243 00:11:37,990 --> 00:11:40,660 Mijn RAM fysiek bestaan in de computer. 244 00:11:40,660 --> 00:11:42,080 Maar wie weet wat er staat? 245 00:11:42,080 --> 00:11:44,450 Inderdaad, ik ben het uitvoeren van meerdere programma's in een keer. 246 00:11:44,450 --> 00:11:46,910 Ik zou seen-- heb als ik niet Daarbij op Appliant 247 00:11:46,910 --> 00:11:49,937 maar op mijn Mac of PC-- ik zou kunnen hebben gezien de inhoud van de email. 248 00:11:49,937 --> 00:11:52,270 Ik zou een instant hebben gezien boodschap die ik onlangs heb gestuurd. 249 00:11:52,270 --> 00:11:55,390 Iets dat zou kunnen zijn slepende rond in het geheugen 250 00:11:55,390 --> 00:11:59,180 had kunnen worden bereikt door de Deze willekeurige vierkante haakjesnotering. 251 00:11:59,180 --> 00:12:02,850 Of, erger nog, misschien heb je vond een van mijn wachtwoorden 252 00:12:02,850 --> 00:12:05,859 die ik onlangs had getypt in, dat een programma in het geheugen was opgeslagen dat 253 00:12:05,859 --> 00:12:07,900 om me te authenticeren, en dan gewoon een soort van liet het 254 00:12:07,900 --> 00:12:09,910 in RAM totdat ik stop dat programma. 255 00:12:09,910 --> 00:12:12,860 >> En inderdaad, dit is een van het gevaar en een van de bevoegdheden 256 00:12:12,860 --> 00:12:15,980 van het gebruik van een taal als C U heeft vrije toegang 257 00:12:15,980 --> 00:12:18,860 om de volledige inhoud geheugen een programma, 258 00:12:18,860 --> 00:12:21,340 en wat slechteriken kan zelfs doen in die cases-- 259 00:12:21,340 --> 00:12:23,807 vooral wanneer we naar web programmeren 260 00:12:23,807 --> 00:12:26,890 tegen het einde van het semester, zullen we Bezoek deze topic-- wordt rondneuzen, 261 00:12:26,890 --> 00:12:31,660 potentieel, iemands computer geheugen en vind zulke merkwaardige dingen 262 00:12:31,660 --> 00:12:32,570 zoals we zagen er. 263 00:12:32,570 --> 00:12:36,900 Of nog erger, wachtwoorden die hij of zij kan vervolgens gebruiken om slechte dingen te doen. 264 00:12:36,900 --> 00:12:40,240 >> Zo duidelijk dat ik niet heb dit gedaan, omdat vreemde dingen beginnen te gebeuren. 265 00:12:40,240 --> 00:12:42,310 Inderdaad is dit een programma crashen. 266 00:12:42,310 --> 00:12:44,580 Dit zou het equivalent zijn van Mac OS of Windows 267 00:12:44,580 --> 00:12:46,770 een programmavenster gewoon verdwijnen. 268 00:12:46,770 --> 00:12:48,300 Er is een onverwachte fout opgetreden. 269 00:12:48,300 --> 00:12:50,840 In de command-line omgeving We zien iets als dit. 270 00:12:50,840 --> 00:12:54,480 Maar dat is de reden waarom, is dat ik gewoon aan te raken geheugen dat niet van mij. 271 00:12:54,480 --> 00:12:57,090 >> Dus laten we verdedigen tegen deze een iets op een andere manier 272 00:12:57,090 --> 00:12:59,010 door te kijken naar het programma hier. 273 00:12:59,010 --> 00:13:01,000 Dus nogmaals, het skelet dat zagen we earlier-- 274 00:13:01,000 --> 00:13:02,480 en ik heb deze keer int gemarkeerd. 275 00:13:02,480 --> 00:13:05,900 En al die tijd centraal heeft inderdaad terug een waarde. 276 00:13:05,900 --> 00:13:09,120 Alhoewel in de meeste van onze lezing voorbeelden hebben we nog nooit een keer gebruikt 277 00:13:09,120 --> 00:13:10,990 alles in de belangrijkste terug. 278 00:13:10,990 --> 00:13:13,710 We schrijven printf dicht accolade en dat is het. 279 00:13:13,710 --> 00:13:16,500 Maar gratis, wat de compiler gedaan voor u, 280 00:13:16,500 --> 00:13:19,510 effectief, is terug 0 voor u. 281 00:13:19,510 --> 00:13:22,950 Blijkt out-- en het is een beetje counterintuitive-- dat 0 is goed. 282 00:13:22,950 --> 00:13:24,690 Het betekent niet dat valse per se. 283 00:13:24,690 --> 00:13:29,080 0 is goed, en eventuele niet-0 waarde, heeft de wereld besloten, 284 00:13:29,080 --> 00:13:30,619 kan een fout betekenen. 285 00:13:30,619 --> 00:13:32,910 Dus als je ooit hebt geknoeid iets op uw computer, 286 00:13:32,910 --> 00:13:36,600 of een programma is net overleden op u en u een aantal foutieve raam heb gekregen 287 00:13:36,600 --> 00:13:40,360 op uw scherm, zeggende fout negatieve 49 of fout 23-- 288 00:13:40,360 --> 00:13:44,170 sommige schijnbaar willekeurige value-- dat is omdat een programmeur is hard-coded 289 00:13:44,170 --> 00:13:49,370 een waarde als negatief 49 of positief 23 aan een aantal vertegenwoordigen, durf te zeggen, 290 00:13:49,370 --> 00:13:53,340 van 4 miljard mogelijke dingen dat kan het mis in een programma gaan. 291 00:13:53,340 --> 00:13:55,700 >> Dus hoe zou ik nemen voordeel van deze zelf? 292 00:13:55,700 --> 00:13:58,970 Nou, laat ik het openen van een programma dat schreef ik op voorhand, 293 00:13:58,970 --> 00:14:01,450 en snuffel rond in online genaamd hello 4. 294 00:14:01,450 --> 00:14:05,650 En het is bijna identiek, behalve dat het heeft een beetje van de foutcontrole. 295 00:14:05,650 --> 00:14:09,660 In dit geval heb ik weer verklaard belangrijkste als het nemen van twee argumenten, 296 00:14:09,660 --> 00:14:13,180 maar deze keer, op lijn 17, mededeling Ik ben bezig met een beetje een sanity check. 297 00:14:13,180 --> 00:14:17,100 Ik zorg ervoor dat argc gelijk aan gelijk aan 2. 298 00:14:17,100 --> 00:14:18,960 Want als het is, dat betekent dat ik kan veilig 299 00:14:18,960 --> 00:14:21,420 raken niet alleen beugel 0, maar beugel 1. 300 00:14:21,420 --> 00:14:24,330 En ik ga je gang en uit te printen, in dit geval, Zamyla of Rob 301 00:14:24,330 --> 00:14:26,020 of wat dan ook word ik uitgetypt. 302 00:14:26,020 --> 00:14:28,020 En nu alleen maar om iets meer goede, 303 00:14:28,020 --> 00:14:31,910 Ik ga expliciet terug 0 om aan te geven dat alles goed. 304 00:14:31,910 --> 00:14:33,300 Niets ergs gebeurd. 305 00:14:33,300 --> 00:14:38,590 >> Maar volgens afspraak, ik ga return 1, of eerlijk gezegd een niet-waarde 0, 306 00:14:38,590 --> 00:14:40,160 als er iets mis ging. 307 00:14:40,160 --> 00:14:43,270 Nu kan de gebruiker is niet van plan om echt merken wat er gaande is. 308 00:14:43,270 --> 00:14:50,410 Inderdaad, als ik ga in deze map, zoomen we in en doen maken hello 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla gedraagt ​​zoals ik verwacht. 310 00:14:54,210 --> 00:14:58,570 Maar als ik in plaats daarvan niet typen niets, niets lijkt te gebeuren, 311 00:14:58,570 --> 00:14:59,680 maar het niet crasht. 312 00:14:59,680 --> 00:15:04,660 En als ik in plaats daarvan iets doen als Rob is een surveillant 313 00:15:04,660 --> 00:15:07,550 in Thayer-- sharing willekeurige gegevens. 314 00:15:07,550 --> 00:15:13,680 Maar let op, argv 1, 2, 3, 4, en 5 moet nu bestaan ​​in het geheugen. 315 00:15:13,680 --> 00:15:16,540 Ook dat is niet wat mijn programma verwacht, 316 00:15:16,540 --> 00:15:20,300 want ik heb gecontroleerd of argc evenaart gelijken 2 of niet. 317 00:15:20,300 --> 00:15:22,140 Dus ik ben nu verdedigen tegen deze. 318 00:15:22,140 --> 00:15:25,290 >> Nu, als een terzijde, we de programmer-- of liever wij users-- 319 00:15:25,290 --> 00:15:29,670 nooit zien dat 0 of 1, maar met behulp van een tool genaamd Debugger, of andere hulpmiddelen, 320 00:15:29,670 --> 00:15:32,250 zoals we zullen zien voordat lang, je de programmeur 321 00:15:32,250 --> 00:15:36,590 daadwerkelijk kan zien wat er zou kunnen zijn fout gaat binnenkant van uw programma. 322 00:15:36,590 --> 00:15:39,170 >> Dus, vragen over argc? 323 00:15:39,170 --> 00:15:40,873 Yeah. 324 00:15:40,873 --> 00:15:45,292 >> PUBLIEK: Ik heb gezien waar ze hebben niet het karakter had, [onverstaanbaar] 325 00:15:45,292 --> 00:15:49,669 net zei reeks ster d, zoals karakter sterretje komma. 326 00:15:49,669 --> 00:15:50,710 Zijn ze gelijk hier? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Ze zijn. 328 00:15:51,626 --> 00:15:55,080 Dus de vraag is, heb je af en toe gezien programma's 329 00:15:55,080 --> 00:15:57,270 als deze dat niet doen zeggen reeks argv beugel 330 00:15:57,270 --> 00:16:01,015 maar in plaats daarvan iets te zeggen zoals char ster argv beugel. 331 00:16:01,015 --> 00:16:03,140 En er is zelfs andere varianten die je zou kunnen zien. 332 00:16:03,140 --> 00:16:04,264 Ze zijn inderdaad gelijk. 333 00:16:04,264 --> 00:16:06,240 Voor nu, hebben we deze soort zijwieltjes 334 00:16:06,240 --> 00:16:09,737 op in de vorm van een tekenreeks in de CS50 bibliotheek, maar in iets meer dan een week 335 00:16:09,737 --> 00:16:12,570 of dus we gaan verwijderen die obstructie helemaal en eigenlijk 336 00:16:12,570 --> 00:16:16,820 kijken naar wat de char en de ster zijn, en hoe deze betrekking hebben op het geheugen 337 00:16:16,820 --> 00:16:18,140 representatie algemeen. 338 00:16:18,140 --> 00:16:19,540 Dus we zullen hierop terugkomen. 339 00:16:19,540 --> 00:16:21,540 >> Andere vragen over onze argv of argc? 340 00:16:21,540 --> 00:16:22,397 Yeah. 341 00:16:22,397 --> 00:16:24,438 PUBLIEK: Waarom heeft het terug een fout [onverstaanbaar]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Waarom deed het een fout terug only-- oh! 344 00:16:29,230 --> 00:16:31,813 In het vorige geval, wanneer we werden rond gepruts met geheugen, 345 00:16:31,813 --> 00:16:35,110 waarom heeft het alleen een fout geretourneerd toen ik echt getypt een groot aantal? 346 00:16:35,110 --> 00:16:36,620 Korte antwoord is, dat we geluk hebben gehad. 347 00:16:36,620 --> 00:16:39,240 Algemeen een computer wijst geheugen in brokken, 348 00:16:39,240 --> 00:16:42,900 en het gaf me een groot genoeg stuk dat Ik kreeg weg, zonder te worden opgemerkt, 349 00:16:42,900 --> 00:16:46,280 aanraken beugel 2, beugel 3, beugel 50, maar zodra ik duwde 350 00:16:46,280 --> 00:16:49,080 mijn geluk, ik ging verder dan de grenzen van het stuk van het geheugen 351 00:16:49,080 --> 00:16:50,520 het besturingssysteem me had gegeven. 352 00:16:50,520 --> 00:16:52,720 En dat is wanneer het geklemd beneden en zei, nee. 353 00:16:52,720 --> 00:16:54,580 Segmentatie fout. 354 00:16:54,580 --> 00:16:55,692 Yeah. 355 00:16:55,692 --> 00:16:58,890 >> Publiek: Hoe werkt de computer kennen de waarde van argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Hoe werkt het computer kennen de waarde van argc? 357 00:17:02,390 --> 00:17:07,920 Wanneer u een programma te starten, dat programma, door de aard van de knipperende prompt, 358 00:17:07,920 --> 00:17:11,359 wordt overhandigd de array van woorden die zijn getypt 359 00:17:11,359 --> 00:17:13,300 op de prompt, dat was getypt op de prompt. 360 00:17:13,300 --> 00:17:16,569 En zo is uw besturingssysteem systeem dat hoofdzakelijk 361 00:17:16,569 --> 00:17:20,329 bevolkt argumenten belangrijkste is voor jou. 362 00:17:20,329 --> 00:17:22,829 Dus dat is een van de diensten die je krijgt, een soort van geheim 363 00:17:22,829 --> 00:17:24,869 onder de motorkap van een besturingssysteem. 364 00:17:24,869 --> 00:17:27,118 Andere vragen? 365 00:17:27,118 --> 00:17:27,618 Yeah. 366 00:17:27,618 --> 00:17:29,787 >> Publiek: Wat betekent core dump betekenen? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Wat betekent core dump betekenen? 368 00:17:31,370 --> 00:17:32,950 Dus dat is een goede vraag. 369 00:17:32,950 --> 00:17:35,312 En laat me terug gaan in deze map hier. 370 00:17:35,312 --> 00:17:37,270 En je zult merken dat Ik heb een nieuw bestand daar. 371 00:17:37,270 --> 00:17:41,670 Het is inderdaad genoemd kern, en het is eigenlijk meestal een redelijk grote file. 372 00:17:41,670 --> 00:17:45,300 Dat is in wezen een momentopname van de inhoud van het geheugen van mijn programma's 373 00:17:45,300 --> 00:17:46,902 of RAM toen het neerstortte. 374 00:17:46,902 --> 00:17:49,110 En dit zal nuttig zijn, potentieel, diagnostisch, 375 00:17:49,110 --> 00:17:52,850 als we praten in een toekomstig college en sectie over debuggen, 376 00:17:52,850 --> 00:17:55,730 want je kunt eigenlijk doen de equivalent van een digitale autopsie 377 00:17:55,730 --> 00:18:00,300 op dat bestand te helpen erachter te komen wat je fout in je programma deed. 378 00:18:00,300 --> 00:18:01,220 Yeah. 379 00:18:01,220 --> 00:18:04,450 >> PUBLIEK: Is argc een opdracht in zelf, of kun je het noemen iets? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Goede vraag. 381 00:18:05,575 --> 00:18:08,040 Is argc een opdracht op zich, of kunt u noemt het iets? 382 00:18:08,040 --> 00:18:09,290 Het is zeker niet een opdracht. 383 00:18:09,290 --> 00:18:13,500 Het is gewoon een variabele naam of de naam van een argument is, 384 00:18:13,500 --> 00:18:15,481 en zo absoluut we kon dit foo noemen, 385 00:18:15,481 --> 00:18:18,480 konden we deze bar, die de neiging hebben te bellen om de go-to woorden die een computer 386 00:18:18,480 --> 00:18:19,860 wetenschapper gaat naar. 387 00:18:19,860 --> 00:18:22,820 Maar volgens afspraak, gebruiken we argc en argv. 388 00:18:22,820 --> 00:18:25,360 Maar dat is slechts een mens conventie, niets meer. 389 00:18:25,360 --> 00:18:25,860 Oke. 390 00:18:25,860 --> 00:18:28,140 Zo blijkt, ben ik geweest vertellen een beetje een witte lie-- 391 00:18:28,140 --> 00:18:31,264 en eerlijk gezegd, in de toekomst, je zult zien we hebben verteld andere witte leugens. 392 00:18:31,264 --> 00:18:33,510 Maar voor nu, we gaan om terug te pellen van een van deze. 393 00:18:33,510 --> 00:18:37,310 In dit geval hier toen ik eerder liep een programma zoals ./hello of ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, hadden we de inhoud van mijn het geheugen van de computer te kijken ongeveer als 395 00:18:42,780 --> 00:18:43,280 deze. 396 00:18:43,280 --> 00:18:45,070 Maar herinneren wat een string is. 397 00:18:45,070 --> 00:18:49,279 Wat hebben we zeggen een week geleden wat een reeks is eigenlijk onder de motorkap? 398 00:18:49,279 --> 00:18:50,320 PUBLIEK: Serie van chars. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Het is een reeks van tekens, toch? 400 00:18:52,111 --> 00:18:55,760 Dus kunnen we een scala aan hebben koorden, maar op zijn beurt een string 401 00:18:55,760 --> 00:18:57,150 een reeks tekens. 402 00:18:57,150 --> 00:19:00,010 Dus als ik echt wil zijn anaal toen ik deze foto te trekken, 403 00:19:00,010 --> 00:19:03,290 Ik moet echt tekenen het een beetje meer als dit, 404 00:19:03,290 --> 00:19:08,000 waarbij in elk van deze indexen van mijn argv array, 405 00:19:08,000 --> 00:19:11,432 er is zelf een hele reeks dat zelf in een array. 406 00:19:11,432 --> 00:19:13,140 En nu het leugentje om bestwil die we vandaag vertellen 407 00:19:13,140 --> 00:19:15,181 is dat het beeld niet kijk dit heel graag. 408 00:19:15,181 --> 00:19:19,110 In feite, de kleine vierkanten meestal buiten de grote rechthoeken 409 00:19:19,110 --> 00:19:19,610 er. 410 00:19:19,610 --> 00:19:21,280 Maar we komen terug om dat vóór lang. 411 00:19:21,280 --> 00:19:25,440 Maar dit is ./hello backslash 0, dat wordt het speciale teken dat 412 00:19:25,440 --> 00:19:28,310 markeert het einde van een koord, en we hebben nog een na kreeg 413 00:19:28,310 --> 00:19:29,360 Naam Zamyla's. 414 00:19:29,360 --> 00:19:30,900 Dus wat betekent dit? 415 00:19:30,900 --> 00:19:33,410 >> Nou, laat me gaan en het openstellen van twee andere voorbeelden 416 00:19:33,410 --> 00:19:35,220 die online beschikbaar zijn. 417 00:19:35,220 --> 00:19:40,590 Een heet argv1.c en de andere is argv2. 418 00:19:40,590 --> 00:19:44,260 Het is een super-eenvoudig programma dat is anders dan het verleden programma's 419 00:19:44,260 --> 00:19:47,260 in dat nu ik gebruik argc en argv hier boven. 420 00:19:47,260 --> 00:19:54,300 En nu ben ik de integratie met een lus in lijn 18, van i = 0 op maximaal argc. 421 00:19:54,300 --> 00:19:56,850 En wat ga ik doen met deze lijn van code hier? 422 00:19:56,850 --> 00:19:58,270 In het Engels. 423 00:19:58,270 --> 00:20:00,510 Dit toont duidelijk het gebruik van argc. 424 00:20:00,510 --> 00:20:03,670 Maar in het Engels, wat doet het doen als ik dit programma uit te voeren? 425 00:20:03,670 --> 00:20:04,366 Yeah? 426 00:20:04,366 --> 00:20:07,386 >> PUBLIEK: Het gaat om afdrukken van uw scherm zo vaak als je wilt. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Precies. 428 00:20:08,260 --> 00:20:10,480 Dus wat woorden die ik Typ bij de prompt, het is 429 00:20:10,480 --> 00:20:13,120 gaat braken ze me aan een per regel. 430 00:20:13,120 --> 00:20:14,370 Dus laten we verder gaan en doen dit. 431 00:20:14,370 --> 00:20:17,862 Laat me gaan in mijn directory en doen maken argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 En nu, laten we het simpel houden. 434 00:20:21,770 --> 00:20:23,834 Laten we niets doen op het eerste. 435 00:20:23,834 --> 00:20:26,750 Het deed uitprinten een ding, en dat inderdaad de naam van het programma, 436 00:20:26,750 --> 00:20:28,240 want dat is in beugel 0. 437 00:20:28,240 --> 00:20:33,290 Als ik nu foo zeggen, het gaat om te doen die twee, en als ik zeg foo bar, 438 00:20:33,290 --> 00:20:35,580 het gaat om die drie dingen zeggen. 439 00:20:35,580 --> 00:20:37,740 Nu dat is enigszins interessant, misschien. 440 00:20:37,740 --> 00:20:41,450 Maar herinneren dat argv is een array van strings, 441 00:20:41,450 --> 00:20:45,960 maar een string is een array van chars, zodat we dingen kunnen nemen een inkeping 442 00:20:45,960 --> 00:20:48,560 en toe te passen dat de fundamentele logica en maak beveiligingscode 443 00:20:48,560 --> 00:20:51,160 ziet er een beetje meer cryptisch, toegegeven. 444 00:20:51,160 --> 00:20:53,540 Maar door het hebben van een geneste lus, iets dat verwant is 445 00:20:53,540 --> 00:20:57,030 tot wat je zou herinneren van Mario, bijvoorbeeld, als je dat deed het op deze manier. 446 00:20:57,030 --> 00:21:00,380 >> Dus let nu op lijn 19, ik ben opnieuw itereren over mijn argumenten, 447 00:21:00,380 --> 00:21:02,410 vanaf 0 op maximaal argc. 448 00:21:02,410 --> 00:21:05,510 En nu in de rij 21-- ik ben lenen van een truc van vorig week-- 449 00:21:05,510 --> 00:21:11,090 Ik ben het controleren van wat is de lengte van argv beugel i. 450 00:21:11,090 --> 00:21:12,920 Ik ben het opslaan van dat antwoord in n. 451 00:21:12,920 --> 00:21:18,230 En dan ben ik het integreren van j op tot en met n, waarbij j wordt geïnitialiseerd op 0. 452 00:21:18,230 --> 00:21:19,460 Dus, conventie voor het tellen. 453 00:21:19,460 --> 00:21:22,335 Als je eenmaal die ik heb gebruikt, als u een geneste lus, je kunt niet ik opnieuw te gebruiken, 454 00:21:22,335 --> 00:21:25,770 anders zul je afranselen, potentieel, de waarde buiten de binnenste lus. 455 00:21:25,770 --> 00:21:27,200 Dus ik ben met behulp van j volgens afspraak. 456 00:21:27,200 --> 00:21:28,020 We kunnen gebruik maken van k. 457 00:21:28,020 --> 00:21:31,080 Als je meer hebt dan k, heb je waarschijnlijk hebben te veel nesten, meestal. 458 00:21:31,080 --> 00:21:33,800 Maar nu, merkt mijn printf lijn is iets anders. 459 00:21:33,800 --> 00:21:37,520 Ik ben niet aan het afdrukken% s, ik ben bedrukt% c, die natuurlijk 460 00:21:37,520 --> 00:21:39,460 is een tijdelijke aanduiding voor een char. 461 00:21:39,460 --> 00:21:40,770 >> En let nu op deze syntaxis. 462 00:21:40,770 --> 00:21:41,270 Nieuw. 463 00:21:41,270 --> 00:21:42,630 We hebben het nog niet eerder gezien. 464 00:21:42,630 --> 00:21:47,290 Maar logisch, dit betekent gewoon krijgen de i-string argv 465 00:21:47,290 --> 00:21:50,067 en krijgen de j wat? 466 00:21:50,067 --> 00:21:50,900 PUBLIEK: Karakter. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Karakter in die string. 468 00:21:52,800 --> 00:21:57,100 Dus door het gebruik van vierkante haken gevolgd door vierkante haken, 469 00:21:57,100 --> 00:22:00,390 Dit is het duiken eerst in strings argv's, 470 00:22:00,390 --> 00:22:02,225 en vervolgens de tweede vierkante haken met j 471 00:22:02,225 --> 00:22:06,580 is duiken in de karakters van die bepaalde tekenreeks in argv. 472 00:22:06,580 --> 00:22:09,562 En dan, net voor een goede maatregel, Ik ben het afdrukken van een nieuwe lijn hier. 473 00:22:09,562 --> 00:22:12,020 Dus laat me nu gaan en openen een iets groter venster 474 00:22:12,020 --> 00:22:13,600 dus we kunnen dit zien in actie. 475 00:22:13,600 --> 00:22:15,700 Laat me gaan naar die map. 476 00:22:15,700 --> 00:22:22,550 En nu maken argv-2-- whoops-- argv-2 te maken, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 En het is een beetje moeilijk verticaal lezen, 479 00:22:24,860 --> 00:22:27,920 maar dat wel de naam van de programma, gevolgd door een lege regel. 480 00:22:27,920 --> 00:22:30,210 Laat me nu ga je gang en doe foo. 481 00:22:30,210 --> 00:22:33,210 Zo ook moeilijk te lezen, maar het is inderdaad het afdrukken van een karakter per regel. 482 00:22:33,210 --> 00:22:36,780 En als ik de bar doen, het is nu bedrukt deze regel voor regel. 483 00:22:36,780 --> 00:22:40,140 Dus het afhaalrestaurant hier is niet zozeer dat, wow, kijk eens naar deze keurige nieuwe truc 484 00:22:40,140 --> 00:22:44,750 waar je kunt krijgen op de inhoud van een reeks van specifieke personages, 485 00:22:44,750 --> 00:22:48,380 maar eerder hoe we nemen deze fundamentele ideeën zoals het indexeren in een array, 486 00:22:48,380 --> 00:22:51,620 en vervolgens indexeren in een array was in die array, 487 00:22:51,620 --> 00:22:56,180 en gewoon het toepassen van dezelfde ideeën te iets meer geavanceerde voorbeelden. 488 00:22:56,180 --> 00:22:59,560 Maar de basis moet echt niet veranderd, zelfs sinds vorige week. 489 00:22:59,560 --> 00:23:02,350 >> Nu is dit soort van tijdige, in dat, herinneren, in week nul 490 00:23:02,350 --> 00:23:04,110 We speelden met een telefoon boek als dit. 491 00:23:04,110 --> 00:23:06,670 En ook al is dit natuurlijk fysieke stukjes papier, 492 00:23:06,670 --> 00:23:09,150 U kunt soort bedenken een telefoonboek als een array. 493 00:23:09,150 --> 00:23:12,770 Zeker, als je om herimplementeren deze stukken deze stukjes papier 494 00:23:12,770 --> 00:23:15,260 in een computer, waarschijnlijk zou je iets gebruiken 495 00:23:15,260 --> 00:23:20,270 als een array al die slaan namen en nummers van een hele weg 496 00:23:20,270 --> 00:23:23,800 door Z. Dus dit is leuk, omdat het stelt ons in de gelegenheid, 497 00:23:23,800 --> 00:23:28,310 misschien, om te overwegen hoe je misschien zoiets daadwerkelijk te implementeren. 498 00:23:28,310 --> 00:23:31,250 Als een reeks deuren here. 499 00:23:31,250 --> 00:23:36,380 Dus als ik could-- we er een nodig hebben vrijwilliger om op te komen. 500 00:23:36,380 --> 00:23:36,980 Laten we eens kijken. 501 00:23:36,980 --> 00:23:40,650 Een onbekend gezicht misschien, onbekende gezicht misschien. 502 00:23:40,650 --> 00:23:42,090 Hoe zit het in oranje? 503 00:23:42,090 --> 00:23:42,680 Hier. 504 00:23:42,680 --> 00:23:45,870 Oranje shirt, kom naar boven. 505 00:23:45,870 --> 00:23:52,230 >> Laten we nu gaan en vooruit deze deuren aan de kant, 506 00:23:52,230 --> 00:23:54,020 gaan deze uit de weg voor een moment. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Wat is je naam? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID MALAN: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Leuk je te ontmoeten. 513 00:23:59,451 --> 00:23:59,950 Oke. 514 00:23:59,950 --> 00:24:04,500 Dus hebben we achter deze zes deuren digitaal op de screen-- 515 00:24:04,500 --> 00:24:07,810 of, beter gezegd, zeven deuren aan de screen-- een hele hoop nummers. 516 00:24:07,810 --> 00:24:10,099 En ik heb je niets verteld in advance-- overeengekomen? 517 00:24:10,099 --> 00:24:11,140 AJAY: Niets op voorhand. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Alles wat ik wil dat je doet nu is te vinden voor mij, en voor ons, 519 00:24:14,730 --> 00:24:20,920 echt, het nummer 50, een stap op een moment. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Nummer 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: Het nummer 50. 522 00:24:22,580 --> 00:24:24,746 En je kan onthullen wat is achter elk van deze deuren 523 00:24:24,746 --> 00:24:27,930 gewoon door het aanraken van het met een vinger. 524 00:24:27,930 --> 00:24:31,364 Damn it. [Lachen] 525 00:24:31,364 --> 00:24:34,560 >> [Applaus] 526 00:24:34,560 --> 00:24:39,540 >> Zeer goed gedaan. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 We hebben een mooie gift prijs voor u hier. 529 00:24:44,090 --> 00:24:46,520 Uw keuze uit films die we besproken vorige week. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, man. 531 00:24:47,362 --> 00:24:49,050 Oh, ik heb nog nooit gezien Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Oke. 534 00:24:50,140 --> 00:24:53,790 Dus houd op slechts een moment. 535 00:24:53,790 --> 00:24:57,430 How-- laten we deze een leerzaam moment-- 536 00:24:57,430 --> 00:25:00,412 hoe heb je over het vinden van het nummer 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Ik koos willekeurig. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Dus je hebt gekozen willekeurig en had geluk. 539 00:25:03,420 --> 00:25:03,790 AJAY: Ja. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Excellent. 542 00:25:05,050 --> 00:25:08,470 Dus nu, had je niet geluk gehad, wat anders 543 00:25:08,470 --> 00:25:10,210 zou achter deze deuren zijn gebeurd? 544 00:25:10,210 --> 00:25:12,930 Dus als ik ga je gang en onthullen deze nummers hier, 545 00:25:12,930 --> 00:25:15,180 ze in werkelijkheid zijn in willekeurige volgorde. 546 00:25:15,180 --> 00:25:17,750 En het beste wat je zou kunnen hebben gedaan, eerlijk gezegd, is door, uiteindelijk, 547 00:25:17,750 --> 00:25:19,410 in het ergste geval, het controleren van ze allemaal. 548 00:25:19,410 --> 00:25:23,000 Dus je hebt super-geluk, dat is niet wat we een algoritme zou noemen. 549 00:25:23,000 --> 00:25:24,730 Ja, congrats. 550 00:25:24,730 --> 00:25:27,010 Maar nu let's-- humor me, als je kon. 551 00:25:27,010 --> 00:25:28,310 Laten we naar het tabblad hier. 552 00:25:28,310 --> 00:25:31,460 En hier zijn de nummers in duidelijk wat lijkt op een willekeurige volgorde zijn, 553 00:25:31,460 --> 00:25:32,280 en ze waren. 554 00:25:32,280 --> 00:25:35,160 Maar nu als ik in plaats daarvan aanspraak dat er achter deze deuren 555 00:25:35,160 --> 00:25:39,070 zijn getallen die zijn gesorteerd. 556 00:25:39,070 --> 00:25:41,780 Het doel is nu om ook vinden wij het getal 50. 557 00:25:41,780 --> 00:25:45,910 Maar doe het algoritmisch, en vertel ons hoe je gaat erover. 558 00:25:45,910 --> 00:25:48,020 En als je het vindt, houdt u de film. 559 00:25:48,020 --> 00:25:49,520 Je vind het niet, geef je het terug. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Dus ik ga aan de uiteinden te controleren eerst, om te bepalen of there's-- 562 00:25:58,112 --> 00:26:02,048 [Gelach en applaus] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Hier ga je. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Laten we eens een kijkje nemen op een van Ajay's voorgangers, 567 00:26:21,700 --> 00:26:25,450 Sean, die niet zo gelukkig was. 568 00:26:25,450 --> 00:26:28,670 OK, dus even je taak, Sean, is het volgende. 569 00:26:28,670 --> 00:26:32,970 Ik heb achter deze verborgen deuren van de nummer zeven, 570 00:26:32,970 --> 00:26:37,200 maar weggestopt in een aantal van deze deuren alsook andere niet-negatieve getallen. 571 00:26:37,200 --> 00:26:40,730 En je doel is om te denken van deze bovenste rij getallen als onder array. 572 00:26:40,730 --> 00:26:43,590 We zijn gewoon een opeenvolging van stukken papier met nummers achter hen. 573 00:26:43,590 --> 00:26:47,640 En je doel is, alleen met behulp van de top serie hier, vind ik het getal zeven. 574 00:26:47,640 --> 00:26:51,200 En we zijn vervolgens naar kritiek hoe je het gaan doen. 575 00:26:51,200 --> 00:26:52,920 Vind ons het getal zeven, alstublieft. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nee 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Het is geen strikvraag. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 Op dit punt je score is niet erg goed, dus je kan net zo goed blijven gaan. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Ga op. 590 00:27:39,802 --> 00:27:42,510 Eerlijk gezegd, ik kan het niet helpen, maar vraag me af wat je ook denkt over. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: ik kan nemen van alleen de bovenste rij. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Alleen de bovenste rij. 593 00:27:46,240 --> 00:27:47,281 Dus je hebt drie links. 594 00:27:47,281 --> 00:27:48,310 Dus vind ik 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PUBLIEK SCHREEUWT SUGGESTIES] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Dus zowel van die waren geweldig om zeer verschillende redenen. 599 00:28:26,130 --> 00:28:29,150 Dus dit is waar we ophield een moment geleden, 600 00:28:29,150 --> 00:28:32,530 en de sleutel inzicht hier werd deze deuren hadden nummers 601 00:28:32,530 --> 00:28:37,390 achter hen die werden naargelang de ideale afhaalrestaurant waarvoor is dat je zou kunnen doen 602 00:28:37,390 --> 00:28:39,670 fundamenteel beter deze tweede example-- 603 00:28:39,670 --> 00:28:42,380 en, inderdaad, dat was Sean's eerste poging met willekeurige getallen 604 00:28:42,380 --> 00:28:45,460 even before-- maar zodra Deze nummers worden gesorteerd, 605 00:28:45,460 --> 00:28:47,980 net als in het telefoonboek, wat kan je natuurlijk doen? 606 00:28:47,980 --> 00:28:50,090 Of hoe kun je die kennis te benutten? 607 00:28:50,090 --> 00:28:51,530 Yeah. 608 00:28:51,530 --> 00:28:54,910 >> PUBLIEK: Je gaat halverwege [onverstaanbaar]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Ja. 610 00:28:55,660 --> 00:28:56,160 Precies. 611 00:28:56,160 --> 00:28:59,680 Dus eerste instinct Ajay was aan de uiteinden te controleren, als ik me goed herinner, 612 00:28:59,680 --> 00:29:02,320 en dan hebben we een soort van afgewerkte voorbeeld snel. 613 00:29:02,320 --> 00:29:05,220 Maar als we begonnen om dit meer te doen methodisch volgens die lijnen, 614 00:29:05,220 --> 00:29:07,860 maar uitgaande misschien in de midden, omdat ze gesorteerd zijn, 615 00:29:07,860 --> 00:29:10,900 zodra we onthullen de nummer 16, we daarom weten-- 616 00:29:10,900 --> 00:29:14,850 en laten we precies doen dat-- we Daarom weten dat 50 wordt voor de huidige, 617 00:29:14,850 --> 00:29:16,080 heeft om naar rechts. 618 00:29:16,080 --> 00:29:18,735 Dus net als in week nul wanneer we scheurde het telefoonboek in de helft 619 00:29:18,735 --> 00:29:21,490 en gooide de helft van de probleem weg, hetzelfde idee hier. 620 00:29:21,490 --> 00:29:23,680 We kunnen dit de helft te gooien het probleem weg. 621 00:29:23,680 --> 00:29:25,730 En waarschijnlijk wat u kan algoritmisch doen, 622 00:29:25,730 --> 00:29:28,710 als je eenmaal weet dat 50 moet zijn naar rechts, als het overal, 623 00:29:28,710 --> 00:29:31,390 is te proberen er, in het midden van de overige deuren. 624 00:29:31,390 --> 00:29:33,450 Natuurlijk, 50 hoger dan 42, dus we kunnen 625 00:29:33,450 --> 00:29:36,060 gooi deze resterende kwart van het probleem weg, 626 00:29:36,060 --> 00:29:38,510 en tenslotte identificeren iets als 50. 627 00:29:38,510 --> 00:29:41,050 Maar net als bij de telefoonboek, deze nummers 628 00:29:41,050 --> 00:29:44,560 waren ons reeds gesorteerde volgorde, die ons verlaat 629 00:29:44,560 --> 00:29:47,450 met de vraag, hoe doe je om dingen in de gesorteerde volgorde? 630 00:29:47,450 --> 00:29:49,640 En, eerlijk gezegd, tegen welke kosten? 631 00:29:49,640 --> 00:29:51,390 Het is een ding om te zijn overhandigde het telefoonboek 632 00:29:51,390 --> 00:29:54,810 en dan indruk op je vrienden door het vinden van een telefoonnummer heel snel, toch? 633 00:29:54,810 --> 00:29:58,520 Tranende 32 pagina's uit om een ​​vondst persoon van 4 miljard pagina's, 634 00:29:58,520 --> 00:30:00,470 we zeiden was een extreem voorbeeld. 635 00:30:00,470 --> 00:30:03,320 Maar hoeveel tijd heeft het geduurd Verizon aan dat telefoonboek sorteren? 636 00:30:03,320 --> 00:30:06,170 Hoeveel tijd heeft het ons deze zeven nummers sorteren? 637 00:30:06,170 --> 00:30:10,110 Dat is een vraag die we hebben tot nu toe volledig genegeerd. 638 00:30:10,110 --> 00:30:12,330 >> Dus laten we het antwoord op deze vraag is nu. 639 00:30:12,330 --> 00:30:15,920 En we zijn allemaal uit films nu, maar we hebben wel wat stress ballen. 640 00:30:15,920 --> 00:30:19,480 Als, zeg, acht vrijwilligers zou het niet erg om met ons mee hier? 641 00:30:19,480 --> 00:30:24,100 Laten we verder gaan en doen, wat dacht je van jullie vier, drie van jullie hier? 642 00:30:24,100 --> 00:30:25,290 Krijg een aantal nieuwe gezichten. 643 00:30:25,290 --> 00:30:27,220 En de vier van je daar? 644 00:30:27,220 --> 00:30:30,760 En nu-- laten we niet vooringenomenheid hier-- en nummer acht hier op het einde. 645 00:30:30,760 --> 00:30:32,060 Kom maar naar boven. 646 00:30:32,060 --> 00:30:32,560 Oke. 647 00:30:32,560 --> 00:30:37,480 Dus wat we hier hebben voor ieder van jullie is een nummer. 648 00:30:37,480 --> 00:30:40,055 Als je wilt om te gaan vooruit, neemt dit aantal. 649 00:30:40,055 --> 00:30:40,763 Wat is je naam? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, oke. 652 00:30:43,100 --> 00:30:44,297 Je bent nummer 1. 653 00:30:44,297 --> 00:30:45,310 >> AMIN: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID MALAN: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Je bent nummer 2. 657 00:30:47,530 --> 00:30:49,100 En ga je gang, als ik de hand u de vellen papier, 658 00:30:49,100 --> 00:30:52,130 line-up zelf voor de muziek staat in dezelfde volgorde als boven. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hoi, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, het is leuk om je te zien. 661 00:30:53,970 --> 00:30:54,520 Nummer 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, nummer 4. 664 00:30:56,760 --> 00:30:57,549 Welkom aan boord. 665 00:30:57,549 --> 00:30:58,090 GRANT: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Nummer 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, nummer 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, nummer 7. 672 00:31:04,880 --> 00:31:05,200 En? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, nummer 8. 675 00:31:06,815 --> 00:31:07,100 Oke. 676 00:31:07,100 --> 00:31:08,766 Ga je gang en krijg je in deze volgorde. 677 00:31:08,766 --> 00:31:11,440 Laat ik een resterende muziekstandaard op zijn plaats. 678 00:31:11,440 --> 00:31:13,670 Waar vind je een stand nodig? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Ga je gang en zet uw nummers waar het publiek ze kan zien op, 681 00:31:18,710 --> 00:31:20,340 de muziek staan ​​naar buiten gericht. 682 00:31:20,340 --> 00:31:27,240 En hopelijk, onze eerste sanity check hier-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Wacht eens even. 685 00:31:29,070 --> 00:31:31,140 We hebben niet een 8. 686 00:31:31,140 --> 00:31:35,180 Ik moet u te verdrijven uit voorbeeld ergens. 687 00:31:35,180 --> 00:31:35,680 Nee 688 00:31:35,680 --> 00:31:36,940 Nee, dat is OK. 689 00:31:36,940 --> 00:31:37,890 Laten we eens kijken. 690 00:31:37,890 --> 00:31:38,880 We kunnen dit doen. 691 00:31:38,880 --> 00:31:39,440 Stand-by. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Daar gaan we. 694 00:31:45,740 --> 00:31:46,800 Correct. 695 00:31:46,800 --> 00:31:47,360 Oke. 696 00:31:47,360 --> 00:31:50,260 Zo, nu hebben we 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Excellent. 699 00:31:51,360 --> 00:31:54,400 >> Dus de vraag aan de hand is, op welke kosten, en via welke methode, 700 00:31:54,400 --> 00:31:58,580 kunnen we eigenlijk sorteren van deze nummers hier zodat wij type terug kunnen werken, 701 00:31:58,580 --> 00:32:02,759 uiteindelijk, en decide-- is het echt indrukwekkend, is het echt efficiënt, 702 00:32:02,759 --> 00:32:04,550 die ik kan verdelen en een telefoonboek te veroveren? 703 00:32:04,550 --> 00:32:06,716 Is het echt efficiënt dat Ik kan verdelen en heersen 704 00:32:06,716 --> 00:32:08,600 die digitale stukken papier op het bord, 705 00:32:08,600 --> 00:32:14,500 of misschien het gaat kosten ons een fortuin in de tijd of energie of CPU-cycli 706 00:32:14,500 --> 00:32:17,340 onze gegevens daadwerkelijk te krijgen in een aantal gesorteerde volgorde? 707 00:32:17,340 --> 00:32:18,930 Dus laten we die vraag stellen. 708 00:32:18,930 --> 00:32:22,077 >> Dus ten eerste, deze nummers zijn in vrijwel willekeurige volgorde, 709 00:32:22,077 --> 00:32:24,160 en ik ga voor te stellen een algoritme, of proces 710 00:32:24,160 --> 00:32:25,970 waarmee we kunnen sorteren van deze mensen. 711 00:32:25,970 --> 00:32:28,100 Ik ga om te benaderen deze vrij naïef. 712 00:32:28,100 --> 00:32:30,730 En ik ga om te erkennen dat is het soort veel voor mij 713 00:32:30,730 --> 00:32:32,890 naar mijn mening wikkel rond de gehele dataset tegelijk. 714 00:32:32,890 --> 00:32:33,640 Maar weet je wat? 715 00:32:33,640 --> 00:32:37,450 Ik ga wat doen heel simpel marginale fixes. 716 00:32:37,450 --> 00:32:41,152 4 en 2 zijn niet in orde, als de doel is om van 1 op maximaal 8. 717 00:32:41,152 --> 00:32:41,860 Dus weet je wat? 718 00:32:41,860 --> 00:32:43,776 Ik ga u hebt jongens wisselen, indien je kiest 719 00:32:43,776 --> 00:32:46,380 fysiek posities en je stukjes papier. 720 00:32:46,380 --> 00:32:47,894 Nu 4 en 6, deze zijn in orde. 721 00:32:47,894 --> 00:32:49,060 Ik ga om te vertrekken die zijn. 722 00:32:49,060 --> 00:32:50,227 6 en 8, die in orde. 723 00:32:50,227 --> 00:32:51,185 Gaan laat ze zijn. 724 00:32:51,185 --> 00:32:52,170 8 and1, buiten de orde. 725 00:32:52,170 --> 00:32:54,790 Als u twee zou het niet erg te ruilen. 726 00:32:54,790 --> 00:32:57,300 Nu 8 en 3, als jullie konden wisselen. 727 00:32:57,300 --> 00:32:59,320 8 en 7, als jullie konden wisselen. 728 00:32:59,320 --> 00:33:01,790 En 8 en 5, als jullie konden wisselen. 729 00:33:01,790 --> 00:33:03,980 >> Nu ben ik klaar? 730 00:33:03,980 --> 00:33:05,200 Nee, natuurlijk niet. 731 00:33:05,200 --> 00:33:07,880 Maar ik heb gemaakt van de situatie beter, toch? 732 00:33:07,880 --> 00:33:09,430 Wat was je naam ook alweer, nummer 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Dus Rachel heeft effectief borrelde vrij ver, 735 00:33:12,850 --> 00:33:15,660 helemaal tot het einde van mijn matrix van getallen hier. 736 00:33:15,660 --> 00:33:17,310 En dus dat probleem is een beetje opgelost. 737 00:33:17,310 --> 00:33:21,670 Nu duidelijk, 2 moet nog verplaatsen van een bit, en 4 en 6 en 1. 738 00:33:21,670 --> 00:33:24,420 Maar ik schijn te hebben gekregen van een iets dichter bij de oplossing. 739 00:33:24,420 --> 00:33:26,790 Dus laten we deze zelfde toepassing naïeve heuristische weer. 740 00:33:26,790 --> 00:33:27,690 2 en 4, op OK. 741 00:33:27,690 --> 00:33:28,810 4 en 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 en 1 mm mm. 743 00:33:29,930 --> 00:33:32,230 Laten we ruilen. 744 00:33:32,230 --> 00:33:33,200 6 en 3 mm-mm. 745 00:33:33,200 --> 00:33:34,420 Laten we ruilen. 746 00:33:34,420 --> 00:33:35,580 6 en 7 is OK. 747 00:33:35,580 --> 00:33:36,590 7 en 5, nope. 748 00:33:36,590 --> 00:33:37,790 Laten we ruilen. 749 00:33:37,790 --> 00:33:38,470 En nu 7 en 8. 750 00:33:38,470 --> 00:33:39,862 En hoe heet je ook alweer? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID MALAN: Frances. 753 00:33:41,445 --> 00:33:44,230 Dus nu Frances is zelfs een betere positie, want nu 7 en 8 754 00:33:44,230 --> 00:33:46,440 correct borrelde omhoog naar de top. 755 00:33:46,440 --> 00:33:47,510 Dus 2 en 4, op OK. 756 00:33:47,510 --> 00:33:48,720 4 en 1, swap laten we. 757 00:33:48,720 --> 00:33:50,410 4 en 3, swap laten we. 758 00:33:50,410 --> 00:33:51,550 4 en 6, jij bent OK. 759 00:33:51,550 --> 00:33:53,340 6 en 5, swap laten we. 760 00:33:53,340 --> 00:33:54,590 En nu die jongens zijn goed. 761 00:33:54,590 --> 00:33:55,780 We zijn er bijna. 762 00:33:55,780 --> 00:33:57,706 2 en 1, in de juiste volgorde, dus wisselen. 763 00:33:57,706 --> 00:33:59,080 En nu laat ik doe een sanity check. 764 00:33:59,080 --> 00:34:03,080 2 en 3, 3 en 4, 4 en 5, 5 en 6, 6 en 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, dus we zijn klaar. 766 00:34:05,060 --> 00:34:09,310 >> Maar tegen welke prijs heb ik sorteren van deze nummers hier? 767 00:34:09,310 --> 00:34:13,960 Nou, hoeveel stappen heb ik potentieel nemen bij het sorteren van deze mensen? 768 00:34:13,960 --> 00:34:15,710 Nou, we komen zeker terug op die vraag komen. 769 00:34:15,710 --> 00:34:18,030 Maar, eerlijk gezegd, als je echt een beetje vervelen, dat is 770 00:34:18,030 --> 00:34:22,270 soort onthullen in dat dit niet was misschien wel de meest efficiënte algoritme. 771 00:34:22,270 --> 00:34:25,230 En inderdaad, eerlijk gezegd, ik zweet des heen en weer. 772 00:34:25,230 --> 00:34:26,639 Dat voelde niet bijzonder efficiënt. 773 00:34:26,639 --> 00:34:27,805 Dus laten we iets anders proberen. 774 00:34:27,805 --> 00:34:31,870 Als jullie kunnen resetten jezelf aan deze acht waarden. 775 00:34:31,870 --> 00:34:32,969 Good job. 776 00:34:32,969 --> 00:34:36,570 >> Laten we eens een kijkje nemen digitaal, voor slechts even voordat we iets anders proberen, 777 00:34:36,570 --> 00:34:38,179 bij wat er net gebeurd. 778 00:34:38,179 --> 00:34:41,330 Hier, op het punt om een ​​te zien ben je visualisatie van deze acht mensen 779 00:34:41,330 --> 00:34:44,719 waarbij blauw en rood balken geven getallen. 780 00:34:44,719 --> 00:34:46,670 Hoe hoger de balk, hoe groter het getal. 781 00:34:46,670 --> 00:34:48,510 Hoe korter de balk, hoe kleiner het getal. 782 00:34:48,510 --> 00:34:51,560 En wat je gaat zien is in willekeurige volgorde meer dan acht van hen. 783 00:34:51,560 --> 00:34:55,830 Je gaat naar deze bars te zien krijgen naargelang hun datzelfde algoritme, 784 00:34:55,830 --> 00:34:59,890 of een reeks van instructies, die we zullen voortaan noemen bubble sort. 785 00:34:59,890 --> 00:35:04,000 Dus merken, elke seconde of zo, twee bars zijn verlichting in rood, 786 00:35:04,000 --> 00:35:05,590 worden vergeleken door de computer. 787 00:35:05,590 --> 00:35:08,630 En als de grote bar en kleine bar zijn buiten de orde, 788 00:35:08,630 --> 00:35:11,220 ze worden geruild voor mij. 789 00:35:11,220 --> 00:35:15,120 >> Nu is dit ongelooflijk vervelend dit kijken maar, 790 00:35:15,120 --> 00:35:18,630 voor heel lang, maar let op de takeaway-- grote balken naar rechts beweegt, 791 00:35:18,630 --> 00:35:20,460 kleine bars naar links te bewegen. 792 00:35:20,460 --> 00:35:23,380 Laten we breken dit proces en dit niet sneller 793 00:35:23,380 --> 00:35:27,330 om veel sneller te zijn, zodat we kunnen krijgen een hoog niveau begrijpen wat, 794 00:35:27,330 --> 00:35:29,970 inderdaad, bubble sort doet. 795 00:35:29,970 --> 00:35:33,150 Inderdaad, het borrelen aan de rechterkant van de lijst, 796 00:35:33,150 --> 00:35:35,260 of de matrix, de grotere bars. 797 00:35:35,260 --> 00:35:40,020 En omgekeerd, de kleine bars zijn borrelende hun weg naar beneden naar links, 798 00:35:40,020 --> 00:35:42,950 zij het in een sneller tempo dan we voorheen deden. 799 00:35:42,950 --> 00:35:45,850 Dus, moeilijker te zien met mensen, maar visueel dat is inderdaad wat 800 00:35:45,850 --> 00:35:46,540 er gebeurde. 801 00:35:46,540 --> 00:35:49,110 >> Maar laten we proberen een fundamenteel andere aanpak nu. 802 00:35:49,110 --> 00:35:52,387 Laten we proberen een andere algoritme waarbij we u 803 00:35:52,387 --> 00:35:59,640 jongens beginnen in deze originele posities, die deze opdracht hier was. 804 00:35:59,640 --> 00:36:00,827 En laten we gaan nu vooruit. 805 00:36:00,827 --> 00:36:02,910 En ik ga iets doen nog eenvoudiger, toch? 806 00:36:02,910 --> 00:36:06,710 Achteraf weer swappen paarsgewijze en weer, bijna een beetje slim. 807 00:36:06,710 --> 00:36:10,460 Laten we de dingen doen, zelfs meer naïef, waar als ik wil deze mensen te sorteren, 808 00:36:10,460 --> 00:36:12,560 laat me gewoon blijven kijken het kleinste element. 809 00:36:12,560 --> 00:36:14,570 Dus op dit moment, 4 is de kleinste aantal die ik heb gezien. 810 00:36:14,570 --> 00:36:15,695 Ik ga om te onthouden. 811 00:36:15,695 --> 00:36:17,750 Nee, 2 is beter, en onthoud dat. 812 00:36:17,750 --> 00:36:20,730 1 nog kleiner. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 Een-- hoe heet je ook alweer? 816 00:36:23,750 --> 00:36:24,400 >> ARTIE: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID MALAN: Artie. 818 00:36:24,610 --> 00:36:25,460 Dus, Artie, ga je gang. 819 00:36:25,460 --> 00:36:27,043 Ik ga je uit de lijn. 820 00:36:27,043 --> 00:36:28,400 Als je hier terug zou komen. 821 00:36:28,400 --> 00:36:30,790 En ik moet om ruimte te maken voor hem. 822 00:36:30,790 --> 00:36:32,040 We hebben een beslissing punt hier. 823 00:36:32,040 --> 00:36:36,000 Hoe kunnen we ruimte maken voor Artie hier aan het begin waar de nummer 1 hoort? 824 00:36:36,000 --> 00:36:36,770 >> PUBLIEK: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, we iedereen kan verschuiven. 826 00:36:38,950 --> 00:36:40,860 Maar stel een optimalisatie. 827 00:36:40,860 --> 00:36:43,410 Dat voelt een beetje vervelend voor mij om vier mensen te vragen 828 00:36:43,410 --> 00:36:44,620 om helemaal naar beneden te verplaatsen. 829 00:36:44,620 --> 00:36:45,520 Wat kon ik doen? 830 00:36:45,520 --> 00:36:46,360 >> PUBLIEK: Schakel hen. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Schakel hen. 832 00:36:46,850 --> 00:36:47,900 En hoe heet je ook alweer? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, te verplaatsen. 835 00:36:50,330 --> 00:36:54,440 Veel efficiënter alleen maar om Jacob swap locaties met Artie, 836 00:36:54,440 --> 00:36:56,710 tegenover dwingen alle vier van deze mensen, 837 00:36:56,710 --> 00:36:58,734 dank u zeer, om de juiste positie. 838 00:36:58,734 --> 00:37:01,150 Wat er leuk is aan Artie nu, hij is in zijn juiste positie. 839 00:37:01,150 --> 00:37:02,060 Laten we dit nog een keer doen. 840 00:37:02,060 --> 00:37:03,730 2, dat is het kleinste aantal die ik heb gezien. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 is zeker de kleinste. 844 00:37:07,467 --> 00:37:08,550 Hoeft niet aan een werk te doen. 845 00:37:08,550 --> 00:37:09,320 Laten we het nog eens doen. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Kleinst? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nope. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Laat me herinneren 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Laat me niet vergeten 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Kleinste getal Ik heb gezien op deze pas is 3. 857 00:37:18,490 --> 00:37:20,340 Als je uit zou komen op. 858 00:37:20,340 --> 00:37:21,986 Waar gaan we je? 859 00:37:21,986 --> 00:37:22,860 En wat is uw naam? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, we zijn gaat te hebben om u te verdrijven. 862 00:37:25,780 --> 00:37:28,670 Dat is efficiënter, om gewoon ruilen twee mensen, 863 00:37:28,670 --> 00:37:31,850 dan meerdere mensen eigenlijk omzeilen via. 864 00:37:31,850 --> 00:37:32,850 Laten we nu weer doen. 865 00:37:32,850 --> 00:37:34,980 Ik ga om 4, dus kom naar buiten. 866 00:37:34,980 --> 00:37:36,540 En wie gaat verhuizen? 867 00:37:36,540 --> 00:37:37,750 Nummer 8, natuurlijk. 868 00:37:37,750 --> 00:37:40,260 Als ik nu nummer 5, kom naar buiten. 869 00:37:40,260 --> 00:37:42,104 Nummer 8 gaat meer de weg gezet. 870 00:37:42,104 --> 00:37:43,770 Ik ga nu naar nummer 6 vinden op zijn plaats. 871 00:37:43,770 --> 00:37:44,410 7 op zijn plaats. 872 00:37:44,410 --> 00:37:45,080 8 plaats. 873 00:37:45,080 --> 00:37:48,590 >> Wat we nu hebben is gewoon iets genaamd selectie sorteren 874 00:37:48,590 --> 00:37:52,560 en als we dit te visualiseren, is het gaat een beetje anders te voelen. 875 00:37:52,560 --> 00:37:56,800 Laten we verder gaan en uit deze menu hier, dit visualization-- 876 00:37:56,800 --> 00:38:02,920 laten we dit veranderen om-- kom op, Firefox. 877 00:38:02,920 --> 00:38:07,610 Laten we dit veranderen in selectie sorteren. 878 00:38:07,610 --> 00:38:11,830 En laten we het versnellen als voorheen, en nu beginnen de visualisatie. 879 00:38:11,830 --> 00:38:13,990 En dit algoritme heeft een andere sfeer. 880 00:38:13,990 --> 00:38:16,480 Op elke iteratie, eerlijk gezegd, is het nog eenvoudiger. 881 00:38:16,480 --> 00:38:18,385 Ik ben gewoon het selecteren van het kleinste element. 882 00:38:18,385 --> 00:38:21,510 Nu, eerlijk gezegd, ik heb een beetje geluk gehad dat tijd, omdat het gesorteerd supersnelle. 883 00:38:21,510 --> 00:38:22,660 De elementen waren willekeurig. 884 00:38:22,660 --> 00:38:25,520 Het is niet, zoals we zullen uiteindelijk zie fundamenteel sneller. 885 00:38:25,520 --> 00:38:29,400 Maar laten we eens kijken een derde en laatste benaderen hier over wat er gaande is. 886 00:38:29,400 --> 00:38:36,230 Dus laten we verder gaan en reset jullie een laatste keer te zijn in deze orde hier. 887 00:38:36,230 --> 00:38:38,450 >> En nu, ik ga een beetje slimmer, 888 00:38:38,450 --> 00:38:40,220 gewoon voor de ronde van onze algoritmes. 889 00:38:40,220 --> 00:38:41,230 Ik ga dit doen. 890 00:38:41,230 --> 00:38:43,140 Ik ga niet gaan heen en weer zo veel. 891 00:38:43,140 --> 00:38:44,900 Eerlijk gezegd, ik ben moe van dit alles het oversteken. 892 00:38:44,900 --> 00:38:47,691 Ik ga gewoon om te nemen wat ik ben gegeven aan het begin van de lijst 893 00:38:47,691 --> 00:38:49,460 en ik ga om te sorteren dat toen en daar. 894 00:38:49,460 --> 00:38:50,140 Dus hier zijn we. 895 00:38:50,140 --> 00:38:51,030 Nummer 4. 896 00:38:51,030 --> 00:38:53,680 Ik ga cijfer wilt invoegen 4 in een gesorteerde lijst. 897 00:38:53,680 --> 00:38:54,180 Gedaan. 898 00:38:54,180 --> 00:38:58,300 Ik eis nu, en alleen maar om dit meer te maken duidelijk, is dit deel van mijn lijst gesorteerd worden. 899 00:38:58,300 --> 00:39:02,610 Het is een beetje een domme claim, maar inderdaad 4 wordt gesorteerd in een lijst van maat one. 900 00:39:02,610 --> 00:39:04,210 Nu ga ik op nummer 2 te nemen. 901 00:39:04,210 --> 00:39:07,670 Nummer 2 Ik ga nu invoegen in de goede plaats. 902 00:39:07,670 --> 00:39:08,680 Dus waar komt 2 thuis? 903 00:39:08,680 --> 00:39:09,824 Uiteraard, hier. 904 00:39:09,824 --> 00:39:11,490 Dus ga je gang en terug te gaan, als je kon. 905 00:39:11,490 --> 00:39:14,406 En waarom gaan jullie niet gewoon uw muziek staat met je deze keer. 906 00:39:14,406 --> 00:39:17,020 En laten we met kracht plaatst u in het begin van de lijst. 907 00:39:17,020 --> 00:39:17,936 Dus een beetje meer werk. 908 00:39:17,936 --> 00:39:20,890 Ik moest Jacob bewegen, en wat is uw naam? 909 00:39:20,890 --> 00:39:21,420 >> AMIN: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID MALAN: Amin. 911 00:39:22,270 --> 00:39:24,350 Maar in ieder geval heb ik niet heen en weer gaan. 912 00:39:24,350 --> 00:39:25,739 Ik ben gewoon het nemen van dingen als ik ga. 913 00:39:25,739 --> 00:39:27,530 Ik ga ze gewoon invoegen op de juiste plaats. 914 00:39:27,530 --> 00:39:29,220 6, dit is eigenlijk vrij eenvoudig. 915 00:39:29,220 --> 00:39:31,510 Laten steek je daar, als je wilde alleen maar iets meer dan te bewegen. 916 00:39:31,510 --> 00:39:32,870 Nummer 8, ook vrij gemakkelijk. 917 00:39:32,870 --> 00:39:33,741 Daar. 918 00:39:33,741 --> 00:39:34,240 Damn it. 919 00:39:34,240 --> 00:39:37,590 Nummer 1 kunnen we niet alleen ruilen met Amin hier, 920 00:39:37,590 --> 00:39:39,340 want dat gaat te verknoeien de orde. 921 00:39:39,340 --> 00:39:40,660 Dus we moeten een beetje slimmer zijn. 922 00:39:40,660 --> 00:39:42,770 Dus, Artie, als je zou kunnen een back-up voor een moment. 923 00:39:42,770 --> 00:39:46,550 Laten we verder gaan en shift nu, in tegenstelling tot onze eerdere algoritmen, 924 00:39:46,550 --> 00:39:50,910 om ruimte voor Artie maken hier bij het begin. 925 00:39:50,910 --> 00:39:54,690 Dus aan het eind van de dag, ik ben een beetje doen wat ik wilde voordat vermijden. 926 00:39:54,690 --> 00:39:57,770 En dus mijn algoritme is een soort of omgekeerd, intellectueel, 927 00:39:57,770 --> 00:39:59,070 van wat het oorspronkelijk was. 928 00:39:59,070 --> 00:40:01,240 Ik doe gewoon het verschuiven op een ander punt. 929 00:40:01,240 --> 00:40:02,291 Nu ben ik op 3. 930 00:40:02,291 --> 00:40:02,790 Oh, verdomme. 931 00:40:02,790 --> 00:40:04,039 We moeten meer werk opnieuw te doen. 932 00:40:04,039 --> 00:40:05,060 Dus laten we duwen je uit. 933 00:40:05,060 --> 00:40:09,360 Laten we verder gaan 8, 6, 4-- oh oh-- en 3 gaat naar daar te gaan. 934 00:40:09,360 --> 00:40:11,490 Dus op zijn minst lichte besparingen deze keer. 935 00:40:11,490 --> 00:40:13,100 7, niet te veel werk te doen. 936 00:40:13,100 --> 00:40:15,370 Dus als je wilt pop terug, laten we u invoegt. 937 00:40:15,370 --> 00:40:17,440 En tot slot, 5, als je terug willen knallen, we 938 00:40:17,440 --> 00:40:22,610 moet je verschuiven, u, u, tot vijf is op zijn plaats. 939 00:40:22,610 --> 00:40:25,670 >> Dus nu om dit te zien op een hoog niveau grafisch, 940 00:40:25,670 --> 00:40:31,080 laten we dit algoritme visualisatie een extra tijd. 941 00:40:31,080 --> 00:40:33,580 Zo zullen deze wij insertion sort noemen. 942 00:40:33,580 --> 00:40:37,700 We zullen het uit te voeren net zo snel, en hier begint het. 943 00:40:37,700 --> 00:40:39,580 En het ook, heeft een ander gevoel. 944 00:40:39,580 --> 00:40:42,180 Het is een soort van steeds beter en beter, maar het is nooit perfect 945 00:40:42,180 --> 00:40:44,630 totdat ik naar binnen en glad in deze lacunes. 946 00:40:44,630 --> 00:40:47,860 Want, nogmaals, ik ben alleen te nemen wat Ik word gezien van links naar rechts. 947 00:40:47,860 --> 00:40:50,350 Dus ik heb niet zo gelukkig krijgen dat alles perfect was. 948 00:40:50,350 --> 00:40:54,190 Daarom hebben we deze kleine had mispositions dat we vast in de tijd. 949 00:40:54,190 --> 00:40:58,890 >> Dus al deze algoritmen lijken draaien op iets verschillend tempo. 950 00:40:58,890 --> 00:41:02,030 In feite, wat zou je dan zeggen is de beste of de snelste tot nu toe? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, de eerste? 952 00:41:03,450 --> 00:41:05,000 Selectie soort, de tweede? 953 00:41:05,000 --> 00:41:08,450 Insertion sort, de derde? 954 00:41:08,450 --> 00:41:10,710 Ik hoor sommige selectie soorten. 955 00:41:10,710 --> 00:41:13,280 Andere gedachten? 956 00:41:13,280 --> 00:41:16,880 >> Dus het blijkt dat al deze algoritmes 957 00:41:16,880 --> 00:41:22,400 fundamenteel net zo efficiënt als elke other-- of, omgekeerd, zoals 958 00:41:22,400 --> 00:41:25,980 inefficiënt elkaar, omdat wij fundamenteel doen 959 00:41:25,980 --> 00:41:28,120 beter dan alle drie van deze algoritmen. 960 00:41:28,120 --> 00:41:29,990 En dat is een beetje een leugentje om bestwil, ook. 961 00:41:29,990 --> 00:41:32,580 als ik zeg zo efficiënt of als inefficiënt, 962 00:41:32,580 --> 00:41:35,040 dat althans super-grote waarden van n. 963 00:41:35,040 --> 00:41:38,450 Toen we hebben slechts acht mensen hier, of misschien 50 of zo balken op het scherm, 964 00:41:38,450 --> 00:41:41,645 u zult absoluut merken verschillen tussen deze drie algoritmen. 965 00:41:41,645 --> 00:41:44,020 Maar als n, het aantal mensen, of het aantal getallen, 966 00:41:44,020 --> 00:41:46,350 of het aantal mensen dat in de telefoon boek, of het aantal webpagina's 967 00:41:46,350 --> 00:41:48,230 in Google's databank wordt groter en groter, 968 00:41:48,230 --> 00:41:51,650 we zullen zien dat alle drie van deze algoritmen zijn eigenlijk vrij slecht. 969 00:41:51,650 --> 00:41:54,060 En we fundamenteel kunnen doen beter dan dat. 970 00:41:54,060 --> 00:41:56,830 >> Laten we eens een kijkje nemen, ten slotte, wat deze algoritmen misschien 971 00:41:56,830 --> 00:41:59,520 klinken in de context van een paar anderen 972 00:41:59,520 --> 00:42:03,550 alsmede via deze visualisatie hier 973 00:42:03,550 --> 00:42:06,860 die ons laat kennismaken met een aantal algoritmen. 974 00:42:06,860 --> 00:42:10,330 Laten we verder gaan en feliciteren onze deelnemers hier, die allen 975 00:42:10,330 --> 00:42:11,690 naargelang zich heel goed. 976 00:42:11,690 --> 00:42:15,124 Indien u graag een afscheidscadeau te nemen. 977 00:42:15,124 --> 00:42:16,540 U kunt uw nummers blijven ook. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 En wat je ziet, of liever hoort nu, 980 00:42:22,520 --> 00:42:25,710 is dat als we stellen geluiden elk van deze staven 981 00:42:25,710 --> 00:42:28,660 en associëren het met de software, verschillende geluidsfrequenties, 982 00:42:28,660 --> 00:42:33,970 u kunt uw gedachten meer audioly wrap rond wat elk van deze dingen 983 00:42:33,970 --> 00:42:34,470 lijken. 984 00:42:34,470 --> 00:42:39,325 De eerste is insertion sort 985 00:42:39,325 --> 00:42:44,275 >> [MELODIE] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Dit is bubble sort. 988 00:42:49,720 --> 00:42:54,175 >> [MELODIE] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Selectie soort. 991 00:43:18,222 --> 00:43:22,596 >> [MELODIE] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Iets genaamd merge sort. 994 00:43:35,150 --> 00:43:38,140 >> [MELODIE] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome soort. 997 00:43:51,278 --> 00:43:56,390 >> [MELODIE] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Dat is het voor CS50. 1000 00:44:09,430 --> 00:44:13,360 Wij zullen u op woensdag. 1001 00:44:13,360 --> 00:44:16,671 >> Verteller: En nu, "Deep Gedachten, "door Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Waarom is het een lus? 1004 00:44:21,590 --> 00:44:23,200 Waarom niet het beter te maken? 1005 00:44:23,200 --> 00:44:25,970 Ik zou een vijf lus te maken. 1006 00:44:25,970 --> 00:44:28,720 >> [Lachen]