1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Bine. 3 00:00:11,940 --> 00:00:16,470 Deci, acest lucru este CS50, iar acest lucru este acum începutul săptămânii trei. 4 00:00:16,470 --> 00:00:19,960 >> Deci, până acum, ne-am scris programe în C 5 00:00:19,960 --> 00:00:23,210 care să arate un pic ceva de genul asta aici. 6 00:00:23,210 --> 00:00:25,470 Deci avem un cuplu de ascuțite include în partea de sus. 7 00:00:25,470 --> 00:00:28,490 Avem int, principal, gol, și apoi ceva de făcut în mijloc, 8 00:00:28,490 --> 00:00:30,590 unele pic de cod în interiorul de această funcție. 9 00:00:30,590 --> 00:00:34,170 Dar cheie a fost faptul că ne-am spus nul aici. 10 00:00:34,170 --> 00:00:39,320 Deci gol, tot acest timp, specifică că acest program, atunci când a alerga, 11 00:00:39,320 --> 00:00:41,300 poate fi rulat numai prin numele său. 12 00:00:41,300 --> 00:00:46,330 Nu puteți introduce orice cuvânt sau Numerele după numele programului, atunci când 13 00:00:46,330 --> 00:00:46,830 conduce. 14 00:00:46,830 --> 00:00:51,200 Astfel, de exemplu, în cazul în care programul ar compilat într-un fișier numit salut, 15 00:00:51,200 --> 00:00:53,480 ai putea face ./hello, dar asta este. 16 00:00:53,480 --> 00:00:56,750 >> Singurul mod în care ar putea furnizarea de informații pentru acest program 17 00:00:56,750 --> 00:00:57,960 este de asteptare o funcție. 18 00:00:57,960 --> 00:00:59,790 De exemplu, ce funcție am fost, folosind până acum 19 00:00:59,790 --> 00:01:00,950 pentru a obține de intrare de la utilizator? 20 00:01:00,950 --> 00:01:02,117 >> Audiența: Ia șir. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Pentru a obține șir, sau te int, sau le-ați văzut pe alții, 22 00:01:04,700 --> 00:01:07,630 chiar dacă nu le-ați folosit încă, ca primi lung, lung și altele asemenea. 23 00:01:07,630 --> 00:01:09,380 Dar să presupunem că ne-am de fapt, doresc să înceapă 24 00:01:09,380 --> 00:01:12,760 scriere a programelor care sunt puțin mai mult versatil, și, sincer, un pic mai mult 25 00:01:12,760 --> 00:01:15,090 ca comenzile pe care le-ați primit, sperăm, 26 00:01:15,090 --> 00:01:16,550 un pic obișnuiți să. 27 00:01:16,550 --> 00:01:18,560 Ca spațiu cd Dropbox. 28 00:01:18,560 --> 00:01:20,800 Acest lucru, desigur, schimbări directorul, presupunând 29 00:01:20,800 --> 00:01:23,590 tu ești în casa John Harvard director, în folderul Dropbox. 30 00:01:23,590 --> 00:01:27,380 Între timp, o comandă de genul asta creează un nou director numit pset2, 31 00:01:27,380 --> 00:01:30,290 cum este posibil să aveți deja sau curând pentru problema va stabili două. 32 00:01:30,290 --> 00:01:33,970 Asigurați-Bună ziua, desigur, este o comandă care construiește un program numit salut 33 00:01:33,970 --> 00:01:35,770 dintr-un fișier numit salut punct c. 34 00:01:35,770 --> 00:01:39,140 Și în fiecare din aceste cazuri, acum, am avut 35 00:01:39,140 --> 00:01:43,620 oferă un argument cu privire la așa-numitele linie de comandă, prompt clipește, 36 00:01:43,620 --> 00:01:48,540 astfel încât face ceea ce știe să construiască, și așa că mkdir știe ce dosar pentru a crea, 37 00:01:48,540 --> 00:01:51,110 și astfel încât cd știe în cazul în care vrei să mergi. 38 00:01:51,110 --> 00:01:54,720 Dar până acum, ne-am tot spun că, funcția principală implicit, 39 00:01:54,720 --> 00:01:58,500 are o expresie gol în interiorul acestor paranteze, 40 00:01:58,500 --> 00:02:01,250 ceea ce înseamnă că nu pot lua nici un argument. 41 00:02:01,250 --> 00:02:03,240 >> Deci incepand de astazi, ceea ce vom face 42 00:02:03,240 --> 00:02:06,270 este, vom începe sprijinirea lucruri de genul asta chiar. 43 00:02:06,270 --> 00:02:08,990 De fapt, în acest caz, pe care o Nu în mod obișnuit de tip manual, 44 00:02:08,990 --> 00:02:11,130 Asigurați-a făcut acest lucru pentru noi, nu există 45 00:02:11,130 --> 00:02:15,840 un dar unul, doi, trei suplimentare siruri de caractere de la programul pe nume 46 00:02:15,840 --> 00:02:16,850 zăngănit. 47 00:02:16,850 --> 00:02:18,240 Deci, cum putem realiza acest lucru? 48 00:02:18,240 --> 00:02:20,260 >> Ei bine, incepand de astazi, în cazul în care ne-o dorim 49 00:02:20,260 --> 00:02:22,855 pentru a oferi introducere prin intermediul așa-numita linie de comandă, 50 00:02:22,855 --> 00:02:24,980 vom începe adăugarea aici ceea ce este în yellow-- 51 00:02:24,980 --> 00:02:30,520 înlocuirea gol cu ​​int argc virgulă șir argv suport deschis suport aproape. 52 00:02:30,520 --> 00:02:32,520 Acum, acest lucru este interesant pentru un cuplu de motive. 53 00:02:32,520 --> 00:02:35,690 O, o să să ne scrie programe, care sunt un pic mai dinamică. 54 00:02:35,690 --> 00:02:37,570 Dar, mai convingător, se va deschide 55 00:02:37,570 --> 00:02:40,340 acum o conversație cu privire la ce matrice poate într-adevăr 56 00:02:40,340 --> 00:02:43,300 fi utilizată, de ce un șir într-adevăr este sub capota, 57 00:02:43,300 --> 00:02:47,320 până săptămâna viitoare, când vom începe scufundări în chiar mai profundă cu privire la modul în care aparatul este 58 00:02:47,320 --> 00:02:48,590 a face toate de acest lucru lucruri. 59 00:02:48,590 --> 00:02:51,920 Dar pentru moment, să elaboreze, probabil, o imagine. 60 00:02:51,920 --> 00:02:54,950 >> Când scrii un program de cu principal declarat 61 00:02:54,950 --> 00:02:58,810 în acest fel, astfel încât principala are două argumente, un int 62 00:02:58,810 --> 00:03:03,233 si-- ce tip de date este al doilea argument? 63 00:03:03,233 --> 00:03:04,529 >> Audiența: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Deci, se pare, la prima vedere ca este o string, dar observa parantezele pătrate. 66 00:03:09,170 --> 00:03:12,760 Reamintim ultima dată când am introdus noțiunea de matrice. 67 00:03:12,760 --> 00:03:16,210 Și matrice utiliza paranteze pătrate într-un cuplu de contexte. 68 00:03:16,210 --> 00:03:19,160 S-ar putea utiliza în piața paranteze pentru a merge într-o matrice 69 00:03:19,160 --> 00:03:22,710 și a obține un anumit element, cum ar fi suport 0 sau 1 suport sau suport 2. 70 00:03:22,710 --> 00:03:25,500 Dar am văzut, dacă pentru scurt timp, saptamana trecuta, pe care le, de asemenea, 71 00:03:25,500 --> 00:03:28,790 folosi aceste paranteze pătrate până la declara dimensiunea unei matrice, 72 00:03:28,790 --> 00:03:31,790 dacă știi în avans câte int sau cât de multe siruri de caractere sau orice 73 00:03:31,790 --> 00:03:32,630 de fapt vrei. 74 00:03:32,630 --> 00:03:34,790 Deci, se dovedește nu există un al treilea context aici 75 00:03:34,790 --> 00:03:37,890 care nu are număr interior din parantezele pătrate. 76 00:03:37,890 --> 00:03:41,920 Când specificați, așa cum am aici, numele de ceva de genul argv, 77 00:03:41,920 --> 00:03:44,550 care este doar un mod fantezist de spunând vector argument, care 78 00:03:44,550 --> 00:03:47,750 este un alt mod fantezist de spune o serie de argumente, 79 00:03:47,750 --> 00:03:50,870 Suport deschis suport aproape la fel înseamnă că tu nu faci neapărat 80 00:03:50,870 --> 00:03:52,960 știe în avans cât de mare matrice va fi, 81 00:03:52,960 --> 00:03:55,070 dar știi că va fi un tablou. 82 00:03:55,070 --> 00:03:57,320 Deci, dacă nu știi număr nu-l pune în acolo, 83 00:03:57,320 --> 00:04:01,160 pentru suport deschis suport aproape înseamnă că argv nu este un șir de caractere, 84 00:04:01,160 --> 00:04:03,124 dar o serie de siruri de caractere. 85 00:04:03,124 --> 00:04:05,040 Deci, punct de vedere sintactic, dacă cred că înapoi săptămâna trecută, 86 00:04:05,040 --> 00:04:09,460 este foarte similar cu a spune ceva de genul varsta cuprinsa intre int placuta deschis, 87 00:04:09,460 --> 00:04:10,984 și apoi ceva după aceea. 88 00:04:10,984 --> 00:04:12,150 Deci, ce face acest lucru arata ca? 89 00:04:12,150 --> 00:04:13,399 Să trage de fapt, o imagine. 90 00:04:13,399 --> 00:04:18,756 Deci, atunci când rula acest program cu Main după două argumente definit în interiorul 91 00:04:18,756 --> 00:04:21,339 de aceste paranteze, tu au, în esență, cel puțin două bucăți 92 00:04:21,339 --> 00:04:23,560 de memorie predat la tine sub capota. 93 00:04:23,560 --> 00:04:26,550 O, cum voi atrage ca acest dreptunghi, va fi numit argc. 94 00:04:26,550 --> 00:04:30,645 Și, la fel ca o recapitulare rapidă, ceea ce este tipul de date de argc? 95 00:04:30,645 --> 00:04:31,270 Deci, este un întreg. 96 00:04:31,270 --> 00:04:33,480 Deci, un număr se va pentru a merge în rând argc-- 97 00:04:33,480 --> 00:04:35,660 faptul că vine de la numărul de argument. 98 00:04:35,660 --> 00:04:38,887 Între timp, am atras argv ca o matrice. 99 00:04:38,887 --> 00:04:40,970 Și eu nu știu cu adevărat cât timp o să fie, 100 00:04:40,970 --> 00:04:42,470 deci în scopuri de astăzi dot dot dot. 101 00:04:42,470 --> 00:04:43,636 S-ar putea obține din unele lungime. 102 00:04:43,636 --> 00:04:45,640 Dar am imaginat aici cel puțin patru dreptunghiuri. 103 00:04:45,640 --> 00:04:50,970 Deci, argv o bucată de memorie care stochează șir șir șir dot dot dot, 104 00:04:50,970 --> 00:04:53,950 și argc este doar o bucată de memorie pentru un număr întreg. 105 00:04:53,950 --> 00:04:55,710 >> Deci, acum, hai sa fim un pic mai precis. 106 00:04:55,710 --> 00:04:59,200 În cazul în care, atunci când am siruri de caractere în această matrice, numit 107 00:04:59,200 --> 00:05:03,290 argv, vreau să ajung la ele individual, la fel ca săptămâna trecută, 108 00:05:03,290 --> 00:05:05,670 vom folosi notația ca suport argv 0 109 00:05:05,670 --> 00:05:07,650 pentru a obține primul lucru pe care un tablou. 110 00:05:07,650 --> 00:05:10,440 Argv suport 1 pentru a obține al doilea lucru, și așa mai departe. 111 00:05:10,440 --> 00:05:14,597 Cheia aici fiind încă suntem 0 indexed-- suntem încă de numărare de la 0. 112 00:05:14,597 --> 00:05:16,430 Deci, acum hai de fapt a pus ceva în acest sens. 113 00:05:16,430 --> 00:05:21,670 Dacă ar fi să alcătuiască un program numit salut dintr-un fișier numit salut punct c, 114 00:05:21,670 --> 00:05:24,340 și apoi am rulat acest program cu punct slash salut, 115 00:05:24,340 --> 00:05:28,380 ceea ce face computerul meu, laptop-ul meu, arata ca sub capotă 116 00:05:28,380 --> 00:05:31,300 momentul în care am alerga dot slash salut și apăsați Enter? 117 00:05:31,300 --> 00:05:33,500 Ei bine, aceasta este, probabil, ceea ce am putea descrie 118 00:05:33,500 --> 00:05:37,010 ca conținutul computerului memorie, sau memorie RAM-- Random Access. 119 00:05:37,010 --> 00:05:40,330 Cu alte cuvinte, calculatorul, într-un fel pentru tine magic, 120 00:05:40,330 --> 00:05:45,360 pune numărul 1 în argc, AKA argcount, și se pune literalmente șirul 121 00:05:45,360 --> 00:05:48,200 ./hello în suport argv 0. 122 00:05:48,200 --> 00:05:51,750 Habar n-am, sincer, ce-i în consolă argv 1 sau 2 sau 3, 123 00:05:51,750 --> 00:05:55,550 pentru că în cazul în care utilizatorul nu are scris nimic în afară de ./hello, 124 00:05:55,550 --> 00:05:58,550 vom presupune că aceste sunt valori de gunoi, cel mai probabil, 125 00:05:58,550 --> 00:05:59,700 ca să spunem așa. 126 00:05:59,700 --> 00:06:02,650 Aceste bucăți de memorie există, dar nu depinde de noi 127 00:06:02,650 --> 00:06:05,710 să se uite la ei, pentru că argcount este doar unul. 128 00:06:05,710 --> 00:06:07,870 >> Acum, între timp, dacă am Trimite rula un alt program, 129 00:06:07,870 --> 00:06:12,250 cd, care este mai corect o comandă, în intermitent spațiu CD prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- când am rulat că, în mod eficient, atunci când programul este rulat cd, argc, 131 00:06:17,200 --> 00:06:22,270 în interiorul memoriei calculatorului meu, este pentru cel mai mai scurte de-al doilea numărul 2. 132 00:06:22,270 --> 00:06:25,936 Și apoi argv o consolă are cd, suport argv 1 are Dropbox, 133 00:06:25,936 --> 00:06:28,560 și apoi, desigur comenzii completează, astfel încât toate acestea memorie 134 00:06:28,560 --> 00:06:30,420 în esență, dispare și este folosit pentru altceva. 135 00:06:30,420 --> 00:06:32,270 Și de aceea spun doar o fracțiune de secundă. 136 00:06:32,270 --> 00:06:35,720 >> Între timp, dacă facem mkdir pset2, imaginea arata aproape la fel, 137 00:06:35,720 --> 00:06:37,900 dar cu diferite siruri de caractere în interiorul argv. 138 00:06:37,900 --> 00:06:42,570 Dacă aș face zăngănit de bord salut salut punct c, aceeași idee. 139 00:06:42,570 --> 00:06:47,060 Mai multe lucruri se completează pentru argv, și argc, desigur, este de 4. 140 00:06:47,060 --> 00:06:49,150 Cu alte cuvinte, chiar dacă această matrice 141 00:06:49,150 --> 00:06:52,950 s-ar putea dot dot dot, unora lungime variabilă, ca să spunem așa, 142 00:06:52,950 --> 00:06:56,720 stii mereu unde la sfârșitul anului acesta este, pentru că argc este de gând să-ți spun 143 00:06:56,720 --> 00:07:00,120 la ce moment trebuie sa te opresti uita la elemente în argv. 144 00:07:00,120 --> 00:07:03,660 Poti sa te uiti doar la patru în total, în acest caz. 145 00:07:03,660 --> 00:07:06,600 >> Așa că haideți să acum o privire la, probabil, un program simplu. 146 00:07:06,600 --> 00:07:09,070 Una care spune doar salut pentru cineva ca Zamyla. 147 00:07:09,070 --> 00:07:12,620 Deci, eu pretind am de gând să scrie un program într-un moment prin care am putea face 148 00:07:12,620 --> 00:07:16,670 ./hello spațiu Zamyla, și apoi vreau programul meu de a imprima ceva 149 00:07:16,670 --> 00:07:18,520 super-simplu ca "Bună ziua, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Acum, în trecut, am folosit getstring. 151 00:07:20,100 --> 00:07:22,850 Astfel, în trecut, chiar dacă sunteți nou la programare, 152 00:07:22,850 --> 00:07:27,180 șansele sunt ați putea bici un program care utilizează getstring 153 00:07:27,180 --> 00:07:29,390 si apoi foloseste printf la salut la Zamyla. 154 00:07:29,390 --> 00:07:31,290 Dar să nu folosească getString acest moment. 155 00:07:31,290 --> 00:07:37,510 Lasă-mă în schimb merge în Appliant și includ standard de I O dot ore. 156 00:07:37,510 --> 00:07:41,160 Permiteți-mi să includă, de asemenea, CS50 punct de ore. 157 00:07:41,160 --> 00:07:44,730 Acum int principal, iar acum sunt nu va face nule azi. 158 00:07:44,730 --> 00:07:51,200 În schimb, am de gând să fac int argc șir argv suport deschis suport aproape, 159 00:07:51,200 --> 00:07:52,640 nu specifica un număr. 160 00:07:52,640 --> 00:07:54,644 Și acum aici este meu de așa-numita să facă. 161 00:07:54,644 --> 00:07:57,560 Ceea ce am de gând să fac acum este, eu sunt de gând să faci un pic de un salt de credință, 162 00:07:57,560 --> 00:08:00,560 Am de gând să-și asume faptul că utilizatorului de gând să folosească acest program în mod corect, 163 00:08:00,560 --> 00:08:04,980 și eu pur și simplu o să face printf salut, sn%. 164 00:08:04,980 --> 00:08:06,630 Deci, nimic nou acolo. 165 00:08:06,630 --> 00:08:11,470 Dar eu vreau să pun acum orice cuvânt tipuri de utilizatori, după numele programului. 166 00:08:11,470 --> 00:08:16,970 Deci, dacă am face ./hello spațiu Zamyla, am vrei sa într-un fel programatic acces 167 00:08:16,970 --> 00:08:20,870 citez, "Zamyla." așa că am poate intra în vector meu argument, 168 00:08:20,870 --> 00:08:25,980 matrice mea de siruri de caractere, iar în cazul în care comanda, din nou, a fost ./hello spațiu Zamyla, 169 00:08:25,980 --> 00:08:29,340 ce număr nu vreau pentru a pune în argv aici? 170 00:08:29,340 --> 00:08:29,840 Audiența: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, deoarece Suport de 0 dovedește 172 00:08:32,355 --> 00:08:34,230 va fi Numele programului, așa cum am văzut. 173 00:08:34,230 --> 00:08:37,789 Deci, suport 1 este primul cuvânt că eu, utilizatorul, s-au tastat. 174 00:08:37,789 --> 00:08:39,559 Am de gând să mergeți mai departe și de a salva aceasta. 175 00:08:39,559 --> 00:08:42,830 Am de gând să merg în dosarul meu unde am pus acest dosar. 176 00:08:42,830 --> 00:08:44,920 Am de gând să fac să salut 3. 177 00:08:44,920 --> 00:08:46,230 OK comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Ce am gresit? 180 00:08:54,480 --> 00:08:57,270 Am fost luat prin surprindere mă pentru o clipă acolo. 181 00:08:57,270 --> 00:08:58,230 Ce am gresit? 182 00:08:58,230 --> 00:08:59,220 >> Audiența: Nume. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: fișierului de fapt numit hello3.c. 184 00:09:01,767 --> 00:09:03,850 Și am făcut asta doar pentru consistență, pentru că ne-am 185 00:09:03,850 --> 00:09:06,550 au avut hello.c în trecut în codul de on-line. 186 00:09:06,550 --> 00:09:11,550 Așa că haideți să repare această ./hello Suport bord 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 Și acum avem salut, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Între timp, eu pot schimba acest lucru la fi Rob, sau într-adevăr orice alt cuvânt. 190 00:09:17,650 --> 00:09:19,230 >> Dar să ia în considerare un caz colț. 191 00:09:19,230 --> 00:09:24,360 Ce te-ar putea aștepta se va întâmpla în cazul în care Nu introduceți numele cuiva, la toate? 192 00:09:24,360 --> 00:09:25,270 >> Audiența: Eroare. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: O eroare de un anumit fel, poate. 194 00:09:27,300 --> 00:09:28,200 Să vedem. 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 Deci, printf este, de fapt fiind un pic de protecție de noi 198 00:09:33,870 --> 00:09:38,131 aici, și literalmente de imprimare paren deschise nul, dar lucrurile chiar mai rău se poate întâmpla. 199 00:09:38,131 --> 00:09:40,130 Și doar pentru a demonstra tu ceva absolut 200 00:09:40,130 --> 00:09:42,800 nu ar trebui să facă, să mergem în aici și începe bage nasul. 201 00:09:42,800 --> 00:09:43,300 Corect? 202 00:09:43,300 --> 00:09:46,410 Dacă aș ști că imaginea în memorie este, în esență aceasta, 203 00:09:46,410 --> 00:09:52,660 argv suport 1 are Zamyla, argv Suport de 0 are ./hello, sau ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Ce este in suport 2? 205 00:09:55,400 --> 00:09:58,210 Deci, eu pot răspunde eu întrebarea, nu? 206 00:09:58,210 --> 00:10:00,460 Pot schimba doar 1 la un 2. 207 00:10:00,460 --> 00:10:07,270 Pot să recompilați acum salut 3, ./hello3 Să măriți și apăsați Enter. 208 00:10:07,270 --> 00:10:08,270 Ne pare rău. 209 00:10:08,270 --> 00:10:10,660 Nici un semn citat. 210 00:10:10,660 --> 00:10:12,540 Interesant. 211 00:10:12,540 --> 00:10:15,530 Deci, asta e un fel de rece la vedem ce mai este aici. 212 00:10:15,530 --> 00:10:17,130 >> Deci, ce altceva este în interiorul laptop-ul meu? 213 00:10:17,130 --> 00:10:20,390 Să-l salveze cu suport 3. 214 00:10:20,390 --> 00:10:25,190 Asigurați-hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Curios. 216 00:10:26,500 --> 00:10:30,560 Și acum să trecem într-adevăr bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Deci, asta e într-adevăr scufundari în memoria calculatorului meu. 218 00:10:34,340 --> 00:10:35,930 50 de indici în. 219 00:10:35,930 --> 00:10:41,950 Deci, asigurați salut 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Curios. 221 00:10:42,680 --> 00:10:44,660 Bine, acum sunt doar mergi la a lua nesăbuit. 222 00:10:44,660 --> 00:10:47,331 Să mergem la 5.000. 223 00:10:47,331 --> 00:10:47,830 În regulă. 224 00:10:47,830 --> 00:10:49,520 Așa că lasă-mă să recompilați. 225 00:10:49,520 --> 00:10:51,460 Asigurați-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 Acum, unii dintre voi, acolo s-ar putea fi un bec merge off. 229 00:10:59,250 --> 00:11:01,900 Câți dintre voi au văzut acest mesaj înainte? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Deci, de ce? 232 00:11:04,420 --> 00:11:07,250 >> Cote esti-- și nu e diferit lucruri care pot provoca aceasta, 233 00:11:07,250 --> 00:11:09,730 și în mod clar că ești în bine company-- avem în mod clar 234 00:11:09,730 --> 00:11:11,900 a provocat ceea ce se numește o eroare de segmentare. 235 00:11:11,900 --> 00:11:15,890 Și pe scurt pentru ziua de azi, am au atins un segment de memorie 236 00:11:15,890 --> 00:11:17,060 că eu nu ar trebui să aibă. 237 00:11:17,060 --> 00:11:19,970 În cazul în care un segment înseamnă doar o bucată de memorie pe care eu nu ar trebui să aibă. 238 00:11:19,970 --> 00:11:25,530 Acum, computerul garantează că, dacă am rula ./helloZamyla care pot atinge argv 239 00:11:25,530 --> 00:11:27,760 fi suport 0 și argv suport 1. 240 00:11:27,760 --> 00:11:32,730 Dar argc este valoarea 2, înseamnă că eu sunt numai allowed-- e un fel de onoare 241 00:11:32,730 --> 00:11:35,180 system-- la atingere suport 0 și suport 1. 242 00:11:35,180 --> 00:11:37,990 Dacă aș merge mai departe, nu e absolut va fi memoria acolo. 243 00:11:37,990 --> 00:11:40,660 RAM mea există fizic în calculator. 244 00:11:40,660 --> 00:11:42,080 Dar cine stie ce-i acolo? 245 00:11:42,080 --> 00:11:44,450 Într-adevăr, eu sunt difuzate mai multe programe la un moment dat. 246 00:11:44,450 --> 00:11:46,910 S-ar putea avea seen-- dacă nu aș fi fost face acest lucru pe Appliant 247 00:11:46,910 --> 00:11:49,937 dar pe Mac-ul meu sau PC---ar putea avea văzut conținutul unui e-mail. 248 00:11:49,937 --> 00:11:52,270 S-ar putea fi văzut-o clipă Mesaj Am trimis recent. 249 00:11:52,270 --> 00:11:55,390 Orice lucru care ar putea fi persistent în jurul în memorie 250 00:11:55,390 --> 00:11:59,180 ar fi putut fi accesate prin intermediul acest arbitrar pătrat notație suport. 251 00:11:59,180 --> 00:12:02,850 Sau, mai rău încă, este posibil să aveți a găsit una dintre parolele mele 252 00:12:02,850 --> 00:12:05,859 că aș scris recent în, că o Programul a fost stocat în memorie, astfel încât 253 00:12:05,859 --> 00:12:07,900 la mine autentifica, și atunci doar un fel de a plecat 254 00:12:07,900 --> 00:12:09,910 în RAM, până când am renunțat acest program. 255 00:12:09,910 --> 00:12:12,860 >> Și într-adevăr, aceasta este una dintre pericolul și cel puterile 256 00:12:12,860 --> 00:12:15,980 de a folosi un limbaj cum ar fi C. Aveți acces neîngrădit 257 00:12:15,980 --> 00:12:18,860 la întregul conținut de memorie a unui program, 258 00:12:18,860 --> 00:12:21,340 și ce baietii rai poate chiar face în aceste cases-- 259 00:12:21,340 --> 00:12:23,807 mai ales atunci când ne-am ajunge la programare web 260 00:12:23,807 --> 00:12:26,890 spre sfârșitul semestrului, vom revizita acest topic-- se scormoni în jurul, 261 00:12:26,890 --> 00:12:31,660 potențial, e cineva calculatorului memorie și pentru a găsi astfel de lucruri curioase 262 00:12:31,660 --> 00:12:32,570 după cum am văzut acolo. 263 00:12:32,570 --> 00:12:36,900 Sau chiar mai rău încă, parole pe care el sau ea poate apoi folosi pentru a face lucruri rele. 264 00:12:36,900 --> 00:12:40,240 >> Deci, în mod clar că nu ar fi făcut acest lucru, pentru că lucruri ciudate încep să se întâmple. 265 00:12:40,240 --> 00:12:42,310 Într-adevăr, acesta este un program de crashing. 266 00:12:42,310 --> 00:12:44,580 Acest lucru ar fi echivalent de sistem de operare Mac sau Windows 267 00:12:44,580 --> 00:12:46,770 o fereastră de program doar dispar. 268 00:12:46,770 --> 00:12:48,300 A apărut o eroare neașteptată. 269 00:12:48,300 --> 00:12:50,840 În mediul de linie de comandă vom vedea ceva de genul asta. 270 00:12:50,840 --> 00:12:54,480 Dar de aceea, este pur și simplu mă ating memorie care nu-mi aparține. 271 00:12:54,480 --> 00:12:57,090 >> Așa că haideți să ne apărăm împotriva acestei un pic într-un mod diferit 272 00:12:57,090 --> 00:12:59,010 uitandu-se la acest program aici. 273 00:12:59,010 --> 00:13:01,000 Deci, din nou, scheletul că am văzut earlier-- 274 00:13:01,000 --> 00:13:02,480 și am subliniat acest moment int. 275 00:13:02,480 --> 00:13:05,900 Și în tot acest timp principal are într-adevăr, a revenit o valoare. 276 00:13:05,900 --> 00:13:09,120 Chiar dacă în cele mai multe dintre prelegere noastre Exemple ne-am folosit niciodată dată 277 00:13:09,120 --> 00:13:10,990 reveni nimic în principal. 278 00:13:10,990 --> 00:13:13,710 Tocmai am scrie printf aproape acoladă și asta e tot. 279 00:13:13,710 --> 00:13:16,500 Dar pentru gratuit, ceea ce compilator făcut pentru tine, 280 00:13:16,500 --> 00:13:19,510 în mod eficient, se întoarce 0 pentru tine. 281 00:13:19,510 --> 00:13:22,950 Se pare out-- și e un pic counterintuitive-- că 0 este bun. 282 00:13:22,950 --> 00:13:24,690 Aceasta nu înseamnă fals în sine. 283 00:13:24,690 --> 00:13:29,080 0 este bun, și orice non-0 valoare, lumea a decis, 284 00:13:29,080 --> 00:13:30,619 poate semnifica o eroare. 285 00:13:30,619 --> 00:13:32,910 Deci, dacă v-ați stricat vreodată ceva de pe computerul dumneavoastră, 286 00:13:32,910 --> 00:13:36,600 sau un program de tocmai a murit pe tine și ați ajuns niște fereastră eronate 287 00:13:36,600 --> 00:13:40,360 pe ecran, eroare spunând negativ 49 sau eroare 23-- 288 00:13:40,360 --> 00:13:44,170 unele value-- aparent arbitrar care este pentru că un programator a greu cu coduri de 289 00:13:44,170 --> 00:13:49,370 o valoare negativă ca 49 sau pozitiv 23 pentru a reprezenta orice număr, îndrăznesc să spun, 290 00:13:49,370 --> 00:13:53,340 de 4 miliarde de lucruri posibile care ar putea merge prost într-un program. 291 00:13:53,340 --> 00:13:55,700 >> Deci, cum s-ar putea să iau avantaj al acestei mine? 292 00:13:55,700 --> 00:13:58,970 Ei bine, lasă-mă să deschid un program de că am scris în avans, 293 00:13:58,970 --> 00:14:01,450 și scormoni în jurul online numit salut 4. 294 00:14:01,450 --> 00:14:05,650 Și e aproape identic, cu excepția faptului că sa primit un pic de eroare de verificare. 295 00:14:05,650 --> 00:14:09,660 În acest caz, am declarat din nou principal ca având două argumente, 296 00:14:09,660 --> 00:14:13,180 dar de data aceasta, pe linia 17, o notificare Fac un pic de un control bun-simț. 297 00:14:13,180 --> 00:14:17,100 Fac sigur că argc este egal este egal cu 2. 298 00:14:17,100 --> 00:14:18,960 Pentru că dacă este, ca înseamnă că pot în condiții de siguranță 299 00:14:18,960 --> 00:14:21,420 atinge nu numai suport de 0, dar suport 1. 300 00:14:21,420 --> 00:14:24,330 Și am merge mai departe și tipări, în acest caz, Zamyla sau Rob 301 00:14:24,330 --> 00:14:26,020 sau orice cuvânt am scris afară. 302 00:14:26,020 --> 00:14:28,020 Și acum doar pentru a obține un pic mai buna, 303 00:14:28,020 --> 00:14:31,910 Am de gând să se întoarcă în mod explicit 0 pentru a semnifica totul este bine. 304 00:14:31,910 --> 00:14:33,300 Nu sa întâmplat nimic rău. 305 00:14:33,300 --> 00:14:38,590 >> Dar, prin convenție, am de gând să întoarcă 1, sau sincer orice-0 non valoare, 306 00:14:38,590 --> 00:14:40,160 în cazul în care ceva nu a mers bine. 307 00:14:40,160 --> 00:14:43,270 Acum, utilizatorul nu este de gând să într-adevăr observa ce se întâmplă. 308 00:14:43,270 --> 00:14:50,410 Într-adevăr, dacă am intra în acest director, ne-am mări și fac salut 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla se comportă ca ma astept. 310 00:14:54,210 --> 00:14:58,570 Dar dacă în loc să nu tastați nimic, nimic nu pare să se întâmple, 311 00:14:58,570 --> 00:14:59,680 dar nu se prăbuși. 312 00:14:59,680 --> 00:15:04,660 Și dacă eu fac schimb ceva ca Rob este un Proctor 313 00:15:04,660 --> 00:15:07,550 în schimbul de Thayer-- Informații arbitrar. 314 00:15:07,550 --> 00:15:13,680 Dar notificare, argv 1, 2, 3, 4, și 5 ar trebui să existe acum în memorie. 315 00:15:13,680 --> 00:15:16,540 Aceasta, de asemenea, nu ceea ce este programul meu așteaptă, 316 00:15:16,540 --> 00:15:20,300 pentru că am verificat dacă argc este egal este egal cu 2 sau nu. 317 00:15:20,300 --> 00:15:22,140 Deci, eu sunt acum apărarea împotriva acestui lucru. 318 00:15:22,140 --> 00:15:25,290 >> Acum, ca o paranteza, am programmer-- sau, mai degrabă ne-am users-- 319 00:15:25,290 --> 00:15:29,670 nu se vedea că 0 sau 1, dar folosind un instrument numit Debugger, sau alte instrumente, 320 00:15:29,670 --> 00:15:32,250 cum vom vedea, înainte de mult timp, tu programator 321 00:15:32,250 --> 00:15:36,590 se poate vedea de fapt, ceea ce ar putea fi merge greșit în interiorul programului dumneavoastră. 322 00:15:36,590 --> 00:15:39,170 >> Deci, orice întrebări cu privire la argc? 323 00:15:39,170 --> 00:15:40,873 Da. 324 00:15:40,873 --> 00:15:45,292 >> Audiența: Am văzut în cazul în care nu au avut caracterul, [inaudibil] 325 00:15:45,292 --> 00:15:49,669 a spus doar stele șir d, cum ar fi caracter asterisc virgulă. 326 00:15:49,669 --> 00:15:50,710 Sunt echivalent aici? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Ei sunt. 328 00:15:51,626 --> 00:15:55,080 Deci, întrebarea este, aveți programe de văzut ocazional 329 00:15:55,080 --> 00:15:57,270 ca asta, care nu face spune Suport șir argv 330 00:15:57,270 --> 00:16:01,015 dar spune în schimb ceva cum ar fi char suport argv stele. 331 00:16:01,015 --> 00:16:03,140 Și există chiar și alte Variantele pe care le-ar putea vedea. 332 00:16:03,140 --> 00:16:04,264 Ele sunt într-adevăr echivalente. 333 00:16:04,264 --> 00:16:06,240 Pentru moment, avem aceste un fel de roți de formare 334 00:16:06,240 --> 00:16:09,737 pe sub formă de șir în CS50 bibliotecă, dar în doar peste o săptămână 335 00:16:09,737 --> 00:16:12,570 sau așa vom elimina că obstrucție cu totul și de fapt 336 00:16:12,570 --> 00:16:16,820 uita-te la ceea ce char și steaua sunt, și cum cei care se referă la memorie 337 00:16:16,820 --> 00:16:18,140 reprezentare mai general. 338 00:16:18,140 --> 00:16:19,540 Deci, vom reveni la asta. 339 00:16:19,540 --> 00:16:21,540 >> Alte întrebări cu privire la argv nostru sau argc? 340 00:16:21,540 --> 00:16:22,397 Da. 341 00:16:22,397 --> 00:16:24,438 Audiența: De ce a returna o eroare [inaudibil]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: De ce a făcut-o returna o eroare only-- oh! 344 00:16:29,230 --> 00:16:31,813 În cazul anterior, atunci când ne au fost multa munca cu memorie, 345 00:16:31,813 --> 00:16:35,110 de ce a returna doar o eroare când am scris într-adevăr un număr mare? 346 00:16:35,110 --> 00:16:36,620 Răspunsul scurt este, doar am avut noroc. 347 00:16:36,620 --> 00:16:39,240 În general vorbind, un calculator alocă memorie în bucăți, 348 00:16:39,240 --> 00:16:42,900 și mi-a dat o bucată destul de mare, care Am scăpat, fără a fi observat, 349 00:16:42,900 --> 00:16:46,280 de atingere suport 2, suport 3, Suport 50, dar de îndată ce am împins 350 00:16:46,280 --> 00:16:49,080 norocul meu, m-am dus dincolo granițele bucată de memorie 351 00:16:49,080 --> 00:16:50,520 sistemul de operare mi-a dat. 352 00:16:50,520 --> 00:16:52,720 Și atunci se prinse în jos și a spus, nu. 353 00:16:52,720 --> 00:16:54,580 Eroare de segmentare. 354 00:16:54,580 --> 00:16:55,692 Da. 355 00:16:55,692 --> 00:16:58,890 >> Audiența: Cum calculator cunosc valoarea argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Cum calculator cunosc valoarea argc? 357 00:17:02,390 --> 00:17:07,920 Când rulați un program, acel program, prin natura prompt clipește, 358 00:17:07,920 --> 00:17:11,359 este înmânat matrice de cuvinte care au fost tastate 359 00:17:11,359 --> 00:17:13,300 la prompt, care a fost tastat la prompt. 360 00:17:13,300 --> 00:17:16,569 Și așa este de operare tău sistem care, în esență, 361 00:17:16,569 --> 00:17:20,329 populează argumente principale pentru tine. 362 00:17:20,329 --> 00:17:22,829 Deci, asta e unul dintre serviciile de pe care le obține, un fel de secret 363 00:17:22,829 --> 00:17:24,869 sub capota un sistem de operare. 364 00:17:24,869 --> 00:17:27,118 Alte intrebari? 365 00:17:27,118 --> 00:17:27,618 Da. 366 00:17:27,618 --> 00:17:29,787 >> Audiența: Ce groapa de bază înseamnă? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Ce groapa de bază înseamnă? 368 00:17:31,370 --> 00:17:32,950 Deci, asta este o întrebare bună. 369 00:17:32,950 --> 00:17:35,312 Și lasă-mă să mă întorc în acest director aici. 370 00:17:35,312 --> 00:17:37,270 Și veți observa că Am un nou dosar acolo. 371 00:17:37,270 --> 00:17:41,670 Se numește într-adevăr de bază, și este de fapt, de obicei, un fișier decent de dimensiuni. 372 00:17:41,670 --> 00:17:45,300 Aceasta este, în esență, un instantaneu de conținutul de memorie de program meu 373 00:17:45,300 --> 00:17:46,902 sau RAM cand sa prabusit. 374 00:17:46,902 --> 00:17:49,110 Și acest lucru va fi util, potențial, diagnostic, 375 00:17:49,110 --> 00:17:52,850 odată ce vom vorbi într-un viitor curs și secțiunea despre depanare, 376 00:17:52,850 --> 00:17:55,730 pentru ca poti face, de fapt, echivalent cu o autopsie digitale 377 00:17:55,730 --> 00:18:00,300 pe care dosar pentru a ajuta dau seama ce ai făcut greșit în programul tău. 378 00:18:00,300 --> 00:18:01,220 Da. 379 00:18:01,220 --> 00:18:04,450 >> Audiența: Este argc o comandă în în sine, sau poate ai numi asta ceva? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Bună întrebare. 381 00:18:05,575 --> 00:18:08,040 Este argc o comandă în sine, sau poate ai numi asta ceva? 382 00:18:08,040 --> 00:18:09,290 Nu este cu siguranta o comandă. 383 00:18:09,290 --> 00:18:13,500 Este pur și simplu o variabilă de numele sau denumirea unui argument lui, 384 00:18:13,500 --> 00:18:15,481 și așa absolut noi ar putea numi acest foo, 385 00:18:15,481 --> 00:18:18,480 am putea numi acest bar, care tind a fi-du-te la cuvintele pe care un calculator 386 00:18:18,480 --> 00:18:19,860 om de stiinta merge la. 387 00:18:19,860 --> 00:18:22,820 Dar, prin convenție, vom folosi argc și argv. 388 00:18:22,820 --> 00:18:25,360 Dar asta e doar un om convenție, nimic mai mult. 389 00:18:25,360 --> 00:18:25,860 În regulă. 390 00:18:25,860 --> 00:18:28,140 Deci se dovedește, am fost spune un pic de o lie-- alb 391 00:18:28,140 --> 00:18:31,264 și sincer, în viitor, veți vedea ne-am spus alte minciuni albe. 392 00:18:31,264 --> 00:18:33,510 Dar pentru moment, vom de coaja, unul din acestea. 393 00:18:33,510 --> 00:18:37,310 În acest caz, aici, când am anterior a fugit un program ca ./hello sau ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, am avut conținutul meu memoria calculatorului caută aproximativ ca 395 00:18:42,780 --> 00:18:43,280 aceasta. 396 00:18:43,280 --> 00:18:45,070 Dar amintesc ce un șir este. 397 00:18:45,070 --> 00:18:49,279 Ce am spus în urmă cu o săptămână ce o string este de fapt sub capota? 398 00:18:49,279 --> 00:18:50,320 Audiența: Array de caractere. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Este un matrice de caractere, nu? 400 00:18:52,111 --> 00:18:55,760 Deci, am putea avea o serie de siruri, dar, la rândul său, un șir 401 00:18:55,760 --> 00:18:57,150 este o matrice de caractere. 402 00:18:57,150 --> 00:19:00,010 Deci, dacă eu chiar vreau să fie anal când am trage această imagine, 403 00:19:00,010 --> 00:19:03,290 Eu ar trebui să fie într-adevăr de desen un pic mai mult ca aceasta, 404 00:19:03,290 --> 00:19:08,000 prin care în fiecare dintre acestea indici de matrice mea argv, 405 00:19:08,000 --> 00:19:11,432 există în sine un șir întreg care se află într-o matrice. 406 00:19:11,432 --> 00:19:13,140 Și acum minciuna albă ne spune astăzi 407 00:19:13,140 --> 00:19:15,181 este că imaginea nu arata destul de genul asta. 408 00:19:15,181 --> 00:19:19,110 De fapt, cele mai mici pătrate sunt de obicei, in afara de dreptunghiuri mari 409 00:19:19,110 --> 00:19:19,610 acolo. 410 00:19:19,610 --> 00:19:21,280 Dar vom reveni la asta înainte de mult timp. 411 00:19:21,280 --> 00:19:25,440 Dar acest lucru este ./hello backslash 0, că fiind caracterul special pe care 412 00:19:25,440 --> 00:19:28,310 delimitează sfârșitul unui șir, și ne-am luat un alt unul după 413 00:19:28,310 --> 00:19:29,360 Numele Zamyla lui. 414 00:19:29,360 --> 00:19:30,900 Deci, ce înseamnă asta? 415 00:19:30,900 --> 00:19:33,410 >> Ei bine, lasă-mă să mergeți mai departe și deschide alte două exemple 416 00:19:33,410 --> 00:19:35,220 care sunt disponibile on-line. 417 00:19:35,220 --> 00:19:40,590 Unul se numește argv1.c și celălalt este argv2. 418 00:19:40,590 --> 00:19:44,260 Este un program de super-simplu, care este diferit de programele anterioare 419 00:19:44,260 --> 00:19:47,260 în care acum eu sunt, folosind argc și argv aici. 420 00:19:47,260 --> 00:19:54,300 Și acum integrarea cu o buclă de în linia 18, de la i = 0 la până la argc. 421 00:19:54,300 --> 00:19:56,850 Și ceea ce am de gând să fac cu această linie de cod aici? 422 00:19:56,850 --> 00:19:58,270 În limba engleză. 423 00:19:58,270 --> 00:20:00,510 Acest lucru demonstrează în mod evident, utilizarea de argc. 424 00:20:00,510 --> 00:20:03,670 Dar, în limba engleză, ceea ce face se face în cazul în care am rulat acest program? 425 00:20:03,670 --> 00:20:04,366 Da? 426 00:20:04,366 --> 00:20:07,386 >> Audiența: Va imprima ta ecran ori de câte ori doriți. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Exact. 428 00:20:08,260 --> 00:20:10,480 Deci, indiferent de cuvintele pe care le tastați la prompt, e 429 00:20:10,480 --> 00:20:13,120 O să regurgiteze le la mine câte unul pe fiecare linie. 430 00:20:13,120 --> 00:20:14,370 Deci, să mergem mai departe și de a face acest lucru. 431 00:20:14,370 --> 00:20:17,862 Lasă-mă să intru în directorul meu și de a face să ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Și acum, hai să-l păstrați simplu. 434 00:20:21,770 --> 00:20:23,834 Să facem nimic la început. 435 00:20:23,834 --> 00:20:26,750 A făcut imprima un singur lucru, și că este, într-adevăr numele programului, 436 00:20:26,750 --> 00:20:28,240 pentru că în consolă 0. 437 00:20:28,240 --> 00:20:33,290 Dacă spun acum foo, se va face cei doi, iar dacă spun bar foo, 438 00:20:33,290 --> 00:20:35,580 se va spune aceste trei lucruri. 439 00:20:35,580 --> 00:20:37,740 Acum, că e oarecum interesant, poate. 440 00:20:37,740 --> 00:20:41,450 Dar amintesc că argv este o matrice de siruri de caractere, 441 00:20:41,450 --> 00:20:45,960 dar un șir este o matrice de caractere, astfel încât să putem lua lucrurile la un alt nivel 442 00:20:45,960 --> 00:20:48,560 și se aplică ca bază logică și face cod care 443 00:20:48,560 --> 00:20:51,160 arata un pic mai criptic, desigur. 444 00:20:51,160 --> 00:20:53,540 Dar, printr-un imbricate buclă, ceva înrudit 445 00:20:53,540 --> 00:20:57,030 a ceea ce s-ar putea retrage de la Mario, de exemplu, dacă ați făcut-o în acest fel. 446 00:20:57,030 --> 00:21:00,380 >> Deci, acum observa pe linia 19, sunt din nou iterarea peste argumentele mele, 447 00:21:00,380 --> 00:21:02,410 de la 0 la până la argc. 448 00:21:02,410 --> 00:21:05,510 Și acum, în linie 21-- sunt împrumut un truc de la ultima week-- 449 00:21:05,510 --> 00:21:11,090 Sunt verificarea ceea ce este lungime de suport argv i. 450 00:21:11,090 --> 00:21:12,920 Am depozitarea că răspunsul la n. 451 00:21:12,920 --> 00:21:18,230 Și apoi am integrare de la j la pana la n, unde j este inițializată la 0. 452 00:21:18,230 --> 00:21:19,460 Deci, convenție pentru numărare. 453 00:21:19,460 --> 00:21:22,335 După ce l-am folosit, dacă aveți o bucla imbricate, nu i se poate folosi din nou, 454 00:21:22,335 --> 00:21:25,770 altfel vei rescrie, potențial, valoarea afara buclei interioare. 455 00:21:25,770 --> 00:21:27,200 Deci, eu sunt, folosind j de convenție. 456 00:21:27,200 --> 00:21:28,020 S-ar putea folosi k. 457 00:21:28,020 --> 00:21:31,080 Dacă aveți mai mult de k, probabil au prea mult cuiburi, de obicei. 458 00:21:31,080 --> 00:21:33,800 Dar acum, observa printf meu linie este ușor diferită. 459 00:21:33,800 --> 00:21:37,520 Eu nu imprimă% s, eu sunt imprimarea% c, care, desigur, 460 00:21:37,520 --> 00:21:39,460 este un substituent pentru un char. 461 00:21:39,460 --> 00:21:40,770 >> Și acum observa acest lucru sintaxă. 462 00:21:40,770 --> 00:21:41,270 New. 463 00:21:41,270 --> 00:21:42,630 Nu l-am mai văzut până acum. 464 00:21:42,630 --> 00:21:47,290 Dar în mod logic, acest lucru înseamnă doar obține șirul i-lea în argv 465 00:21:47,290 --> 00:21:50,067 și pentru a obține j ce? 466 00:21:50,067 --> 00:21:50,900 Audiența: caractere. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: caractere în acel șir. 468 00:21:52,800 --> 00:21:57,100 Deci, prin utilizarea paranteze pătrate urmat de paranteze pătrate, 469 00:21:57,100 --> 00:22:00,390 aceasta este prima scufundare în siruri de caractere argv lui, 470 00:22:00,390 --> 00:22:02,225 și apoi a doua paranteze pătrate, cu j 471 00:22:02,225 --> 00:22:06,580 este scufundări în caracterele că șir special în argv. 472 00:22:06,580 --> 00:22:09,562 Și apoi, doar pentru o bună măsură, Am imprimarea unei noi linii de aici. 473 00:22:09,562 --> 00:22:12,020 Deci, acum lasă-mă să merg mai departe și deschide o fereastră ușor mai mare 474 00:22:12,020 --> 00:22:13,600 astfel încât să putem vedea acest lucru în acțiune. 475 00:22:13,600 --> 00:22:15,700 Lasă-mă să intru în acel dosar. 476 00:22:15,700 --> 00:22:22,550 Și acum nu face argv-2-- whoops-- face-argv 2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 Și e un pic cam greu pentru a citi vertical, 479 00:22:24,860 --> 00:22:27,920 dar asta e într-adevăr numele Program, urmat de un rând liber. 480 00:22:27,920 --> 00:22:30,210 Acum, lasă-mă să merg mai departe și face foo. 481 00:22:30,210 --> 00:22:33,210 La fel de greu de citit, dar e într-adevăr, imprimarea unui caracter pe linie. 482 00:22:33,210 --> 00:22:36,780 Și dacă eu fac bar, e acum imprimarea cei linie cu linie. 483 00:22:36,780 --> 00:22:40,140 Deci, Takeaway aici nu este atât de mult că, wow, uita-te la acest nou truc elegant 484 00:22:40,140 --> 00:22:44,750 în cazul în care puteți obține la conținutul de caractere specifice unei matrice, a 485 00:22:44,750 --> 00:22:48,380 ci mai degrabă modul în care luăm aceste de bază idei, cum ar fi indexarea într-o matrice, 486 00:22:48,380 --> 00:22:51,620 și apoi indexarea într-un matrice care a fost în această matrice, 487 00:22:51,620 --> 00:22:56,180 și doar aplicând aceleași idei la exemple ceva mai sofisticate. 488 00:22:56,180 --> 00:22:59,560 Dar elementele de bază într-adevăr nu au sa schimbat, chiar de săptămâna trecută. 489 00:22:59,560 --> 00:23:02,350 >> Acum, acest lucru este un fel de timp, în care, reamintim, în săptămâna zero, 490 00:23:02,350 --> 00:23:04,110 ne-am jucat cu o carte de telefon de genul asta. 491 00:23:04,110 --> 00:23:06,670 Și chiar dacă acest lucru este în mod evident bucăți fizic de hîrtie, 492 00:23:06,670 --> 00:23:09,150 vă puteți gândi un fel de a o carte de telefon ca o matrice. 493 00:23:09,150 --> 00:23:12,770 Desigur, dacă ar fi să reimplementeze acest bucati aceste bucăți de hârtie 494 00:23:12,770 --> 00:23:15,260 într-un calculator, probabil v-ar folosi ceva 495 00:23:15,260 --> 00:23:20,270 ca o matrice pentru a stoca toate de cei nume și numere de pe o până la capăt 496 00:23:20,270 --> 00:23:23,800 prin Z. Deci, aceasta este frumos, pentru că ea ne permite o oportunitate, 497 00:23:23,800 --> 00:23:28,310 probabil, să ia în considerare modul în care s-ar putea să pună în aplicare de fapt ceva de genul asta. 498 00:23:28,310 --> 00:23:31,250 Ca și în cazul unei serii de uși aici. 499 00:23:31,250 --> 00:23:36,380 Deci, dacă am putea-- avem nevoie de un voluntari pentru a veni în sus. 500 00:23:36,380 --> 00:23:36,980 Să vedem. 501 00:23:36,980 --> 00:23:40,650 O fata nefamiliare poate, față necunoscut, probabil. 502 00:23:40,650 --> 00:23:42,090 Ce zici de culoarea portocalie? 503 00:23:42,090 --> 00:23:42,680 Aici. 504 00:23:42,680 --> 00:23:45,870 Shirt Orange, haide sus. 505 00:23:45,870 --> 00:23:52,230 >> Să mergem mai departe acum și mișcare aceste uși pe la partea, 506 00:23:52,230 --> 00:23:54,020 muta aceste din drum pentru o clipă. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Care e numele tău? 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 Mă bucur să te cunosc. 513 00:23:59,451 --> 00:23:59,950 În regulă. 514 00:23:59,950 --> 00:24:04,500 Deci, avem în spatele acestor șase usi electronic pe screen-- 515 00:24:04,500 --> 00:24:07,810 sau, mai degrabă, șapte uși pe screen-- o grămadă de numere. 516 00:24:07,810 --> 00:24:10,099 Și v-am spus nimic în acord advance--? 517 00:24:10,099 --> 00:24:11,140 AJAY: Nimic în avans. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Tot ce vreau să faci acum este de a găsi pentru mine, și pentru noi, 519 00:24:14,730 --> 00:24:20,920 într-adevăr, numărul 50, un pas la un moment dat. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Numărul 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: numărul 50. 522 00:24:22,580 --> 00:24:24,746 Și tu poți descoperi ce-i în spatele fiecare dintre aceste uși 523 00:24:24,746 --> 00:24:27,930 pur și simplu prin atingerea cu un deget. 524 00:24:27,930 --> 00:24:31,364 La naiba. [Râsete] 525 00:24:31,364 --> 00:24:34,560 >> [Aplauze] 526 00:24:34,560 --> 00:24:39,540 >> Foarte bine făcut. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Avem un cadou minunat premiu pentru tine aici. 529 00:24:44,090 --> 00:24:46,520 Alege de filme noi discutat săptămâna trecută. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, omule. 531 00:24:47,362 --> 00:24:49,050 Oh, n-am mai văzut Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 În regulă. 534 00:24:50,140 --> 00:24:53,790 Deci, stai doar o clipă. 535 00:24:53,790 --> 00:24:57,430 Cum-- să facă acest o moment-- docil 536 00:24:57,430 --> 00:25:00,412 cum ai merge cu privire la găsi numărul 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Am ales la întâmplare. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Deci ai ales aleatoriu și a avut noroc. 539 00:25:03,420 --> 00:25:03,790 AJAY: Da. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Excelent. 542 00:25:05,050 --> 00:25:08,470 Deci, acum, nu ai avut ajuns norocos, ce altceva 543 00:25:08,470 --> 00:25:10,210 s-ar fi întâmplat în spatele acestor uși? 544 00:25:10,210 --> 00:25:12,930 Deci, dacă am merge mai departe și dezvălui aceste numere de aici, 545 00:25:12,930 --> 00:25:15,180 sunt în realitate, în ordine aleatorie. 546 00:25:15,180 --> 00:25:17,750 Și cel mai bun ai putea avea făcut, sincer, este de, în cele din urmă, 547 00:25:17,750 --> 00:25:19,410 în cel mai rău caz, verificarea-le pe toate. 548 00:25:19,410 --> 00:25:23,000 Deci ai super-norocos, care nu este ceea ce am numi un algoritm. 549 00:25:23,000 --> 00:25:24,730 Da, felicitări. 550 00:25:24,730 --> 00:25:27,010 Dar acum let's-- umor mă, dacă ai putea. 551 00:25:27,010 --> 00:25:28,310 Să mergem la această filă aici. 552 00:25:28,310 --> 00:25:31,460 Și aici sunt numerele în mod clar ceea ce pare a fi o ordine aleatoare, 553 00:25:31,460 --> 00:25:32,280 și ei au fost. 554 00:25:32,280 --> 00:25:35,160 Dar acum, dacă în loc să mă cerere că în spatele acestor uși 555 00:25:35,160 --> 00:25:39,070 sunt numere care sunt sortate. 556 00:25:39,070 --> 00:25:41,780 Scopul este acum de asemenea, ne găsi numărul 50. 557 00:25:41,780 --> 00:25:45,910 Dar o fac algoritmic, și spune-ne cum te duci despre asta. 558 00:25:45,910 --> 00:25:48,020 Și dacă vi se pare, tu ține filmul. 559 00:25:48,020 --> 00:25:49,520 Nu se pare, l-ai da înapoi. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Deci, am de gând să verific capetele în primul rând, pentru a determina dacă este-- 562 00:25:58,112 --> 00:26:02,048 [Râsete și aplauze] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Poftim. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Să aruncăm o privire la un de predecesorii lui Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, care nu a fost destul de norocos ca. 568 00:26:25,450 --> 00:26:28,670 OK, deci sarcina dumneavoastră aici, Sean, este următoarea. 569 00:26:28,670 --> 00:26:32,970 Am ascuns în spatele acestor usi numărul șapte, 570 00:26:32,970 --> 00:26:37,200 dar ascuns în unele dintre aceste uși precum și alte numere non-negative. 571 00:26:37,200 --> 00:26:40,730 Și obiectivul tău este să se gândească la acest lucru rândul de sus de numere ca doar un tablou. 572 00:26:40,730 --> 00:26:43,590 Suntem doar o secvență de piese de hârtie cu numere din spatele lor. 573 00:26:43,590 --> 00:26:47,640 Iar obiectivul dvs. este, folosind doar partea de sus matrice aici, găsește-mi numărul șapte. 574 00:26:47,640 --> 00:26:51,200 Și noi sunt apoi merge la critica cum te duci despre a face aceasta. 575 00:26:51,200 --> 00:26:52,920 Găsiți-ne la numărul șapte, vă rog. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nu 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 Nu este o întrebare capcană. 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 În acest moment scorul dvs. nu este foarte bun, asa ca s-ar putea, de asemenea continua. 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 Du-te mai departe. 590 00:27:39,802 --> 00:27:42,510 Sincer, nu pot să nu mă întreb la ce te gândești chiar. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: eu pot lua de la doar rândul de sus. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Doar rândul de sus. 593 00:27:46,240 --> 00:27:47,281 Deci, ai trei din stânga. 594 00:27:47,281 --> 00:27:48,310 Deci, mă găsească 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [Audienta strigăte SUGESTII] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Deci, atât din acestea au fost uimitoare pentru diferite motive. 599 00:28:26,130 --> 00:28:29,150 Deci, aceasta este în cazul în care ne-am rămas în urmă o clipă, 600 00:28:29,150 --> 00:28:32,530 și a perspectivei cheie aici a fost aceste uși a avut numere 601 00:28:32,530 --> 00:28:37,390 în spatele lor, care au fost sortate, idealul Takeaway pentru care este că ai putea face 602 00:28:37,390 --> 00:28:39,670 schimbă în mai bine în acest al doilea exemplu-- 603 00:28:39,670 --> 00:28:42,380 și, într-adevăr, că a fost a lui Sean Prima încercare de numere aleatoare 604 00:28:42,380 --> 00:28:45,460 la fel de devreme--, dar cât mai curând ca aceste numere sunt sortate, 605 00:28:45,460 --> 00:28:47,980 la fel ca cartea de telefon, ceea ce se poate face în mod evident? 606 00:28:47,980 --> 00:28:50,090 Sau cum poți să impulsioneze această cunoaștere? 607 00:28:50,090 --> 00:28:51,530 Da. 608 00:28:51,530 --> 00:28:54,910 >> Audiența: Du-te la jumătatea drumului [neauzit]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Da. 610 00:28:55,660 --> 00:28:56,160 Exact. 611 00:28:56,160 --> 00:28:59,680 Deci instinctul inițial Ajay a fost pentru a verifica capete, așa cum îmi amintesc, 612 00:28:59,680 --> 00:29:02,320 și apoi ne-am cam terminat exemplul repede. 613 00:29:02,320 --> 00:29:05,220 Dar dacă am început să facem acest lucru mai mult metodic de-a lungul acestor linii, 614 00:29:05,220 --> 00:29:07,860 dar începând, probabil, în de mijloc, deoarece acestea sunt clasificate în funcție, 615 00:29:07,860 --> 00:29:10,900 de îndată ce ne dezvăluie număr de 16, de aceea ne-am stiu-- 616 00:29:10,900 --> 00:29:14,850 și să facem exact asta-- noi Prin urmare, știm că 50 de ani, în cazul de astăzi, 617 00:29:14,850 --> 00:29:16,080 a ajuns să fie la dreapta. 618 00:29:16,080 --> 00:29:18,735 Deci, la fel ca in saptamana zero, atunci când am rupt cartea de telefon în jumătate 619 00:29:18,735 --> 00:29:21,490 și a aruncat jumătate din problemă departe, aceeași idee aici. 620 00:29:21,490 --> 00:29:23,680 Putem arunca această jumătate a problemei departe. 621 00:29:23,680 --> 00:29:25,730 Și, probabil, ceea ce s-ar putea face algoritmic, 622 00:29:25,730 --> 00:29:28,710 o dată ce știi că 50 trebuie să fie la dreapta, în cazul în care e oriunde, 623 00:29:28,710 --> 00:29:31,390 este să încercați acolo, în mijlocul din ușile rămase. 624 00:29:31,390 --> 00:29:33,450 Desigur, este mai mare de 50 decât 42, astfel încât să putem 625 00:29:33,450 --> 00:29:36,060 arunca acest rămasă sfert a problemei departe, 626 00:29:36,060 --> 00:29:38,510 și, în cele din urmă, identificarea ceva de genul 50. 627 00:29:38,510 --> 00:29:41,050 Dar, la fel ca și în cazul carte de telefon, aceste numere 628 00:29:41,050 --> 00:29:44,560 s-au dat la noi deja în Pentru sortate, care ne lasă 629 00:29:44,560 --> 00:29:47,450 cu întrebarea, cum a face tu a lua lucrurile în ordine sortată? 630 00:29:47,450 --> 00:29:49,640 Și, sincer, la ce costuri? 631 00:29:49,640 --> 00:29:51,390 Este un lucru să fie înmânat cartea de telefon 632 00:29:51,390 --> 00:29:54,810 și apoi impresiona prietenii tăi de găsirea un număr de telefon într-adevăr rapid, corect? 633 00:29:54,810 --> 00:29:58,520 Ruperea 32 de pagini pentru a găsi un persoană din 4 miliarde de pagini, 634 00:29:58,520 --> 00:30:00,470 am spus a fost un exemplu extrem. 635 00:30:00,470 --> 00:30:03,320 Dar cât de mult timp a fost nevoie Verizon pentru a sorta cartea de telefon? 636 00:30:03,320 --> 00:30:06,170 Cât timp a ne lua a sorta aceste șapte numere? 637 00:30:06,170 --> 00:30:10,110 Aceasta este o întrebare pe care ne-am până acum complet ignorate. 638 00:30:10,110 --> 00:30:12,330 >> Așa că haideți să răspundă la această întrebare acum. 639 00:30:12,330 --> 00:30:15,920 Și suntem cu toții din filmele acum, dar avem niste bile de stres. 640 00:30:15,920 --> 00:30:19,480 În cazul în care, să zicem, opt voluntari nu m-ar deranja cu noi aici? 641 00:30:19,480 --> 00:30:24,100 Să mergem mai departe și de a face, cum despre voi patru, trei dintre voi aici? 642 00:30:24,100 --> 00:30:25,290 Ia niște fețe noi. 643 00:30:25,290 --> 00:30:27,220 Și voi patru acolo? 644 00:30:27,220 --> 00:30:30,760 Și acum-- să nu de părtinire aici-- și număr de opt pe aici, pe la sfârșitul anului. 645 00:30:30,760 --> 00:30:32,060 Hai sus. 646 00:30:32,060 --> 00:30:32,560 În regulă. 647 00:30:32,560 --> 00:30:37,480 Deci, ce avem aici pentru fiecare dintre voi este un număr. 648 00:30:37,480 --> 00:30:40,055 Dacă doriți să mergeți înainte, să ia acest număr. 649 00:30:40,055 --> 00:30:40,763 Care e numele tău? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, bine. 652 00:30:43,100 --> 00:30:44,297 Tu ești numărul 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 Tu ești numărul 2. 657 00:30:47,530 --> 00:30:49,100 Și dă-i drumul, cum am mână tu foile de hârtie, 658 00:30:49,100 --> 00:30:52,130 linia-vă în fața muzicii se află în aceeași ordine ca acolo sus. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Bună, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, mă bucur să te văd. 661 00:30:53,970 --> 00:30:54,520 Numărul 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, numărul 4. 664 00:30:56,760 --> 00:30:57,549 Bine ai venit la bord. 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 Numărul 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, numărul 6. 670 00:31:02,766 --> 00:31:03,589 >> Frances: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, numărul 7. 672 00:31:04,880 --> 00:31:05,200 Și? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, numărul 8. 675 00:31:06,815 --> 00:31:07,100 În regulă. 676 00:31:07,100 --> 00:31:08,766 Du-te și du-te în această ordine. 677 00:31:08,766 --> 00:31:11,440 Lasă-mă să pun un rămasă muzica sta in loc. 678 00:31:11,440 --> 00:31:13,670 În cazul în care aveți nevoie de un stand? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Du-te și pune doar numerele în cazul în care publicul le poate vedea pe, 681 00:31:18,710 --> 00:31:20,340 muzica stea cu fața spre exterior. 682 00:31:20,340 --> 00:31:27,240 Și sperăm, primul nostru cec bun-simț aici-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Așteaptă un minut. 685 00:31:29,070 --> 00:31:31,140 Nu avem un 8. 686 00:31:31,140 --> 00:31:35,180 Am nevoie de a vă evacua din exemplul cumva. 687 00:31:35,180 --> 00:31:35,680 Nu 688 00:31:35,680 --> 00:31:36,940 Nu, e în regulă. 689 00:31:36,940 --> 00:31:37,890 Să vedem. 690 00:31:37,890 --> 00:31:38,880 Putem face acest lucru. 691 00:31:38,880 --> 00:31:39,440 Stand de. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Acolo mergem. 694 00:31:45,740 --> 00:31:46,800 Corect. 695 00:31:46,800 --> 00:31:47,360 În regulă. 696 00:31:47,360 --> 00:31:50,260 Deci, acum avem 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Excelent. 699 00:31:51,360 --> 00:31:54,400 >> Deci, intrebarea la îndemână este, la ce costuri, și prin ce metodă, 700 00:31:54,400 --> 00:31:58,580 putem sorta de fapt, aceste numere aici astfel încât să putem tip de muncă înapoi, 701 00:31:58,580 --> 00:32:02,759 în cele din urmă, și decide-- este într-adevăr impresionant, este într-adevăr eficient, 702 00:32:02,759 --> 00:32:04,550 pe care le pot împărți și cuceri o carte de telefon? 703 00:32:04,550 --> 00:32:06,716 Este într-adevăr eficient, care Eu pot diviza și cuceri 704 00:32:06,716 --> 00:32:08,600 aceste piese digitale de hârtie pe bord, 705 00:32:08,600 --> 00:32:14,500 dacă poate o să ne coste o avere în timp sau cicluri de energie sau CPU 706 00:32:14,500 --> 00:32:17,340 pentru a obține de fapt, datele noastre în unele ordine sortate? 707 00:32:17,340 --> 00:32:18,930 Deci, haideți să cerem această întrebare. 708 00:32:18,930 --> 00:32:22,077 >> Deci primul rând, aceste numere sunt în ordine aleatorie destul de mult, 709 00:32:22,077 --> 00:32:24,160 și am de gând să propună unul algoritm, sau un proces 710 00:32:24,160 --> 00:32:25,970 prin care putem rezolva acesti oameni. 711 00:32:25,970 --> 00:32:28,100 Am de gând să se apropie acest destul de naiv. 712 00:32:28,100 --> 00:32:30,730 Și am de gând să recunoască că e un fel de mult pentru mine 713 00:32:30,730 --> 00:32:32,890 să-și încheie în jurul mintea mea Date întregul set dintr-o dată. 714 00:32:32,890 --> 00:32:33,640 Dar știi ce? 715 00:32:33,640 --> 00:32:37,450 Am de gând să facă ceva remedieri marginale foarte simple. 716 00:32:37,450 --> 00:32:41,152 4 și 2 sunt în ordine, dacă este Scopul este de a merge de la 1 la până la 8. 717 00:32:41,152 --> 00:32:41,860 Deci, stii ce? 718 00:32:41,860 --> 00:32:43,776 Am de gând să aveți baieti schimba, dacă veți comuta 719 00:32:43,776 --> 00:32:46,380 punct de vedere fizic poziții și piesele tale de hârtie. 720 00:32:46,380 --> 00:32:47,894 Acum 4 și 6, acestea sunt în ordine. 721 00:32:47,894 --> 00:32:49,060 Am de gând să plece celor fi. 722 00:32:49,060 --> 00:32:50,227 6 și 8, acestea sunt în ordine. 723 00:32:50,227 --> 00:32:51,185 Pleca le fie. 724 00:32:51,185 --> 00:32:52,170 8 și1, din ordin. 725 00:32:52,170 --> 00:32:54,790 Dacă voi doi nu ar deranja schimbarea. 726 00:32:54,790 --> 00:32:57,300 Acum 8 și 3, în cazul în care voi putea schimba. 727 00:32:57,300 --> 00:32:59,320 8 și 7, în cazul în care voi putea schimba. 728 00:32:59,320 --> 00:33:01,790 Și 8 și 5, în cazul în care voi putea schimba. 729 00:33:01,790 --> 00:33:03,980 >> Acum, am am făcut? 730 00:33:03,980 --> 00:33:05,200 Nu, evident că nu. 731 00:33:05,200 --> 00:33:07,880 Dar am făcut situație mai bună, nu? 732 00:33:07,880 --> 00:33:09,430 Care era numele tău, numărul 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Deci, Rachel are barbotează în mod eficient până destul de departe, 735 00:33:12,850 --> 00:33:15,660 tot drumul până la sfârșitul anului matrice mea de numere aici. 736 00:33:15,660 --> 00:33:17,310 Și astfel încât problema este un fel de rezolvat. 737 00:33:17,310 --> 00:33:21,670 Acum, în mod clar, 2 mai trebuie încă muta un pic, și 4 și 6 și 1. 738 00:33:21,670 --> 00:33:24,420 Dar mi se pare a fi ajuns un mai aproape de soluție. 739 00:33:24,420 --> 00:33:26,790 Deci, să se aplice același euristică naiv din nou. 740 00:33:26,790 --> 00:33:27,690 2 și 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 și 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 și 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Să swap. 744 00:33:32,230 --> 00:33:33,200 6 și 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Să swap. 746 00:33:34,420 --> 00:33:35,580 6 și 7 este OK. 747 00:33:35,580 --> 00:33:36,590 7 și 5, nope. 748 00:33:36,590 --> 00:33:37,790 Să swap. 749 00:33:37,790 --> 00:33:38,470 Iar acum 7 și 8. 750 00:33:38,470 --> 00:33:39,862 Și ce e numele tău? 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 Deci, acum, Frances este chiar și o mai bună poziție, pentru că acum 7 și 8 754 00:33:44,230 --> 00:33:46,440 sunt bule corect până la partea de sus. 755 00:33:46,440 --> 00:33:47,510 Deci, 2 și 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 și 1, de swap Să. 757 00:33:48,720 --> 00:33:50,410 4 și 3, de swap Să. 758 00:33:50,410 --> 00:33:51,550 4 și 6, tu ești OK. 759 00:33:51,550 --> 00:33:53,340 6 și 5, de swap Să. 760 00:33:53,340 --> 00:33:54,590 Și acum tipii ăia sunt buni. 761 00:33:54,590 --> 00:33:55,780 Suntem aproape acolo. 762 00:33:55,780 --> 00:33:57,706 2 și 1, în ordine, așa schimba. 763 00:33:57,706 --> 00:33:59,080 Și acum să-mi fac un control bun-simț. 764 00:33:59,080 --> 00:34:03,080 2 și 3, 3 și 4, 4 și 5, 5 și 6, 6 și 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, deci am terminat. 766 00:34:05,060 --> 00:34:09,310 >> Dar cu ce preț am făcut sorta aceste numere de aici? 767 00:34:09,310 --> 00:34:13,960 Ei bine, câți pași am făcut potențial ia atunci când sortarea acesti oameni? 768 00:34:13,960 --> 00:34:15,710 Ei bine, ne vom întoarce la această întrebare. 769 00:34:15,710 --> 00:34:18,030 Dar, sincer, dacă ai un pic plictisit, asta e 770 00:34:18,030 --> 00:34:22,270 fel de revelatoare în care acest lucru nu a fost poate cel mai eficient algoritm. 771 00:34:22,270 --> 00:34:25,230 Și într-adevăr, sincer, eu transpir cu atât mai mers înainte și înapoi. 772 00:34:25,230 --> 00:34:26,639 Asta nu se simt deosebit de eficient. 773 00:34:26,639 --> 00:34:27,805 Deci, haideți să încercăm altceva. 774 00:34:27,805 --> 00:34:31,870 Dacă voi putea reseta vă la aceste opt valori. 775 00:34:31,870 --> 00:34:32,969 Bună treabă. 776 00:34:32,969 --> 00:34:36,570 >> Să aruncăm o privire digital, pentru doar o clipă înainte de a încerca altceva, 777 00:34:36,570 --> 00:34:38,179 la ceea ce sa întâmplat. 778 00:34:38,179 --> 00:34:41,330 Până aici, tu esti pe cale de a vedea o vizualizare a acestor opt oameni 779 00:34:41,330 --> 00:34:44,719 prin albastru și roșu baruri reprezintă numere. 780 00:34:44,719 --> 00:34:46,670 Mai înalt bar, cu atât mai mare numărul. 781 00:34:46,670 --> 00:34:48,510 Mai scurtă bara, mai mic numărul. 782 00:34:48,510 --> 00:34:51,560 Și ce ai de gând pentru a vedea este în ordine aleatorie mai mult de opt. 783 00:34:51,560 --> 00:34:55,830 Vei vedea aceste bare obtinerea clasificate în funcție de același algoritm, 784 00:34:55,830 --> 00:34:59,890 sau un set de instrucțiuni, care vom numi de acum înainte, cu bule de sortare. 785 00:34:59,890 --> 00:35:04,000 Deci observați, fiecare al doilea sau cam asa ceva, două bare sunt iluminate în roșu, 786 00:35:04,000 --> 00:35:05,590 sunt comparate de către calculator. 787 00:35:05,590 --> 00:35:08,630 Și apoi, dacă bara de mare și bar mic sunt în ordine, 788 00:35:08,630 --> 00:35:11,220 acestea sunt schimbate pentru mine. 789 00:35:11,220 --> 00:35:15,120 >> Acum, acest lucru este incredibil de plictisitor pentru a viziona acest lucru, cu siguranță, 790 00:35:15,120 --> 00:35:18,630 pentru foarte mult timp, dar observați takeaway-- baruri mari se deplasează la dreapta, 791 00:35:18,630 --> 00:35:20,460 mici baruri se deplasează la stânga. 792 00:35:20,460 --> 00:35:23,380 Să abandona acest proces și grăbi 793 00:35:23,380 --> 00:35:27,330 a fi mult mai rapid, astfel încât să putem a obține un sentiment la nivel înalt a ceea ce, 794 00:35:27,330 --> 00:35:29,970 într-adevăr, cu bule de sortare este de a face. 795 00:35:29,970 --> 00:35:33,150 Într-adevăr, este barbotare până la partea dreapta a listei, 796 00:35:33,150 --> 00:35:35,260 sau matrice, barele mai mari. 797 00:35:35,260 --> 00:35:40,020 Și invers, micile barele sunt barbotare se extindă în jos la stânga, 798 00:35:40,020 --> 00:35:42,950 deși într-un ritm mai rapid decât am făcut-o deja. 799 00:35:42,950 --> 00:35:45,850 Deci, mai greu pentru a vedea cu oamenii, dar vizual asta e într-adevăr ceea ce 800 00:35:45,850 --> 00:35:46,540 se întâmpla. 801 00:35:46,540 --> 00:35:49,110 >> Dar să încercăm o fundamental diferit de abordare acum. 802 00:35:49,110 --> 00:35:52,387 Să încercăm un alt algoritm prin care putem avea 803 00:35:52,387 --> 00:35:59,640 băieți începe în aceste originală poziții, care a fost această ordine aici. 804 00:35:59,640 --> 00:36:00,827 Și să mergem mai departe acum. 805 00:36:00,827 --> 00:36:02,910 Și am de gând să fac ceva chiar simplu, nu? 806 00:36:02,910 --> 00:36:06,710 În retrospectivă, schimbarea din nou pe perechi și din nou, aproape un pic inteligent. 807 00:36:06,710 --> 00:36:10,460 Să facem lucruri chiar mai naiv, unde dacă vreau să sortați acești oameni, 808 00:36:10,460 --> 00:36:12,560 permiteți-mi să continui să cauți pentru cel mai mic element. 809 00:36:12,560 --> 00:36:14,570 Deci, chiar acum, 4 este cel mai mic număr l-am văzut. 810 00:36:14,570 --> 00:36:15,695 Am de gând să-mi amintesc asta. 811 00:36:15,695 --> 00:36:17,750 Nu, 2 este mai bine, și amintiți-vă că. 812 00:36:17,750 --> 00:36:20,730 1 este chiar mai mic. 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 Unu care e numele tău? 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 Deci, Artie, dă-i drumul. 819 00:36:25,460 --> 00:36:27,043 Am de gând să vă scoate din linia. 820 00:36:27,043 --> 00:36:28,400 Dacă ai putea să te întorci aici. 821 00:36:28,400 --> 00:36:30,790 Și am nevoie pentru a face loc pentru el. 822 00:36:30,790 --> 00:36:32,040 Avem un punct de decizie aici. 823 00:36:32,040 --> 00:36:36,000 Cum am putea face loc pentru Artie aici la începutul unde numărul 1 parte? 824 00:36:36,000 --> 00:36:36,770 >> Audiența: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, ne-am ar putea schimba toată lumea. 826 00:36:38,950 --> 00:36:40,860 Dar propune o optimizare. 827 00:36:40,860 --> 00:36:43,410 Se simte un pic enervant pentru mine de a cere patru persoane 828 00:36:43,410 --> 00:36:44,620 pentru a muta tot drumul în jos. 829 00:36:44,620 --> 00:36:45,520 Ce altceva puteam face? 830 00:36:45,520 --> 00:36:46,360 >> Audiența: Schimba-le. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Schimba-le. 832 00:36:46,850 --> 00:36:47,900 Și ce e numele tău? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, mutați. 835 00:36:50,330 --> 00:36:54,440 Mult mai eficient doar pentru a avea Locuri de swap Jacob cu Artie, 836 00:36:54,440 --> 00:36:56,710 spre deosebire de forțând Toate aceste patru oameni, 837 00:36:56,710 --> 00:36:58,734 Vă mulțumesc foarte mult, la poziția lor corectă. 838 00:36:58,734 --> 00:37:01,150 Ce este frumos despre Artie acum, el este în poziția corectă. 839 00:37:01,150 --> 00:37:02,060 Să facem acest lucru din nou. 840 00:37:02,060 --> 00:37:03,730 2, care este cel mai mic număr l-am văzut. 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 este cu siguranta cel mai mic. 844 00:37:07,467 --> 00:37:08,550 Nu trebuie să faci nici o lucrare. 845 00:37:08,550 --> 00:37:09,320 Să o facem din nou. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Cel mai mic? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nu. 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 Permiteți-mi să amintesc 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Permiteți-mi să amintesc 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Cel mai mic număr am vazute pe aceasta trecere este de 3. 857 00:37:18,490 --> 00:37:20,340 Dacă ai fi venit pe afară. 858 00:37:20,340 --> 00:37:21,986 În cazul în care avem de gând să te pun? 859 00:37:21,986 --> 00:37:22,860 Și cum te cheamă? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, suntem Va trebui să te evacueze. 862 00:37:25,780 --> 00:37:28,670 Dar asta este mult mai eficient, pentru a schimba doar doi oameni, 863 00:37:28,670 --> 00:37:31,850 decât de a avea mai multe persoane se eschiva de fapt peste. 864 00:37:31,850 --> 00:37:32,850 Acum, haideți să facem asta din nou. 865 00:37:32,850 --> 00:37:34,980 Am de gând pentru a selecta 4, deci hai afară. 866 00:37:34,980 --> 00:37:36,540 Și cine o să se mute? 867 00:37:36,540 --> 00:37:37,750 Numărul 8, desigur. 868 00:37:37,750 --> 00:37:40,260 Dacă aș găsi acum numărul 5, ieși afară. 869 00:37:40,260 --> 00:37:42,104 Numărul 8 va fi evacuat din nou. 870 00:37:42,104 --> 00:37:43,770 Acum voi să găsească numărul 6 în loc. 871 00:37:43,770 --> 00:37:44,410 7 în loc. 872 00:37:44,410 --> 00:37:45,080 8 în loc. 873 00:37:45,080 --> 00:37:48,590 >> Ceea ce tocmai am făcut acum este ceva numit selecție de sortare, 874 00:37:48,590 --> 00:37:52,560 și dacă vom vizualiza acest lucru, este O să se simtă un pic diferit. 875 00:37:52,560 --> 00:37:56,800 Să mergem mai departe și din acest Meniul aici, acest visualization-- 876 00:37:56,800 --> 00:38:02,920 hai să schimbăm acest sa-- haide, Firefox. 877 00:38:02,920 --> 00:38:07,610 Hai să schimbăm acest lucru la fel de selecție. 878 00:38:07,610 --> 00:38:11,830 Și să-l accelereze ca înainte, și începe vizualizarea acum. 879 00:38:11,830 --> 00:38:13,990 Și acest algoritm are un simt diferit la ea. 880 00:38:13,990 --> 00:38:16,480 La fiecare iterație, sincer, e chiar mai simplu. 881 00:38:16,480 --> 00:38:18,385 Eu doar selectând cel mai mic element. 882 00:38:18,385 --> 00:38:21,510 Acum, sincer, am un pic de noroc, care timp, prin faptul că sortate super-rapid. 883 00:38:21,510 --> 00:38:22,660 Elementele au fost aleator. 884 00:38:22,660 --> 00:38:25,520 Nu este, cum vom în cele din urmă a se vedea, în mod fundamental mai repede. 885 00:38:25,520 --> 00:38:29,400 Dar sa vedem un al treilea și ultimul se apropie aici de la ceea ce se întâmplă. 886 00:38:29,400 --> 00:38:36,230 Așa că haideți să mergem mai departe și să resetați baieti pentru ultima oară să fie în această ordine aici. 887 00:38:36,230 --> 00:38:38,450 >> Și acum, am de gând să fi un pic mai inteligent, 888 00:38:38,450 --> 00:38:40,220 doar pentru a completa algoritmii noștri. 889 00:38:40,220 --> 00:38:41,230 Am de gând să fac asta. 890 00:38:41,230 --> 00:38:43,140 Am de gând să nu meargă înainte și înapoi atât de mult. 891 00:38:43,140 --> 00:38:44,900 Sincer, m-am săturat de Toate acestea drumuiri. 892 00:38:44,900 --> 00:38:47,691 Mă duc să iau ceea ce am dat la începutul listei, 893 00:38:47,691 --> 00:38:49,460 și am de gând să rezolve că atunci și acolo. 894 00:38:49,460 --> 00:38:50,140 Deci, iată-ne aici. 895 00:38:50,140 --> 00:38:51,030 Numărul 4. 896 00:38:51,030 --> 00:38:53,680 Am de gând să introduceți numărul 4 într-o listă sortată. 897 00:38:53,680 --> 00:38:54,180 Efectuat. 898 00:38:54,180 --> 00:38:58,300 Eu pretind acum, și doar pentru a face acest lucru mai mult clar, această parte din lista mea este sortat. 899 00:38:58,300 --> 00:39:02,610 Este un fel de cerere stupid, dar într-adevăr 4 sunt sortate într-o listă de dimensiune unu. 900 00:39:02,610 --> 00:39:04,210 Acum, am de gând să ia pe numărul 2. 901 00:39:04,210 --> 00:39:07,670 Numărul 2 Eu acum merg la introduce în locul potrivit. 902 00:39:07,670 --> 00:39:08,680 Deci, în cazul în care nu fac parte 2? 903 00:39:08,680 --> 00:39:09,824 Evident, aici. 904 00:39:09,824 --> 00:39:11,490 Deci, mergeți mai departe și pentru a muta înapoi, dacă ai putea. 905 00:39:11,490 --> 00:39:14,406 Și de ce nu ia pur și simplu nu voi muzica stă cu tine de data asta. 906 00:39:14,406 --> 00:39:17,020 Și să introduceți cu forța în prima parte a listei. 907 00:39:17,020 --> 00:39:17,936 Deci, un pic mai mult de lucru. 908 00:39:17,936 --> 00:39:20,890 A trebuit să se mute în jurul lui Iacov, și care e numele tău? 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 Dar cel puțin eu nu am mers înainte și înapoi. 912 00:39:24,350 --> 00:39:25,739 Iau doar lucrurile cum merg. 913 00:39:25,739 --> 00:39:27,530 Eu doar le introduce în locul potrivit. 914 00:39:27,530 --> 00:39:29,220 6, aceasta este, de fapt destul de ușor. 915 00:39:29,220 --> 00:39:31,510 Să te introduce acolo, dacă doar a vrut să se mute peste puțin. 916 00:39:31,510 --> 00:39:32,870 Numărul 8, de asemenea, destul de ușor. 917 00:39:32,870 --> 00:39:33,741 Chiar acolo. 918 00:39:33,741 --> 00:39:34,240 La naiba. 919 00:39:34,240 --> 00:39:37,590 Numărul 1 nu putem doar schimba cu Amin aici, 920 00:39:37,590 --> 00:39:39,340 pentru că se întâmplă să distrugeți comanda. 921 00:39:39,340 --> 00:39:40,660 Așa că trebuie să fie un pic mai inteligent. 922 00:39:40,660 --> 00:39:42,770 Deci, Artie, dacă ai putea copii de rezervă pentru o clipă. 923 00:39:42,770 --> 00:39:46,550 Să mergem mai departe și să schimbe acum, spre deosebire de algoritmi noastre anterioare, 924 00:39:46,550 --> 00:39:50,910 pentru a face loc pentru Artie chiar aici, la început. 925 00:39:50,910 --> 00:39:54,690 Deci, la sfârșitul zilei, eu sunt un fel de a face ceea ce am vrut, pentru a evita înainte. 926 00:39:54,690 --> 00:39:57,770 Și astfel algoritmul meu este un fel a inversat, intelectual, 927 00:39:57,770 --> 00:39:59,070 de la ceea ce a fost inițial. 928 00:39:59,070 --> 00:40:01,240 Eu doar fac deplasarea într-un alt punct. 929 00:40:01,240 --> 00:40:02,291 Acum sunt la 3. 930 00:40:02,291 --> 00:40:02,790 Oh, la naiba. 931 00:40:02,790 --> 00:40:04,039 Trebuie să facem din nou mai mult de lucru. 932 00:40:04,039 --> 00:40:05,060 Așa că hai să te împinge afară. 933 00:40:05,060 --> 00:40:09,360 Să mergem 8, 6, 4-- oh Oh-- și 3 este de gând să merg acolo. 934 00:40:09,360 --> 00:40:11,490 Deci cel puțin ușoare economii de data asta. 935 00:40:11,490 --> 00:40:13,100 7, nu prea mult de lucru de făcut. 936 00:40:13,100 --> 00:40:15,370 Deci, dacă doriți să pop înapoi, să vă introduceți. 937 00:40:15,370 --> 00:40:17,440 Și, în fine, 5, dacă doresc să pop înapoi, ne-am 938 00:40:17,440 --> 00:40:22,610 Trebuie să-ți schimbe, tu, te, până când cinci este în loc. 939 00:40:22,610 --> 00:40:25,670 >> Deci, acum, pentru a vedea acest lucru la o nivel înalt grafic, 940 00:40:25,670 --> 00:40:31,080 hai sa facem acest algoritm vizualizare un timp suplimentar. 941 00:40:31,080 --> 00:40:33,580 Deci aceasta vom numi inserare fel. 942 00:40:33,580 --> 00:40:37,700 Vom alerga la fel de rapid, și ea începe aici. 943 00:40:37,700 --> 00:40:39,580 Și, de asemenea, are un simt diferit. 944 00:40:39,580 --> 00:40:42,180 Este un fel de a obține o mai bună și mai bine, dar niciodată nu e perfect 945 00:40:42,180 --> 00:40:44,630 până când am merge în și neted în aceste lacune. 946 00:40:44,630 --> 00:40:47,860 Pentru că, din nou, eu sunt doar a lua ceea ce Am fost dat de la stânga la dreapta. 947 00:40:47,860 --> 00:40:50,350 Deci, eu nu am primit atât de norocos că totul a fost perfect. 948 00:40:50,350 --> 00:40:54,190 De aceea am avut aceste mici mispositions că am fix în timp. 949 00:40:54,190 --> 00:40:58,890 >> Așa că toate aceste algoritmi par să rula la ușor diferite ritmuri. 950 00:40:58,890 --> 00:41:02,030 De fapt, ceea ce ați spune că este cel mai bun sau cel mai rapid până acum? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, primul? 952 00:41:03,450 --> 00:41:05,000 Un fel de selecție, cea de a doua? 953 00:41:05,000 --> 00:41:08,450 Un fel de inserție, a treia? 954 00:41:08,450 --> 00:41:10,710 Am auzit că unele tipuri de selecție. 955 00:41:10,710 --> 00:41:13,280 Alte gânduri? 956 00:41:13,280 --> 00:41:16,880 >> Deci, se dovedește că toate aceste algoritmi 957 00:41:16,880 --> 00:41:22,400 sunt fundamental la fel de eficient ca fiecare other-- sau, dimpotrivă, la fel cum 958 00:41:22,400 --> 00:41:25,980 ineficient ca fiecare parte, pentru că putem face în mod fundamental 959 00:41:25,980 --> 00:41:28,120 mai bine decât toate trei acestor algoritmi. 960 00:41:28,120 --> 00:41:29,990 Și asta e un pic de o minciună albă, de asemenea. 961 00:41:29,990 --> 00:41:32,580 cand spun ca eficient sau ca ineficiente, 962 00:41:32,580 --> 00:41:35,040 că este, cel puțin pentru Valorile super-mari de n. 963 00:41:35,040 --> 00:41:38,450 Când ne-am doar opt oameni aici, sau poate 50 sau cam asa ceva baruri de pe ecran, 964 00:41:38,450 --> 00:41:41,645 veți observa absolut diferențe între aceste trei algoritmi. 965 00:41:41,645 --> 00:41:44,020 Dar, așa cum n, numărul de persoane, sau numărul de numere, 966 00:41:44,020 --> 00:41:46,350 sau numărul de persoane în telefon carte, sau numărul de pagini web 967 00:41:46,350 --> 00:41:48,230 în baza de date Google devine mai mare și mai mare, 968 00:41:48,230 --> 00:41:51,650 vom vedea că toate trei din acestea algoritmi sunt de fapt destul de slab. 969 00:41:51,650 --> 00:41:54,060 Și ce putem face în mod fundamental mai mult decât atât. 970 00:41:54,060 --> 00:41:56,830 >> Să aruncăm o privire, în cele din urmă, la ceea ce s-ar putea acești algoritmi 971 00:41:56,830 --> 00:41:59,520 suna ca în context de alte câteva 972 00:41:59,520 --> 00:42:03,550 precum prin intermediul acestui vizualizare aici 973 00:42:03,550 --> 00:42:06,860 care ne va introduce în un număr de algoritmi. 974 00:42:06,860 --> 00:42:10,330 Să mergem mai departe și să-l felicit participanții noștri de aici, toate de care 975 00:42:10,330 --> 00:42:11,690 se sortate foarte bine. 976 00:42:11,690 --> 00:42:15,124 Dacă doriți să luați un cadou de despărțire. 977 00:42:15,124 --> 00:42:16,540 Puteți păstra numerele de asemenea. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Și ceea ce veți vedea, sau, mai degrabă auzi, acum, 980 00:42:22,520 --> 00:42:25,710 este că așa cum ne-am pus sunete la fiecare dintre aceste bare 981 00:42:25,710 --> 00:42:28,660 și se asociază cu software-ul, frecvență diferită de sunet, 982 00:42:28,660 --> 00:42:33,970 puteți încheia mintea mai audioly ta jurul a ceea ce fiecare dintre aceste lucruri 983 00:42:33,970 --> 00:42:34,470 arata. 984 00:42:34,470 --> 00:42:39,325 Prima dintre care este insertie fel 985 00:42:39,325 --> 00:42:44,275 >> [TONE] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Acest lucru este cu bule fel. 988 00:42:49,720 --> 00:42:54,175 >> [TONE] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Un fel de selecție. 991 00:43:18,222 --> 00:43:22,596 >> [TONE] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Ceva numit îmbinare fel. 994 00:43:35,150 --> 00:43:38,140 >> [TONE] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Fel Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [TONE] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Asta e pentru CS50. 1000 00:44:09,430 --> 00:44:13,360 Ne vedem miercuri. 1001 00:44:13,360 --> 00:44:16,671 >> Narator: Și acum, "Deep Gânduri, "de Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 De ce este aceasta o pentru buclă? 1004 00:44:21,590 --> 00:44:23,200 De ce nu face mai bine? 1005 00:44:23,200 --> 00:44:25,970 Mi-ar face o buclă cinci. 1006 00:44:25,970 --> 00:44:28,720 >> [Râsete]