1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Va bene. 3 00:00:11,940 --> 00:00:16,470 Quindi questo è CS50, e questo è ora dell'inizio tre settimane. 4 00:00:16,470 --> 00:00:19,960 >> Quindi, fino ad ora, abbiamo stata la scrittura di programmi in C 5 00:00:19,960 --> 00:00:23,210 quello sguardo un po ' qualcosa di simile a questo qui. 6 00:00:23,210 --> 00:00:25,470 Quindi abbiamo un paio di tagliente comprende in alto. 7 00:00:25,470 --> 00:00:28,490 Abbiamo int, principale, vuoto, e poi qualcosa da fare nel mezzo, 8 00:00:28,490 --> 00:00:30,590 qualche pezzo di codice all'interno di tale funzione. 9 00:00:30,590 --> 00:00:34,170 Ma fondamentale è stato il fatto che stiamo dicendo nulla qui. 10 00:00:34,170 --> 00:00:39,320 Quindi nulla, tutto questo tempo, specifica che questo programma, quando eseguito, 11 00:00:39,320 --> 00:00:41,300 può essere eseguito solo tramite il suo nome. 12 00:00:41,300 --> 00:00:46,330 Non è possibile digitare qualsiasi altra parola o numeri dopo il nome del programma quando 13 00:00:46,330 --> 00:00:46,830 eseguirlo. 14 00:00:46,830 --> 00:00:51,200 Così, per esempio, se il programma fosse compilato in un file chiamato ciao, 15 00:00:51,200 --> 00:00:53,480 si potrebbe fare ./ciao, ma che è esso. 16 00:00:53,480 --> 00:00:56,750 >> L'unico modo che si potrebbe fornire input a questo programma 17 00:00:56,750 --> 00:00:57,960 è chiamando una funzione. 18 00:00:57,960 --> 00:00:59,790 Ad esempio, quale funzione abbiamo avuto usando finora 19 00:00:59,790 --> 00:01:00,950 per ottenere input da parte dell'utente? 20 00:01:00,950 --> 00:01:02,117 >> PUBBLICO: Get stringa. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Per ottenere stringa, o ottenere int, o avete visto gli altri, 22 00:01:04,700 --> 00:01:07,630 anche se non li avete ancora utilizzato, come ottenere lungo, lungo e simili. 23 00:01:07,630 --> 00:01:09,380 Ma supponiamo che in realtà vuole iniziare 24 00:01:09,380 --> 00:01:12,760 scrivere programmi che sono poco più versatile, e, francamente, un po 'di più 25 00:01:12,760 --> 00:01:15,090 come i comandi che hai stato sempre, si spera, 26 00:01:15,090 --> 00:01:16,550 un po 'abituato. 27 00:01:16,550 --> 00:01:18,560 Come cd spazio Dropbox. 28 00:01:18,560 --> 00:01:20,800 Questo, naturalmente, cambiamenti la directory, supponendo 29 00:01:20,800 --> 00:01:23,590 sei in casa di John Harvard directory, la cartella Dropbox. 30 00:01:23,590 --> 00:01:27,380 Nel frattempo, un comando come questo crea una nuova directory denominata pset2, 31 00:01:27,380 --> 00:01:30,290 come si potrebbe avere già o sarà presto per il problema di impostare due. 32 00:01:30,290 --> 00:01:33,970 Fare Ciao, naturalmente, è un comando che costruisce un programma chiamato ciao 33 00:01:33,970 --> 00:01:35,770 da un file chiamato ciao dot c. 34 00:01:35,770 --> 00:01:39,140 E in ciascuno di questi casi, ora, abbiamo avuto 35 00:01:39,140 --> 00:01:43,620 fornire un argomento sul cosiddetto riga di comando, il prompt lampeggiante, 36 00:01:43,620 --> 00:01:48,540 in modo che make sa cosa costruire, e così che mkdir sa cosa cartella per creare, 37 00:01:48,540 --> 00:01:51,110 e in modo che conosce cd dove si vuole andare. 38 00:01:51,110 --> 00:01:54,720 Ma fino ad ora, noi continuiamo a dire quella principale, la funzione di default, 39 00:01:54,720 --> 00:01:58,500 ha un'espressione vuoto all'interno di queste parentesi, 40 00:01:58,500 --> 00:02:01,250 il che significa che non può prendere alcun argomento. 41 00:02:01,250 --> 00:02:03,240 >> Quindi a partire da oggi, quello che stiamo andando a fare 42 00:02:03,240 --> 00:02:06,270 è, stiamo andando per iniziare sostenere cose come questa, anche. 43 00:02:06,270 --> 00:02:08,990 Infatti, in questo caso, che si non tipicamente digitare manualmente, 44 00:02:08,990 --> 00:02:11,130 Rendere ha fatto questo per noi, non ci sono 45 00:02:11,130 --> 00:02:15,840 uno ma uno, due, tre ulteriori stringhe dopo il programma del nome 46 00:02:15,840 --> 00:02:16,850 clang. 47 00:02:16,850 --> 00:02:18,240 Quindi, come possiamo raggiungere questo obiettivo? 48 00:02:18,240 --> 00:02:20,260 >> Ebbene, a partire da oggi, nei casi in cui vogliamo 49 00:02:20,260 --> 00:02:22,855 di fornire un contributo attraverso il cosiddetta riga di comando, 50 00:02:22,855 --> 00:02:24,980 stiamo per iniziare ad aggiungere ecco che cosa è in yellow-- 51 00:02:24,980 --> 00:02:30,520 sostituendo vuoto con int argc virgola stringa argv parentesi aperta parentesi quadra chiusa. 52 00:02:30,520 --> 00:02:32,520 Ora questo è interessante per un paio di motivi. 53 00:02:32,520 --> 00:02:35,690 Uno, sta andando a farci scrivere programmi che sono un po 'più dinamico. 54 00:02:35,690 --> 00:02:37,570 Ma, più convincente, sta andando ad aprire 55 00:02:37,570 --> 00:02:40,340 ora una conversazione da cosa array può davvero 56 00:02:40,340 --> 00:02:43,300 essere utilizzato, per quanto una stringa è realmente sotto il cofano, 57 00:02:43,300 --> 00:02:47,320 fino alla prossima settimana quando cominceremo immersioni in ancora più profonda di come la macchina è 58 00:02:47,320 --> 00:02:48,590 facendo tutto questo lavoro roba. 59 00:02:48,590 --> 00:02:51,920 Ma per ora, andiamo a disegnare, forse, una foto. 60 00:02:51,920 --> 00:02:54,950 >> Quando si scrive un programma con il principale dichiarata 61 00:02:54,950 --> 00:02:58,810 in questo modo, tale che principale prende due argomenti, un int 62 00:02:58,810 --> 00:03:03,233 e- che tipo di dati è il secondo argomento? 63 00:03:03,233 --> 00:03:04,529 >> PUBBLICO: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Così sembra a prima vista come se fosse un stringa, ma notare le parentesi quadre. 66 00:03:09,170 --> 00:03:12,760 Ricordiamo l'ultima volta abbiamo introdotto la nozione di un array. 67 00:03:12,760 --> 00:03:16,210 E array usano parentesi quadre in un paio di contesti. 68 00:03:16,210 --> 00:03:19,160 È possibile utilizzare la piazza staffe di andare in un array 69 00:03:19,160 --> 00:03:22,710 e ottenere un particolare elemento, come Staffa di 0 o 1 o staffa staffa 2. 70 00:03:22,710 --> 00:03:25,500 Ma abbiamo visto, se brevemente, la settimana scorsa che anche voi 71 00:03:25,500 --> 00:03:28,790 utilizzare queste parentesi quadre a dichiarare la dimensione di un array, 72 00:03:28,790 --> 00:03:31,790 se si conosce in anticipo quante int o quante stringhe o quello che 73 00:03:31,790 --> 00:03:32,630 in realtà vogliono. 74 00:03:32,630 --> 00:03:34,790 Così si scopre là di un terzo contesto qui 75 00:03:34,790 --> 00:03:37,890 che non ha numero interno delle parentesi quadre. 76 00:03:37,890 --> 00:03:41,920 Quando si specifica, come ho fatto qui, il nome di qualcosa come argv, 77 00:03:41,920 --> 00:03:44,550 che è solo un modo elegante di dicendo argomento vettore, che 78 00:03:44,550 --> 00:03:47,750 è un altro modo di fantasia dicendo una serie di argomenti, 79 00:03:47,750 --> 00:03:50,870 Staffa di aprire chiudere staffa appena significa che non si fa necessariamente 80 00:03:50,870 --> 00:03:52,960 sapere in anticipo quanto grande l'array sta per essere, 81 00:03:52,960 --> 00:03:55,070 ma si sa che sta per essere un array. 82 00:03:55,070 --> 00:03:57,320 Quindi, se non si conosce la numero non mettere in là, 83 00:03:57,320 --> 00:04:01,160 Staffa per aprire chiudere staffa significa che argv non è una stringa, 84 00:04:01,160 --> 00:04:03,124 ma un array di stringhe. 85 00:04:03,124 --> 00:04:05,040 Quindi sintatticamente, se ripensare la scorsa settimana, 86 00:04:05,040 --> 00:04:09,460 è molto simile a dire qualcosa come int età staffa aperto, 87 00:04:09,460 --> 00:04:10,984 e poi qualcosa in seguito. 88 00:04:10,984 --> 00:04:12,150 Così che cosa questo assomiglia? 89 00:04:12,150 --> 00:04:13,399 Facciamo in realtà fare un disegno. 90 00:04:13,399 --> 00:04:18,756 Così, quando si esegue questo programma con principale avendo due argomenti definiti all'interno 91 00:04:18,756 --> 00:04:21,339 di queste parentesi, si in sostanza, avere almeno due pezzi 92 00:04:21,339 --> 00:04:23,560 di memoria consegnato a voi sotto la cappa. 93 00:04:23,560 --> 00:04:26,550 Uno, come ti attira come questo rettangolo, sta per essere chiamati argc. 94 00:04:26,550 --> 00:04:30,645 E proprio come un breve riepilogo, qual è il tipo di dati di argc? 95 00:04:30,645 --> 00:04:31,270 Quindi è un int. 96 00:04:31,270 --> 00:04:33,480 Così un numero sta per andare a turno argc-- 97 00:04:33,480 --> 00:04:35,660 che sta per numero di argomenti. 98 00:04:35,660 --> 00:04:38,887 Nel frattempo, ho disegnato argv come un array. 99 00:04:38,887 --> 00:04:40,970 E io non lo so quanto tempo ci sarà, 100 00:04:40,970 --> 00:04:42,470 quindi per scopi di oggi dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Si potrebbe ottenere di una certa lunghezza. 102 00:04:43,636 --> 00:04:45,640 Ma ho immaginato qui almeno quattro rettangoli. 103 00:04:45,640 --> 00:04:50,970 Così argv un pezzo di memoria che memorizza stringa stringa stringa dot dot dot, 104 00:04:50,970 --> 00:04:53,950 e argc è solo un pezzo di memoria per un numero intero. 105 00:04:53,950 --> 00:04:55,710 >> Così ora, cerchiamo di essere un po 'più preciso. 106 00:04:55,710 --> 00:04:59,200 Se, quando ho stringhe in questo array, chiamato 107 00:04:59,200 --> 00:05:03,290 argv, voglio arrivare a loro individualmente, proprio come la scorsa settimana, 108 00:05:03,290 --> 00:05:05,670 stiamo andando a utilizzare la notazione come staffa argv 0 109 00:05:05,670 --> 00:05:07,650 per ottenere la prima cosa che un array. 110 00:05:07,650 --> 00:05:10,440 Staffa argv 1 per ottenere il seconda cosa, e così via. 111 00:05:10,440 --> 00:05:14,597 La chiave qui è che siamo ancora 0 indexed-- stiamo ancora contando da 0. 112 00:05:14,597 --> 00:05:16,430 Così ora cerchiamo di realtà mettere qualcosa in questo. 113 00:05:16,430 --> 00:05:21,670 Se dovessi compilare un programma chiamato ciao da un file chiamato ciao punto c, 114 00:05:21,670 --> 00:05:24,340 e poi ho eseguito quel programma con il puntino tagliare ciao, 115 00:05:24,340 --> 00:05:28,380 quello che fa il mio computer, il mio computer portatile, simile sotto il cofano 116 00:05:28,380 --> 00:05:31,300 il momento corro dot tagliare ciao e premere Invio? 117 00:05:31,300 --> 00:05:33,500 Beh, questo è forse quello che potremmo definire 118 00:05:33,500 --> 00:05:37,010 come il contenuto del tuo computer memoria, o memoria RAM-- Random Access. 119 00:05:37,010 --> 00:05:40,330 In altre parole, il computer, in qualche modo per voi magicamente, 120 00:05:40,330 --> 00:05:45,360 mette il numero 1 in argc, AKA argcount, e mette letteralmente la stringa 121 00:05:45,360 --> 00:05:48,200 ./ciao in staffa argv 0. 122 00:05:48,200 --> 00:05:51,750 Non ne ho idea, francamente, che cosa è in staffa argv 1 o 2 o 3, 123 00:05:51,750 --> 00:05:55,550 perché se l'utente non ha digitato nulla oltre ./ciao, 124 00:05:55,550 --> 00:05:58,550 stiamo andando a supporre che questi sono valori di immondizia più probabili, 125 00:05:58,550 --> 00:05:59,700 per così dire. 126 00:05:59,700 --> 00:06:02,650 Quei blocchi di memoria esiste, ma non sta a noi 127 00:06:02,650 --> 00:06:05,710 a guardarli, perché l'argcount è solo uno. 128 00:06:05,710 --> 00:06:07,870 >> Ora, intanto, se io scrivi eseguire un altro programma, 129 00:06:07,870 --> 00:06:12,250 cd, che è più propriamente un comando, nel vostro lampeggiante spazio cd prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- quando corro che, di fatto, quando viene eseguito il programma cd, argc, 131 00:06:17,200 --> 00:06:22,270 all'interno della memoria del computer, è per il più più breve secondo il numero 2. 132 00:06:22,270 --> 00:06:25,936 E poi argv staffa o ha cd, staffa argv 1 ha Dropbox, 133 00:06:25,936 --> 00:06:28,560 e poi naturalmente il comando completa, così tutti questa memoria 134 00:06:28,560 --> 00:06:30,420 in sostanza, se ne va e è utilizzato per qualcos'altro. 135 00:06:30,420 --> 00:06:32,270 Ed è per questo che dico solo una frazione di secondo. 136 00:06:32,270 --> 00:06:35,720 >> Nel frattempo, se facciamo mkdir pset2, il quadro è quasi la stessa, 137 00:06:35,720 --> 00:06:37,900 ma con diverse stringhe all'interno argv. 138 00:06:37,900 --> 00:06:42,570 Se faccio clang dash ciao ciao dot c, stessa idea. 139 00:06:42,570 --> 00:06:47,060 Più roba è compilato per argv e argc, naturalmente, è 4. 140 00:06:47,060 --> 00:06:49,150 Quindi, in altre parole, anche se questo array 141 00:06:49,150 --> 00:06:52,950 potrebbe essere dot dot dot, di alcuni lunghezza variabile, per così dire, 142 00:06:52,950 --> 00:06:56,720 si sa sempre dove alla fine di esso è, perché argc sta per dirti 143 00:06:56,720 --> 00:07:00,120 a che punto si deve fermare guardando elementi in argv. 144 00:07:00,120 --> 00:07:03,660 Potete guardare solo alle quattro in totale in questo caso. 145 00:07:03,660 --> 00:07:06,600 >> Quindi cerchiamo di ora un'occhiata a, forse, un semplice programma. 146 00:07:06,600 --> 00:07:09,070 Uno che dice solo ciao a qualcuno come Zamyla. 147 00:07:09,070 --> 00:07:12,620 Quindi io rivendico ho intenzione di scrivere un programma in un momento attraverso il quale ho potuto fare 148 00:07:12,620 --> 00:07:16,670 ./ciao spazio Zamyla, e poi voglio il mio programma per stampare qualcosa 149 00:07:16,670 --> 00:07:18,520 super-semplice come "ciao, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Ora, in passato abbiamo usato getString. 151 00:07:20,100 --> 00:07:22,850 Quindi, in passato, anche se siete nuovi alla programmazione, 152 00:07:22,850 --> 00:07:27,180 probabilità sono si potrebbe improvvisare una programma che utilizza getString 153 00:07:27,180 --> 00:07:29,390 e quindi utilizza printf per dire ciao a Zamyla. 154 00:07:29,390 --> 00:07:31,290 Ma non usare getString questa volta. 155 00:07:31,290 --> 00:07:37,510 Lasciatemi invece vado in appliant e non includono standard di I O dot h. 156 00:07:37,510 --> 00:07:41,160 Lasciatemi includo anche CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Ora int main, e ora sono non andare a fare nulla oggi. 158 00:07:44,730 --> 00:07:51,200 Invece, ho intenzione di fare int argc stringa argv parentesi aperta parentesi quadra chiusa, 159 00:07:51,200 --> 00:07:52,640 Non specificando un numero. 160 00:07:52,640 --> 00:07:54,644 Ed ora ecco la mia cosiddetta a fare. 161 00:07:54,644 --> 00:07:57,560 Quello che ho intenzione di fare adesso è, io sono intenzione di fare un po 'di un atto di fede, 162 00:07:57,560 --> 00:08:00,560 Ho intenzione di assumere che l'utente del intenzione di usare questo programma correttamente, 163 00:08:00,560 --> 00:08:04,980 e sto semplicemente andando a fare printf ciao, sn%. 164 00:08:04,980 --> 00:08:06,630 Quindi niente di nuovo lì. 165 00:08:06,630 --> 00:08:11,470 Ma voglio ora mettere qualunque parola tipi di utente dopo il nome del programma. 166 00:08:11,470 --> 00:08:16,970 Quindi se faccio ./ciao spazio Zamyla, ho vogliono in qualche modo l'accesso a livello di programmazione 167 00:08:16,970 --> 00:08:20,870 tra virgolette "Zamyla." così ho può andare nel mio ragionamento vettore, 168 00:08:20,870 --> 00:08:25,980 il mio array di stringhe, e se il comando, ancora una volta, era ./ciao spazio Zamyla, 169 00:08:25,980 --> 00:08:29,340 che numero voglio mettere in argv qui? 170 00:08:29,340 --> 00:08:29,840 PUBBLICO: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, perché Staffa 0 risulta 172 00:08:32,355 --> 00:08:34,230 sta per essere il il nome del programma, come abbiamo visto. 173 00:08:34,230 --> 00:08:37,789 Quindi staffa 1 è la prima parola che io, l'utente ha digitato. 174 00:08:37,789 --> 00:08:39,559 Ho intenzione di andare avanti e salvare questo. 175 00:08:39,559 --> 00:08:42,830 Ho intenzione di andare nella mia cartella dove ho messo questo file. 176 00:08:42,830 --> 00:08:44,920 Ho intenzione di fare fare ciao 3. 177 00:08:44,920 --> 00:08:46,230 OK di Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./ciao Zamyla Invio. 179 00:08:51,380 --> 00:08:54,480 Che cosa ho fatto di sbagliato? 180 00:08:54,480 --> 00:08:57,270 Sono stato colto di sorpresa me stesso per un attimo lì. 181 00:08:57,270 --> 00:08:58,230 Che cosa ho fatto di sbagliato? 182 00:08:58,230 --> 00:08:59,220 >> PUBBLICO: Nome. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: Il file del in realtà chiamato hello3.c. 184 00:09:01,767 --> 00:09:03,850 E l'ho fatto solo per coerenza, perché abbiamo 185 00:09:03,850 --> 00:09:06,550 hello.c avuto di in passato nel codice linea. 186 00:09:06,550 --> 00:09:11,550 Quindi cerchiamo di fissare questo ./ciao Staffa cruscotto 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Invio. 188 00:09:12,370 --> 00:09:14,030 E ora abbiamo ciao, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Nel frattempo, posso cambiare questo essere Rob, o davvero qualsiasi altra parola. 190 00:09:17,650 --> 00:09:19,230 >> Ma consideriamo un caso d'angolo. 191 00:09:19,230 --> 00:09:24,360 Che cosa potreste aspettarvi accadrà se Non digitare il nome di qualcuno a tutti? 192 00:09:24,360 --> 00:09:25,270 >> PUBBLICO: Errore. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: Un errore di qualche tipo, forse. 194 00:09:27,300 --> 00:09:28,200 Vediamo. 195 00:09:28,200 --> 00:09:29,440 Invio. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Così printf sia effettivamente un po protettiva di noi 198 00:09:33,870 --> 00:09:38,131 qui, e letteralmente stampa paren aperte nullo, ma le cose ancora peggiori possono accadere. 199 00:09:38,131 --> 00:09:40,130 E proprio per dimostrare qualcosa che assolutamente 200 00:09:40,130 --> 00:09:42,800 non dovrebbe fare, andiamo in qui e iniziare a frugare. 201 00:09:42,800 --> 00:09:43,300 Giusto? 202 00:09:43,300 --> 00:09:46,410 Se so che l'immagine nel la memoria è essenzialmente questo, 203 00:09:46,410 --> 00:09:52,660 Staffa argv 1 ha Zamyla, argv Staffa 0 ha ./ciao, o ./ciao-3. 204 00:09:52,660 --> 00:09:55,400 Che cosa è in fascia 2? 205 00:09:55,400 --> 00:09:58,210 Quindi posso rispondere mettere in discussione me stesso, giusto? 206 00:09:58,210 --> 00:10:00,460 Posso solo cambiare l'1 a 2. 207 00:10:00,460 --> 00:10:07,270 Ora posso ricompilare ciao 3, ./hello3 Facciamo ingrandire e premere Invio. 208 00:10:07,270 --> 00:10:08,270 Ops. 209 00:10:08,270 --> 00:10:10,660 Nessun segno di citazione. 210 00:10:10,660 --> 00:10:12,540 Interessante. 211 00:10:12,540 --> 00:10:15,530 Ecco, questo è tipo di fresco a vedere cos'altro è qui. 212 00:10:15,530 --> 00:10:17,130 >> Quindi, che cosa è all'interno del mio computer portatile? 213 00:10:17,130 --> 00:10:20,390 Salviamo con staffa 3. 214 00:10:20,390 --> 00:10:25,190 Fai hello3, ./ciao-3. 215 00:10:25,190 --> 00:10:26,500 Curioso. 216 00:10:26,500 --> 00:10:30,560 E ora veniamo davvero bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Ecco, questo è davvero immersione profonda nella memoria del mio computer. 218 00:10:34,340 --> 00:10:35,930 50 indici in. 219 00:10:35,930 --> 00:10:41,950 Quindi, fare ciao 3 ./ciao-3. 220 00:10:41,950 --> 00:10:42,680 Curioso. 221 00:10:42,680 --> 00:10:44,660 Va bene, ora sono solo intenzione di ottenere sconsiderate. 222 00:10:44,660 --> 00:10:47,331 Andiamo a 5.000. 223 00:10:47,331 --> 00:10:47,830 Bene. 224 00:10:47,830 --> 00:10:49,520 Quindi lasciatemi ricompilazione. 225 00:10:49,520 --> 00:10:51,460 Fai hello3, ./ciao-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 Ora alcuni di voi, ci potrebbe essere una lampadina andare fuori. 229 00:10:59,250 --> 00:11:01,900 Quanti di voi avete visto questo messaggio prima? 230 00:11:01,900 --> 00:11:03,440 Ok. 231 00:11:03,440 --> 00:11:04,420 Allora, perché? 232 00:11:04,420 --> 00:11:07,250 >> Odds are-- e c'è diverso cose che possono causare questo, 233 00:11:07,250 --> 00:11:09,730 e chiaramente sei in buona company-- abbiamo chiaramente 234 00:11:09,730 --> 00:11:11,900 causato ciò che si chiama un segmentation fault. 235 00:11:11,900 --> 00:11:15,890 E lunga storia breve per oggi, io hanno toccato un segmento di memoria 236 00:11:15,890 --> 00:11:17,060 che non avrei dovuto. 237 00:11:17,060 --> 00:11:19,970 Quando un segmento significa solo un pezzo di memoria che non avrei dovuto. 238 00:11:19,970 --> 00:11:25,530 Ora il computer garantisce che se io eseguire ./helloZamyla che posso toccare argv 239 00:11:25,530 --> 00:11:27,760 essere staffa 0 e argv staffa 1. 240 00:11:27,760 --> 00:11:32,730 Ma argc è il valore 2, che significa che sono solo allowed-- è una sorta di onore 241 00:11:32,730 --> 00:11:35,180 system-- al tatto Staffa 0 e la staffa 1. 242 00:11:35,180 --> 00:11:37,990 Se vado oltre, c'è assolutamente intenzione di essere lì la memoria. 243 00:11:37,990 --> 00:11:40,660 La mia RAM esiste fisicamente nel computer. 244 00:11:40,660 --> 00:11:42,080 Ma chi sa che cosa c'è? 245 00:11:42,080 --> 00:11:44,450 Anzi, sto correndo multipla programmi in una sola volta. 246 00:11:44,450 --> 00:11:46,910 Potrei ho seen-- se non fossi In questo modo il appliant 247 00:11:46,910 --> 00:11:49,937 ma sul mio Mac o PC-- potrei avere visto il contenuto di una e-mail. 248 00:11:49,937 --> 00:11:52,270 Ho potuto vedere un istante messaggio che ho recentemente inviato. 249 00:11:52,270 --> 00:11:55,390 Tutto ciò che potrebbe essere persistente intorno a memoria 250 00:11:55,390 --> 00:11:59,180 avrebbero potuto essere letta mediante questa arbitraria notazione parentesi quadra. 251 00:11:59,180 --> 00:12:02,850 O, ancora peggio, si potrebbe avere trovato una delle mie password 252 00:12:02,850 --> 00:12:05,859 che avevo recentemente digitato, che un programma era memorizzato in modo 253 00:12:05,859 --> 00:12:07,900 per autenticare me, e poi solo tipo di lasciato 254 00:12:07,900 --> 00:12:09,910 nella RAM fino a quando ho smesso di quel programma. 255 00:12:09,910 --> 00:12:12,860 >> Ed in effetti, questo è uno dei il pericolo e uno dei poteri 256 00:12:12,860 --> 00:12:15,980 di usare un linguaggio come C Avete accesso illimitato 257 00:12:15,980 --> 00:12:18,860 a tutti i contenuti di memoria di un programma, 258 00:12:18,860 --> 00:12:21,340 e quali cattivi può anche fare in quelle di casi, 259 00:12:21,340 --> 00:12:23,807 soprattutto quando si arrivare alla programmazione web 260 00:12:23,807 --> 00:12:26,890 verso la fine del semestre, faremo rivisitare questo topic-- è curiosare, 261 00:12:26,890 --> 00:12:31,660 potenzialmente, di qualcuno computer memoria e trovare tali cose curiose 262 00:12:31,660 --> 00:12:32,570 come abbiamo visto lì. 263 00:12:32,570 --> 00:12:36,900 O peggio ancora, le password che si o lei può utilizzare per fare cose cattive. 264 00:12:36,900 --> 00:12:40,240 >> Quindi chiaramente che non avrei dovuto fare questo, perché le cose strane cominciano ad accadere. 265 00:12:40,240 --> 00:12:42,310 In effetti, questo è un programma di crash. 266 00:12:42,310 --> 00:12:44,580 Questo sarebbe l'equivalente di Mac OS o Windows 267 00:12:44,580 --> 00:12:46,770 una finestra di programma appena scomparsa. 268 00:12:46,770 --> 00:12:48,300 Si è verificato un errore imprevisto. 269 00:12:48,300 --> 00:12:50,840 Nell'ambiente della riga di comando vediamo qualcosa di simile. 270 00:12:50,840 --> 00:12:54,480 Ma è per questo, è che io sono semplicemente toccando memoria che non appartiene a me. 271 00:12:54,480 --> 00:12:57,090 >> Quindi cerchiamo di difendere contro questo un po 'in modo diverso 272 00:12:57,090 --> 00:12:59,010 cercando in questo programma. 273 00:12:59,010 --> 00:13:01,000 Quindi, di nuovo, lo scheletro che abbiamo visto earlier-- 274 00:13:01,000 --> 00:13:02,480 e ho evidenziato questa volta int. 275 00:13:02,480 --> 00:13:05,900 E tutto questo tempo principale ha infatti restituito un valore. 276 00:13:05,900 --> 00:13:09,120 Anche se nella maggior parte della nostra lezione esempi non abbiamo mai usato una volta 277 00:13:09,120 --> 00:13:10,990 restituire nulla in principale. 278 00:13:10,990 --> 00:13:13,710 Abbiamo appena scriviamo printf vicino parentesi graffa e questo è tutto. 279 00:13:13,710 --> 00:13:16,500 Ma gratuitamente, ciò che il compilatore sta facendo per te, 280 00:13:16,500 --> 00:13:19,510 efficace, sta tornando 0 per voi. 281 00:13:19,510 --> 00:13:22,950 Attiva fuori-- ed è un po ' counterintuitive-- che 0 è buono. 282 00:13:22,950 --> 00:13:24,690 Ciò non significa falso di per sé. 283 00:13:24,690 --> 00:13:29,080 0 è buono, ed ogni non-0 valore, il mondo ha deciso, 284 00:13:29,080 --> 00:13:30,619 può significare un errore. 285 00:13:30,619 --> 00:13:32,910 Quindi, se hai mai incasinato qualcosa sul vostro computer, 286 00:13:32,910 --> 00:13:36,600 o di un programma è appena morto su di voi e hai ottenuto qualche finestra erronea 287 00:13:36,600 --> 00:13:40,360 sul vostro schermo, errore che dice negativo 49 o errore 23-- 288 00:13:40,360 --> 00:13:44,170 alcuni value-- apparentemente arbitraria che è perché un programmatore è hard-coded 289 00:13:44,170 --> 00:13:49,370 un valore negativo come 49 o positivo 23 per rappresentare qualsiasi numero, oserei dire, 290 00:13:49,370 --> 00:13:53,340 di 4 miliardi di cose possibili che potrebbe andare storto in un programma. 291 00:13:53,340 --> 00:13:55,700 >> Così come potrei prendere vantaggio di questo me stesso? 292 00:13:55,700 --> 00:13:58,970 Beh, mi permetta di aprire un programma che ho scritto in anticipo, 293 00:13:58,970 --> 00:14:01,450 e curiosare on-line chiamato ciao 4. 294 00:14:01,450 --> 00:14:05,650 Ed è quasi identico, salvo che la sua ha un po 'di controllo degli errori. 295 00:14:05,650 --> 00:14:09,660 In questo caso, ho ancora una volta dichiarato principale come prendere due argomenti, 296 00:14:09,660 --> 00:14:13,180 ma questa volta, sulla linea 17, avviso Sto facendo un po 'di un controllo di integrità. 297 00:14:13,180 --> 00:14:17,100 Sto facendo in modo che argc è uguale uguale a 2. 298 00:14:17,100 --> 00:14:18,960 Perché se lo è, che significa che posso tranquillamente 299 00:14:18,960 --> 00:14:21,420 toccare non solo la staffa 0, ma la staffa 1. 300 00:14:21,420 --> 00:14:24,330 E vado avanti e stampare, in questo caso, Zamyla o Rob 301 00:14:24,330 --> 00:14:26,020 o qualunque parola che ho digitato fuori. 302 00:14:26,020 --> 00:14:28,020 E ora solo per ottenere un po 'più corretta, 303 00:14:28,020 --> 00:14:31,910 Ho intenzione di tornare in modo esplicito 0 a significare tutto bene. 304 00:14:31,910 --> 00:14:33,300 Niente di male è accaduto. 305 00:14:33,300 --> 00:14:38,590 >> Ma, per convenzione, ho intenzione di ritorno 1, o francamente any-0 non valore, 306 00:14:38,590 --> 00:14:40,160 se qualcosa è andato storto. 307 00:14:40,160 --> 00:14:43,270 Ora l'utente non sta per davvero notare cosa sta succedendo. 308 00:14:43,270 --> 00:14:50,410 Infatti se vado in questa directory, noi lo zoom avanti e facciamo ciao 4, 309 00:14:50,410 --> 00:14:54,210 ./ciao-4 Zamyla si comporta come mi aspetto. 310 00:14:54,210 --> 00:14:58,570 Ma se invece non digitare nulla, nulla sembra accadere, 311 00:14:58,570 --> 00:14:59,680 ma non va in crash. 312 00:14:59,680 --> 00:15:04,660 E se io invece faccio qualcosa come Rob è un procuratore 313 00:15:04,660 --> 00:15:07,550 in condivisione Thayer-- informazioni arbitrarie. 314 00:15:07,550 --> 00:15:13,680 Ma notate, argv 1, 2, 3, 4, e 5 dovrebbe ora esistono in memoria. 315 00:15:13,680 --> 00:15:16,540 Anche questo, non quello che è il mio programma prevede, 316 00:15:16,540 --> 00:15:20,300 perché ho controllato se argc è uguale uguale a 2 o meno. 317 00:15:20,300 --> 00:15:22,140 Così ora sto difendendo contro questo. 318 00:15:22,140 --> 00:15:25,290 >> Ora, come un a parte, abbiamo la programmer-- o meglio abbiamo la users-- 319 00:15:25,290 --> 00:15:29,670 mai vedere che 0 o 1, ma utilizzando una strumento chiamato debugger, o altri strumenti, 320 00:15:29,670 --> 00:15:32,250 come vedremo prima lungo, è il programmatore 321 00:15:32,250 --> 00:15:36,590 può effettivamente vedere che cosa potrebbe essere andando male all'interno del vostro programma. 322 00:15:36,590 --> 00:15:39,170 >> Quindi, tutte le domande su argc? 323 00:15:39,170 --> 00:15:40,873 Già. 324 00:15:40,873 --> 00:15:45,292 >> PUBBLICO: Ho visto dove non hanno avuto il carattere, [incomprensibile] 325 00:15:45,292 --> 00:15:49,669 appena detto stringa stella d, come carattere asterisco virgola. 326 00:15:49,669 --> 00:15:50,710 Sono equivalenti qui? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Sono. 328 00:15:51,626 --> 00:15:55,080 Quindi la domanda è, avete di tanto in tanto visto programmi 329 00:15:55,080 --> 00:15:57,270 come questo che non lo fanno dire staffa stringa argv 330 00:15:57,270 --> 00:16:01,015 ma invece dire qualcosa come char staffa stella argv. 331 00:16:01,015 --> 00:16:03,140 E c'è anche altro varianti che si potrebbe vedere. 332 00:16:03,140 --> 00:16:04,264 Essi sono infatti equivalenti. 333 00:16:04,264 --> 00:16:06,240 Per ora, abbiamo questi tipo di ruote di formazione 334 00:16:06,240 --> 00:16:09,737 sul sotto forma di stringa nel CS50 biblioteca, ma in poco più di una settimana 335 00:16:09,737 --> 00:16:12,570 o giù di lì che andremo a rimuovere tale ostruzione del tutto e in realtà 336 00:16:12,570 --> 00:16:16,820 guardare a ciò che il carattere e la stella sono, e come quelli che si riferiscono a memoria 337 00:16:16,820 --> 00:16:18,140 rappresentazione più in generale. 338 00:16:18,140 --> 00:16:19,540 Quindi torneremo a questo. 339 00:16:19,540 --> 00:16:21,540 >> Altre domande sul nostro argv o argc? 340 00:16:21,540 --> 00:16:22,397 Già. 341 00:16:22,397 --> 00:16:24,438 PUBBLICO: Perché è di ritorno un errore [incomprensibile]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Perché lo ha fatto restituisce un errore only-- oh! 344 00:16:29,230 --> 00:16:31,813 Nel caso precedente, quando abbiamo sono stati futzing in giro con la memoria, 345 00:16:31,813 --> 00:16:35,110 perché solo restituire un errore quando ho davvero digitato un numero grande? 346 00:16:35,110 --> 00:16:36,620 Risposta breve è, siamo appena stati fortunati. 347 00:16:36,620 --> 00:16:39,240 In generale, un computer alloca la memoria in blocchi, 348 00:16:39,240 --> 00:16:42,900 e mi ha dato una grossa fetta abbastanza che Ho visto via, senza essere notato, 349 00:16:42,900 --> 00:16:46,280 della staffa toccare 2, staffa 3, staffa 50, ma appena spingevo 350 00:16:46,280 --> 00:16:49,080 la mia fortuna, sono andato al di là del confini del blocco di memoria 351 00:16:49,080 --> 00:16:50,520 il sistema operativo mi aveva dato. 352 00:16:50,520 --> 00:16:52,720 E questo è quando si giro di vite e ha detto, no. 353 00:16:52,720 --> 00:16:54,580 Errore di segmentazione. 354 00:16:54,580 --> 00:16:55,692 Già. 355 00:16:55,692 --> 00:16:58,890 >> PUBBLICO: Come funziona il computer conoscere il valore di argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Come funziona il computer di conoscere il valore di argc? 357 00:17:02,390 --> 00:17:07,920 Quando si esegue un programma, quel programma, dalla natura del prompt lampeggiante, 358 00:17:07,920 --> 00:17:11,359 viene consegnato l'array di parole che sono state digitate 359 00:17:11,359 --> 00:17:13,300 al prompt, che era digitato al prompt. 360 00:17:13,300 --> 00:17:16,569 E così è la vostra operativo sistema che essenzialmente 361 00:17:16,569 --> 00:17:20,329 popola gli argomenti principali di per voi. 362 00:17:20,329 --> 00:17:22,829 Ecco, questo è uno dei servizi che si ottiene, una sorta di segreto 363 00:17:22,829 --> 00:17:24,869 sotto la cappa di un sistema operativo. 364 00:17:24,869 --> 00:17:27,118 Altre domande? 365 00:17:27,118 --> 00:17:27,618 Già. 366 00:17:27,618 --> 00:17:29,787 >> PUBBLICO: Cosa core dump significa? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Cosa core dump significa? 368 00:17:31,370 --> 00:17:32,950 Quindi questa è una buona domanda. 369 00:17:32,950 --> 00:17:35,312 E mi permetta di tornare in questa directory qui. 370 00:17:35,312 --> 00:17:37,270 E si noterà che Ho un nuovo file lì. 371 00:17:37,270 --> 00:17:41,670 Si chiama infatti nucleo, ed è in realtà di solito un file di dimensioni decenti. 372 00:17:41,670 --> 00:17:45,300 Questo è essenzialmente uno snapshot di il contenuto della memoria del mio programma 373 00:17:45,300 --> 00:17:46,902 o RAM quando si è schiantato. 374 00:17:46,902 --> 00:17:49,110 E questo sarà utile, potenzialmente, diagnostico, 375 00:17:49,110 --> 00:17:52,850 una volta che si parla in un futuro lezione e la sezione sul debug, 376 00:17:52,850 --> 00:17:55,730 perché si può effettivamente fare la equivalente di una autopsia digitale 377 00:17:55,730 --> 00:18:00,300 su quel file per aiutare a capire quello che hai fatto di sbagliato nel vostro programma. 378 00:18:00,300 --> 00:18:01,220 Già. 379 00:18:01,220 --> 00:18:04,450 >> PUBBLICO: È argc un comando in in sé, o si può chiamarlo qualcosa? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Bella domanda. 381 00:18:05,575 --> 00:18:08,040 È argc un comando in sé, o si può chiamarlo qualcosa? 382 00:18:08,040 --> 00:18:09,290 Non è sicuramente un comando. 383 00:18:09,290 --> 00:18:13,500 E 'semplicemente una variabile di nome o il nome di un argomento, 384 00:18:13,500 --> 00:18:15,481 e così assolutamente noi potrebbe chiamare questo foo, 385 00:18:15,481 --> 00:18:18,480 potremmo chiamare questo bar, che tendono ad essere il go-to le parole che un computer 386 00:18:18,480 --> 00:18:19,860 scienziato va. 387 00:18:19,860 --> 00:18:22,820 Ma, per convenzione, usiamo argc e argv. 388 00:18:22,820 --> 00:18:25,360 Ma questo è solo un essere umano convenzione, niente di più. 389 00:18:25,360 --> 00:18:25,860 Bene. 390 00:18:25,860 --> 00:18:28,140 Così risulta, sono stato raccontando un po 'di un lie-- bianco 391 00:18:28,140 --> 00:18:31,264 e francamente, in futuro, si vedrà stiamo dicendo altre bugie bianche. 392 00:18:31,264 --> 00:18:33,510 Ma per ora, stiamo andando a buccia indietro uno di questi. 393 00:18:33,510 --> 00:18:37,310 In questo caso qui quando ho già correva un programma come ./ciao o ./ciao-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, abbiamo avuto il contenuto del mio memoria del computer guardando approssimativamente come 395 00:18:42,780 --> 00:18:43,280 questo. 396 00:18:43,280 --> 00:18:45,070 Ma ricordare che cosa è una stringa. 397 00:18:45,070 --> 00:18:49,279 Quello che abbiamo detto una settimana fa che cosa un stringa è in realtà sotto il cofano? 398 00:18:49,279 --> 00:18:50,320 PUBBLICO: Array di caratteri. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: E 'un array di caratteri, giusto? 400 00:18:52,111 --> 00:18:55,760 Così potremmo avere un array di corde, ma, a sua volta, una stringa 401 00:18:55,760 --> 00:18:57,150 è un array di caratteri. 402 00:18:57,150 --> 00:19:00,010 Quindi, se voglio davvero essere anale quando traggo questa immagine, 403 00:19:00,010 --> 00:19:03,290 Dovrei davvero essere disegnando un po 'più simile a questo, 404 00:19:03,290 --> 00:19:08,000 per cui in ciascuno di questi indici della mia matrice argv, 405 00:19:08,000 --> 00:19:11,432 vi è esso stesso una stringa intera che si trova in un array. 406 00:19:11,432 --> 00:19:13,140 E ora la bugia bianca stiamo dicendo oggi 407 00:19:13,140 --> 00:19:15,181 è che l'immagine non lo fa guardare piuttosto come questo. 408 00:19:15,181 --> 00:19:19,110 In effetti, le piazzette sono tipicamente al di fuori dei grandi rettangoli 409 00:19:19,110 --> 00:19:19,610 Là. 410 00:19:19,610 --> 00:19:21,280 Ma torneremo a che tra non molto. 411 00:19:21,280 --> 00:19:25,440 Ma questo è ./ciao backslash 0, che essendo il carattere speciale che 412 00:19:25,440 --> 00:19:28,310 delimita la fine di una stringa, e abbiamo un altro dopo 413 00:19:28,310 --> 00:19:29,360 Il nome di Zamyla. 414 00:19:29,360 --> 00:19:30,900 Che cosa significa questo? 415 00:19:30,900 --> 00:19:33,410 >> Beh, lasciatemi andare avanti e aprire altri due esempi 416 00:19:33,410 --> 00:19:35,220 che sono disponibili online. 417 00:19:35,220 --> 00:19:40,590 Uno si chiama argv1.c e l'altro è argv2. 418 00:19:40,590 --> 00:19:44,260 E 'un programma super-semplice che è diverso da programmi precedenti 419 00:19:44,260 --> 00:19:47,260 a che ora sto usando argc e argv qui. 420 00:19:47,260 --> 00:19:54,300 E ora sto integrando con un ciclo for in linea 18, da i = 0 su un massimo di argc. 421 00:19:54,300 --> 00:19:56,850 E quello che sto andando a fare con questa riga di codice qui? 422 00:19:56,850 --> 00:19:58,270 In inglese. 423 00:19:58,270 --> 00:20:00,510 Questo, ovviamente, dimostra l'uso di argc. 424 00:20:00,510 --> 00:20:03,670 Ma in inglese, cosa fa che fare se ho eseguito questo programma? 425 00:20:03,670 --> 00:20:04,366 Sì? 426 00:20:04,366 --> 00:20:07,386 >> PUBBLICO: E 'intenzione di stampare il schermo tutte le volte che vuoi. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Esattamente. 428 00:20:08,260 --> 00:20:10,480 Quindi, qualsiasi parole I digitare al prompt, è 429 00:20:10,480 --> 00:20:13,120 andando a rigurgitare loro a me uno per riga. 430 00:20:13,120 --> 00:20:14,370 Quindi cerchiamo di andare avanti e fare questo. 431 00:20:14,370 --> 00:20:17,862 Lasciami andare nel mio elenco e fare fare ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Ed ora, cerchiamo di mantenere le cose semplici. 434 00:20:21,770 --> 00:20:23,834 Cerchiamo di fare nulla in un primo momento. 435 00:20:23,834 --> 00:20:26,750 Lo ha fatto stampare una cosa, e questo è infatti il ​​nome del programma, 436 00:20:26,750 --> 00:20:28,240 perché è nella fascia 0. 437 00:20:28,240 --> 00:20:33,290 Se io ora dico foo, sta andando a fare quei due, e se dico foo bar, 438 00:20:33,290 --> 00:20:35,580 è andare a dire queste tre cose. 439 00:20:35,580 --> 00:20:37,740 Ora che è un po 'interessante, forse. 440 00:20:37,740 --> 00:20:41,450 Ma ricordare che argv è un array di stringhe, 441 00:20:41,450 --> 00:20:45,960 ma una stringa è un array di caratteri, in modo che possiamo prendere le cose su una tacca 442 00:20:45,960 --> 00:20:48,560 e applicare tale base logica e rendere il codice che 443 00:20:48,560 --> 00:20:51,160 sembra un po 'più criptico, è vero. 444 00:20:51,160 --> 00:20:53,540 Ma avendo un nidificato loop, qualcosa di simile 445 00:20:53,540 --> 00:20:57,030 a quello che si potrebbe ricordare da Mario, per esempio, se l'avete fatto in questo modo. 446 00:20:57,030 --> 00:21:00,380 >> Così ora notato sulla linea 19, sono nuovamente l'iterazione sulle mie argomentazioni, 447 00:21:00,380 --> 00:21:02,410 da 0 a un massimo di argc. 448 00:21:02,410 --> 00:21:05,510 E ora in linea 21-- sono prendendo a prestito un trucco da ultimo week-- 449 00:21:05,510 --> 00:21:11,090 Sto controllando che cosa è il lunghezza della staffa argv i. 450 00:21:11,090 --> 00:21:12,920 Sto memorizzare la risposta n. 451 00:21:12,920 --> 00:21:18,230 E poi sto integrando da j su fino an, dove j è inizializzato a 0. 452 00:21:18,230 --> 00:21:19,460 Così, convenzione per il conteggio. 453 00:21:19,460 --> 00:21:22,335 Una volta che hai usato i, se si dispone di un ciclo nidificato, non è possibile utilizzare i nuovo, 454 00:21:22,335 --> 00:21:25,770 altrimenti si clobber, potenzialmente, il valore al di fuori del ciclo interno. 455 00:21:25,770 --> 00:21:27,200 Così sto usando j per convenzione. 456 00:21:27,200 --> 00:21:28,020 Potremmo usare k. 457 00:21:28,020 --> 00:21:31,080 Se si dispone di più di k, probabilmente avere troppo nidificazione, in genere. 458 00:21:31,080 --> 00:21:33,800 Ma ora, notare il mio printf linea è leggermente diversa. 459 00:21:33,800 --> 00:21:37,520 Non sto stampando% s, io sono stampa% c, che, naturalmente, 460 00:21:37,520 --> 00:21:39,460 è un segnaposto per un carattere. 461 00:21:39,460 --> 00:21:40,770 >> E ora notare questa sintassi. 462 00:21:40,770 --> 00:21:41,270 Nuovo. 463 00:21:41,270 --> 00:21:42,630 Non abbiamo visto prima. 464 00:21:42,630 --> 00:21:47,290 Ma logicamente, questo significa solo ottenere la stringa esimo in argv 465 00:21:47,290 --> 00:21:50,067 e ottenere il j-esimo che cosa? 466 00:21:50,067 --> 00:21:50,900 PUBBLICO: Carattere. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: personaggio in quella stringa. 468 00:21:52,800 --> 00:21:57,100 Quindi, utilizzando le parentesi quadre seguito da parentesi quadre, 469 00:21:57,100 --> 00:22:00,390 questa è la prima immersione in stringhe di argv, 470 00:22:00,390 --> 00:22:02,225 e poi la seconda parentesi quadre con j 471 00:22:02,225 --> 00:22:06,580 è immergersi nei personaggi di quella particolare stringa in argv. 472 00:22:06,580 --> 00:22:09,562 E poi, per buona misura, Sto stampa di una nuova linea qui. 473 00:22:09,562 --> 00:22:12,020 Così ora lasciami andare avanti e aprire una finestra leggermente più grande 474 00:22:12,020 --> 00:22:13,600 in modo che possiamo vedere in azione. 475 00:22:13,600 --> 00:22:15,700 Lasciami andare in quella cartella. 476 00:22:15,700 --> 00:22:22,550 E ora che fare rendere argv-2-- whoops-- fare argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Invio. 478 00:22:23,110 --> 00:22:24,860 Ed è un po 'difficile leggere verticale, 479 00:22:24,860 --> 00:22:27,920 ma questo è effettivamente il nome del programma, seguito da una riga vuota. 480 00:22:27,920 --> 00:22:30,210 Ora vorrei andare avanti e fare foo. 481 00:22:30,210 --> 00:22:33,210 Allo stesso modo difficile da leggere, ma è infatti la stampa di un carattere per riga. 482 00:22:33,210 --> 00:22:36,780 E se lo faccio bar, è ora la stampa di quelli riga per riga. 483 00:22:36,780 --> 00:22:40,140 Così il takeaway qui non è tanto che, wow, guarda questa pulito nuovo trucco 484 00:22:40,140 --> 00:22:44,750 dove è possibile ottenere il contenuto dei caratteri specifici di un array, 485 00:22:44,750 --> 00:22:48,380 ma piuttosto come stiamo prendendo questi di base idee come l'indicizzazione in una matrice, 486 00:22:48,380 --> 00:22:51,620 e poi indicizzazione in un matrice che era in quella matrice, 487 00:22:51,620 --> 00:22:56,180 e solo applicando le stesse idee a esempi un po 'più sofisticati. 488 00:22:56,180 --> 00:22:59,560 Ma le basi in realtà non hanno cambiato, anche dalla scorsa settimana. 489 00:22:59,560 --> 00:23:02,350 >> Ora, questa è una sorta di tempestiva, in quanto, ricordare, in settimana lo zero 490 00:23:02,350 --> 00:23:04,110 abbiamo giocato con una rubrica come questa. 491 00:23:04,110 --> 00:23:06,670 E anche se questo è, ovviamente, parti fisiche della carta, 492 00:23:06,670 --> 00:23:09,150 è possibile tipo di pensare una rubrica come una matrice. 493 00:23:09,150 --> 00:23:12,770 Certo, se si dovesse reimplementare questi pezzi questi pezzi di carta 494 00:23:12,770 --> 00:23:15,260 in un computer, probabilmente si dovrebbe usare qualcosa 495 00:23:15,260 --> 00:23:20,270 come un array per memorizzare tutti coloro nomi e numeri dalla A tutta la strada 496 00:23:20,270 --> 00:23:23,800 attraverso Z. Quindi questo è bello, perché ci consente una opportunità, 497 00:23:23,800 --> 00:23:28,310 forse, considerare come si potrebbe effettivamente realizzare qualcosa di simile. 498 00:23:28,310 --> 00:23:31,250 Come con una serie di porte qui. 499 00:23:31,250 --> 00:23:36,380 Quindi, se ho could-- abbiamo bisogno di una volontario per venire in su. 500 00:23:36,380 --> 00:23:36,980 Vediamo. 501 00:23:36,980 --> 00:23:40,650 Un volto sconosciuto, forse, volto sconosciuto, forse. 502 00:23:40,650 --> 00:23:42,090 Come circa in arancione? 503 00:23:42,090 --> 00:23:42,680 Qui. 504 00:23:42,680 --> 00:23:45,870 Camicia arancione, vieni su. 505 00:23:45,870 --> 00:23:52,230 >> Andiamo avanti ora e spostare queste porte verso il lato, 506 00:23:52,230 --> 00:23:54,020 spostare questi fuori strada per un momento. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Come ti chiami? 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 Piacere di conoscerti. 513 00:23:59,451 --> 00:23:59,950 Bene. 514 00:23:59,950 --> 00:24:04,500 Così abbiamo dietro questi sei porte digitalmente sul screen-- 515 00:24:04,500 --> 00:24:07,810 o, piuttosto, sette porte sul screen-- un sacco di numeri. 516 00:24:07,810 --> 00:24:10,099 E io ti ho detto niente in advance-- d'accordo? 517 00:24:10,099 --> 00:24:11,140 AJAY: Niente in anticipo. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Tutto quello che voglio che tu faccia ora è quello di trovare per me, e per noi, 519 00:24:14,730 --> 00:24:20,920 in realtà, il numero 50, un passo alla volta. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Numero 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: il numero 50. 522 00:24:22,580 --> 00:24:24,746 E si può rivelare ciò che è dietro a ciascuna di queste porte 523 00:24:24,746 --> 00:24:27,930 semplicemente toccando con un dito. 524 00:24:27,930 --> 00:24:31,364 Accidenti. [Risate] 525 00:24:31,364 --> 00:24:34,560 >> [Applausi] 526 00:24:34,560 --> 00:24:39,540 >> Molto ben fatto. 527 00:24:39,540 --> 00:24:40,400 Ok. 528 00:24:40,400 --> 00:24:44,090 Abbiamo un bel regalo premio per te qui. 529 00:24:44,090 --> 00:24:46,520 La vostra scelta di film che discusso la scorsa settimana. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, uomo. 531 00:24:47,362 --> 00:24:49,050 Oh, non ho mai visto Balle spaziali. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Balle spaziali. 533 00:24:49,520 --> 00:24:50,140 Bene. 534 00:24:50,140 --> 00:24:53,790 Quindi tenere su un solo attimo. 535 00:24:53,790 --> 00:24:57,430 How-- facciamo questo un moment-- insegnabile 536 00:24:57,430 --> 00:25:00,412 come hai fatto a trovare il numero 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: ho scelto a caso. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Così si scelse in modo casuale e ottenuto fortunato. 539 00:25:03,420 --> 00:25:03,790 AJAY: Sì. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Eccellente. 542 00:25:05,050 --> 00:25:08,470 Così ora, non aveva ottenuto fortunato, che altro 543 00:25:08,470 --> 00:25:10,210 sarebbe potuto accadere dietro queste porte? 544 00:25:10,210 --> 00:25:12,930 Quindi, se vado avanti e rivelare questi numeri qui, 545 00:25:12,930 --> 00:25:15,180 che in realtà sono in ordine casuale. 546 00:25:15,180 --> 00:25:17,750 E la migliore che si potrebbe avere fatto, francamente, è da, in ultima analisi, 547 00:25:17,750 --> 00:25:19,410 nel caso peggiore, tutti loro controllo. 548 00:25:19,410 --> 00:25:23,000 Così avete ottenuto super-fortunato, che Non è quello che noi chiameremmo un algoritmo. 549 00:25:23,000 --> 00:25:24,730 Sì, complimenti. 550 00:25:24,730 --> 00:25:27,010 Ma ora let's-- umorismo me, se potessi. 551 00:25:27,010 --> 00:25:28,310 Andiamo a questa scheda qui. 552 00:25:28,310 --> 00:25:31,460 E qui sono i numeri in modo chiaro quello che sembra essere un ordine casuale, 553 00:25:31,460 --> 00:25:32,280 ed erano. 554 00:25:32,280 --> 00:25:35,160 Ma ora se io invece reclamo che dietro a queste porte 555 00:25:35,160 --> 00:25:39,070 sono numeri che vengono ordinati. 556 00:25:39,070 --> 00:25:41,780 L'obiettivo ora è quello di anche noi trovare il numero 50. 557 00:25:41,780 --> 00:25:45,910 Ma farlo algoritmicamente, e ci dicono come si sta andando su di esso. 558 00:25:45,910 --> 00:25:48,020 E se lo trovate, si mantiene il filmato. 559 00:25:48,020 --> 00:25:49,520 Tu non lo trovi, ti danno indietro. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Così sto andando a controllare le estremità primo luogo, per determinare se there's-- 562 00:25:58,112 --> 00:26:02,048 [Risate e applausi] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Qui si va. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Diamo un'occhiata a uno dei predecessori di Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, che non era così fortunato. 568 00:26:25,450 --> 00:26:28,670 OK, così il vostro compito qui, Sean, è il seguente. 569 00:26:28,670 --> 00:26:32,970 Ho nascosto dietro questi porte il numero sette, 570 00:26:32,970 --> 00:26:37,200 ma nascosto in alcune di queste porte come pure sono altri numeri non negativi. 571 00:26:37,200 --> 00:26:40,730 E il vostro obiettivo è quello di pensare a questo riga superiore di numeri come solo un array. 572 00:26:40,730 --> 00:26:43,590 Siamo solo una sequenza di pezzi di carta con i numeri dietro di loro. 573 00:26:43,590 --> 00:26:47,640 E il vostro obiettivo è, utilizzando solo la parte superiore array di qui, mi troverete il numero sette. 574 00:26:47,640 --> 00:26:51,200 E stiamo andando poi a criticare come si fa a farlo. 575 00:26:51,200 --> 00:26:52,920 Dove siamo il numero sette, per favore. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 No. 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 Non è una domanda trabocchetto. 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 A questo punto il tuo punteggio non è molto bene, così si potrebbe anche andare avanti. 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 Vai avanti. 590 00:27:39,802 --> 00:27:42,510 Francamente, non posso fare a meno di chiedermi cosa stai ancora pensando. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Posso prendere da solo la riga superiore. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: solo la riga superiore. 593 00:27:46,240 --> 00:27:47,281 Quindi hai tre di sinistra. 594 00:27:47,281 --> 00:27:48,310 Quindi mi troverete 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PUBBLICO GRIDA SUGGERIMENTI] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Quindi, sia di quelli erano incredibili per ragioni molto diverse. 599 00:28:26,130 --> 00:28:29,150 Quindi questo è dove siamo lasciato fuori un momento fa, 600 00:28:29,150 --> 00:28:32,530 e l'intuizione chiave qui fu queste porte avevano numeri 601 00:28:32,530 --> 00:28:37,390 dietro di loro che sono stati ordinati, l'ideale da asporto per le quali è che si potrebbe fare 602 00:28:37,390 --> 00:28:39,670 fondamentalmente meglio in questo secondo example-- 603 00:28:39,670 --> 00:28:42,380 e, anzi, che è stato Sean primo tentativo con numeri casuali 604 00:28:42,380 --> 00:28:45,460 altrettanto before-- ma appena in quanto questi numeri sono ordinati, 605 00:28:45,460 --> 00:28:47,980 proprio come la rubrica telefonica, cosa si può ovviamente fare? 606 00:28:47,980 --> 00:28:50,090 Oppure, come si può sfruttare questa conoscenza? 607 00:28:50,090 --> 00:28:51,530 Già. 608 00:28:51,530 --> 00:28:54,910 >> PUBBLICO: Si va a metà strada [incomprensibile]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Già. 610 00:28:55,660 --> 00:28:56,160 Esattamente. 611 00:28:56,160 --> 00:28:59,680 Così l'istinto iniziale di Ajay era per controllare le estremità, come ricordo, 612 00:28:59,680 --> 00:29:02,320 e poi noi una sorta di finale Nell'esempio rapidamente. 613 00:29:02,320 --> 00:29:05,220 Ma se abbiamo iniziato a fare questo più metodicamente lungo queste linee, 614 00:29:05,220 --> 00:29:07,860 ma a partire forse nel mezzo, perché sono ordinati, 615 00:29:07,860 --> 00:29:10,900 appena sveliamo la numero 16, abbiamo quindi know-- 616 00:29:10,900 --> 00:29:14,850 e facciamo esattamente che-- noi quindi sapere che il 50, nel caso di oggi, 617 00:29:14,850 --> 00:29:16,080 ha avuto modo di essere di destra. 618 00:29:16,080 --> 00:29:18,735 Quindi, proprio come in settimana zero quando abbiamo strappato la rubrica a metà 619 00:29:18,735 --> 00:29:21,490 e gettò la metà del problema di distanza, stessa idea qui. 620 00:29:21,490 --> 00:29:23,680 Possiamo gettare questo mezzo del problema di distanza. 621 00:29:23,680 --> 00:29:25,730 E probabilmente quello che potrebbe fare algoritmicamente, 622 00:29:25,730 --> 00:29:28,710 una volta che sai che il 50 deve essere a destra, se è ovunque, 623 00:29:28,710 --> 00:29:31,390 è provare lì, in mezzo delle porte rimanenti. 624 00:29:31,390 --> 00:29:33,450 Naturalmente, 50 è maggiore a 42, in modo che possiamo 625 00:29:33,450 --> 00:29:36,060 gettare questo rimanente trimestre del problema di distanza, 626 00:29:36,060 --> 00:29:38,510 e, infine, identificare qualcosa come 50. 627 00:29:38,510 --> 00:29:41,050 Ma proprio come con il rubrica, questi numeri 628 00:29:41,050 --> 00:29:44,560 sono stati dati a noi già in modo ordinato, che ci lascia 629 00:29:44,560 --> 00:29:47,450 con la domanda, come si fa ottenere le cose in ordine ordinati? 630 00:29:47,450 --> 00:29:49,640 E, francamente, a quale costo? 631 00:29:49,640 --> 00:29:51,390 E 'una cosa di essere consegnato la rubrica telefonica 632 00:29:51,390 --> 00:29:54,810 e poi impressionare i vostri amici, trovando un numero di telefono molto velocemente, giusto? 633 00:29:54,810 --> 00:29:58,520 Strappare 32 pagine di trovare un persona su 4 miliardi di pagine, 634 00:29:58,520 --> 00:30:00,470 abbiamo detto era un esempio estremo. 635 00:30:00,470 --> 00:30:03,320 Ma quanto tempo ci è voluto Verizon per ordinare quel libro telefono? 636 00:30:03,320 --> 00:30:06,170 Quanto tempo ci vuole per ordinare questi sette numeri? 637 00:30:06,170 --> 00:30:10,110 Questa è una domanda che abbiamo finora completamente ignorato. 638 00:30:10,110 --> 00:30:12,330 >> Quindi cerchiamo di rispondere a questa domanda adesso. 639 00:30:12,330 --> 00:30:15,920 E siamo tutti fuori di film ora, ma abbiamo alcune palle di stress. 640 00:30:15,920 --> 00:30:19,480 Se, per esempio, otto volontari non mi dispiacerebbe unirsi a noi qui? 641 00:30:19,480 --> 00:30:24,100 Andiamo avanti e fare, come su voi quattro, tre di voi qui? 642 00:30:24,100 --> 00:30:25,290 Ottenere alcuni volti nuovi. 643 00:30:25,290 --> 00:30:27,220 E il quattro di voi là? 644 00:30:27,220 --> 00:30:30,760 E now-- cerchiamo di non pregiudizi qui-- e numero otto qui alla fine. 645 00:30:30,760 --> 00:30:32,060 Andiamo su. 646 00:30:32,060 --> 00:30:32,560 Bene. 647 00:30:32,560 --> 00:30:37,480 Così che cosa abbiamo qui per ognuno di voi è un numero. 648 00:30:37,480 --> 00:30:40,055 Se vuoi andare avanti, prendere questo numero. 649 00:30:40,055 --> 00:30:40,763 Come ti chiami? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, va bene. 652 00:30:43,100 --> 00:30:44,297 Tu sei il numero 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 sei il numero 2. 657 00:30:47,530 --> 00:30:49,100 E andare avanti, come io consegno i fogli di carta, 658 00:30:49,100 --> 00:30:52,130 allineare stessi di fronte alla musica si trova nello stesso ordine come lassù. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Ciao, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, è bello vederti. 661 00:30:53,970 --> 00:30:54,520 Numero 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, il numero 4. 664 00:30:56,760 --> 00:30:57,549 Benvenuto a bordo. 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 Numero 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, numero 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, numero 7. 672 00:31:04,880 --> 00:31:05,200 E? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, numero 8. 675 00:31:06,815 --> 00:31:07,100 Bene. 676 00:31:07,100 --> 00:31:08,766 Vai avanti e ottenere voi stessi in questo ordine. 677 00:31:08,766 --> 00:31:11,440 Mi permetta di mettere un residuo leggio sul posto. 678 00:31:11,440 --> 00:31:13,670 Dove hai bisogno di uno stand? 679 00:31:13,670 --> 00:31:14,170 Ok. 680 00:31:14,170 --> 00:31:18,710 Vai avanti e appena messo i numeri dove il pubblico può vedere loro su, 681 00:31:18,710 --> 00:31:20,340 il leggio rivolto verso l'esterno. 682 00:31:20,340 --> 00:31:27,240 E si spera, il nostro primo controllo di integrità qui-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Apetta un minuto. 685 00:31:29,070 --> 00:31:31,140 Non abbiamo un 8. 686 00:31:31,140 --> 00:31:35,180 Ho bisogno di sfrattare dalla l'esempio in qualche modo. 687 00:31:35,180 --> 00:31:35,680 No. 688 00:31:35,680 --> 00:31:36,940 No, va bene. 689 00:31:36,940 --> 00:31:37,890 Vediamo. 690 00:31:37,890 --> 00:31:38,880 Possiamo farlo. 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 Ci andiamo. 694 00:31:45,740 --> 00:31:46,800 Corretto. 695 00:31:46,800 --> 00:31:47,360 Bene. 696 00:31:47,360 --> 00:31:50,260 Così, ora abbiamo 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Ok. 698 00:31:50,760 --> 00:31:51,360 Eccellente. 699 00:31:51,360 --> 00:31:54,400 >> Quindi la domanda è a portata di mano, a quali costi, e con quale metodo, 700 00:31:54,400 --> 00:31:58,580 possiamo realmente possiamo ordinare questi numeri qui in modo che possiamo genere di lavorare a ritroso, 701 00:31:58,580 --> 00:32:02,759 in ultima analisi, e decide-- è davvero impressionante, è davvero efficace, 702 00:32:02,759 --> 00:32:04,550 che posso dividere e conquistare una rubrica telefonica? 703 00:32:04,550 --> 00:32:06,716 E 'davvero efficace che Posso dividere e conquistare 704 00:32:06,716 --> 00:32:08,600 quei pezzi digitali di carta sul tavolo, 705 00:32:08,600 --> 00:32:14,500 se magari sta andando a costarci un fortuna in tempo o cicli di energia o di CPU 706 00:32:14,500 --> 00:32:17,340 per ottenere effettivamente i nostri dati in qualche modo ordinato? 707 00:32:17,340 --> 00:32:18,930 Quindi cerchiamo di fare quella domanda. 708 00:32:18,930 --> 00:32:22,077 >> Quindi prima di tutto, questi numeri sono in quasi ordine casuale, 709 00:32:22,077 --> 00:32:24,160 e ho intenzione di proporre un algoritmo, o un processo 710 00:32:24,160 --> 00:32:25,970 da cui possiamo ordinare queste persone. 711 00:32:25,970 --> 00:32:28,100 Ho intenzione di avvicinarsi questa bella ingenuamente. 712 00:32:28,100 --> 00:32:30,730 E ho intenzione di riconoscere che è una specie di molto per me 713 00:32:30,730 --> 00:32:32,890 per avvolgere la mia mente intorno al dati interi set in una sola volta. 714 00:32:32,890 --> 00:32:33,640 Ma sai cosa? 715 00:32:33,640 --> 00:32:37,450 Io vado a fare qualche molto semplici correzioni marginali. 716 00:32:37,450 --> 00:32:41,152 4 e 2 sono fuori uso, se l' obiettivo è quello di andare da 1 su un massimo di 8. 717 00:32:41,152 --> 00:32:41,860 Allora sai cosa? 718 00:32:41,860 --> 00:32:43,776 Ho intenzione di avere voi ragazzi scambiano, se si passa 719 00:32:43,776 --> 00:32:46,380 fisicamente posizioni e i vostri pezzi di carta. 720 00:32:46,380 --> 00:32:47,894 Ora 4 e 6, questi sono in ordine. 721 00:32:47,894 --> 00:32:49,060 Ho intenzione di lasciare quelle essere. 722 00:32:49,060 --> 00:32:50,227 6 e 8, quelli sono in ordine. 723 00:32:50,227 --> 00:32:51,185 Andando a lasciare stare. 724 00:32:51,185 --> 00:32:52,170 8 and1, fuori uso. 725 00:32:52,170 --> 00:32:54,790 Se voi due non mi dispiacerebbe scambiare. 726 00:32:54,790 --> 00:32:57,300 Ora 8 e 3, se voi ragazzi poteste scambiare. 727 00:32:57,300 --> 00:32:59,320 8 e 7, se voi ragazzi poteste scambiare. 728 00:32:59,320 --> 00:33:01,790 E 8 e 5, se voi ragazzi poteste scambiare. 729 00:33:01,790 --> 00:33:03,980 >> Ora, sto fatto? 730 00:33:03,980 --> 00:33:05,200 No, ovviamente non. 731 00:33:05,200 --> 00:33:07,880 Ma ho fatto il situazione migliore, giusto? 732 00:33:07,880 --> 00:33:09,430 Qual era ancora il vostro nome, numero 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Così Rachel ha efficacemente bolle up abbastanza lontano, 735 00:33:12,850 --> 00:33:15,660 fino alla fine il mio array di numeri qui. 736 00:33:15,660 --> 00:33:17,310 E così che il problema è di tipo risolto. 737 00:33:17,310 --> 00:33:21,670 Ora, chiaramente, 2 deve ancora spostare un po ', e 4 e 6 e 1. 738 00:33:21,670 --> 00:33:24,420 Ma mi sembra di aver ottenuto un po 'più vicino alla soluzione. 739 00:33:24,420 --> 00:33:26,790 Quindi cerchiamo di applicare questo stesso nuovo euristica ingenuo. 740 00:33:26,790 --> 00:33:27,690 2 e 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 e 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 e 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Facciamo swap. 744 00:33:32,230 --> 00:33:33,200 6 e 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Facciamo swap. 746 00:33:34,420 --> 00:33:35,580 6 e 7 è OK. 747 00:33:35,580 --> 00:33:36,590 7 e 5, no. 748 00:33:36,590 --> 00:33:37,790 Facciamo swap. 749 00:33:37,790 --> 00:33:38,470 E ora 7 e 8. 750 00:33:38,470 --> 00:33:39,862 E che cosa c'è di nuovo il tuo nome? 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 Così ora Frances è ancora in una migliore posizione, perché ora 7 e 8 754 00:33:44,230 --> 00:33:46,440 sono bolle correttamente fino alla cima. 755 00:33:46,440 --> 00:33:47,510 Quindi, 2 e 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 e 1, scambio di let. 757 00:33:48,720 --> 00:33:50,410 4 e 3, di scambio di let. 758 00:33:50,410 --> 00:33:51,550 4 e 6, tu sei OK. 759 00:33:51,550 --> 00:33:53,340 6 e 5, di scambio di let. 760 00:33:53,340 --> 00:33:54,590 E ora quei ragazzi sono buoni. 761 00:33:54,590 --> 00:33:55,780 Ci siamo quasi. 762 00:33:55,780 --> 00:33:57,706 2 e 1, in ordine, in modo da scambiare. 763 00:33:57,706 --> 00:33:59,080 E ora lasciatemi fare un controllo di integrità. 764 00:33:59,080 --> 00:34:03,080 2 e 3, 3 e 4, 4 e 5, 5 e 6, 6 e 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, così abbiamo finito. 766 00:34:05,060 --> 00:34:09,310 >> Ma a quale costo ha fatto io ordinare questi numeri qui? 767 00:34:09,310 --> 00:34:13,960 Beh, quanti passi ho fatto potenzialmente prendere durante l'ordinamento queste persone? 768 00:34:13,960 --> 00:34:15,710 Bene, torneremo a questa domanda. 769 00:34:15,710 --> 00:34:18,030 Ma, francamente, se hai un po 'annoiato, che è 770 00:34:18,030 --> 00:34:22,270 tipo di rivelare in che questo non era forse l'algoritmo più efficiente. 771 00:34:22,270 --> 00:34:25,230 E in effetti, francamente, io sto sudando tanto più camminare avanti e indietro. 772 00:34:25,230 --> 00:34:26,639 Che non si sentiva particolarmente efficiente. 773 00:34:26,639 --> 00:34:27,805 Quindi cerchiamo di provare qualcosa di diverso. 774 00:34:27,805 --> 00:34:31,870 Se voi ragazzi potrebbe ripristinare voi stessi a questi otto valori. 775 00:34:31,870 --> 00:34:32,969 Buon lavoro. 776 00:34:32,969 --> 00:34:36,570 >> Diamo uno sguardo digitale, solo per un attimo prima di provare qualcosa di diverso, 777 00:34:36,570 --> 00:34:38,179 a quello che è appena accaduto. 778 00:34:38,179 --> 00:34:41,330 Quassù, stai per vedere un visualizzazione di questi otto uomini 779 00:34:41,330 --> 00:34:44,719 per cui blu e rosso barre rappresentano i numeri. 780 00:34:44,719 --> 00:34:46,670 Il più alto la barra, il più grande è il numero. 781 00:34:46,670 --> 00:34:48,510 Più breve è il bar, il più piccolo è il numero. 782 00:34:48,510 --> 00:34:51,560 E che cosa si sta andando a vedere è in ordine casuale più di otto. 783 00:34:51,560 --> 00:34:55,830 Stai andando a vedere queste barre sempre ordinati dallo stesso algoritmo, 784 00:34:55,830 --> 00:34:59,890 o una serie di istruzioni, che chiameremo d'ora in poi bubble sort. 785 00:34:59,890 --> 00:35:04,000 Così notare, ogni secondo o giù di lì, due bar si accendano in rosso, 786 00:35:04,000 --> 00:35:05,590 vengono confrontati da computer. 787 00:35:05,590 --> 00:35:08,630 E poi se il grande bar e la piccolo bar sono fuori uso, 788 00:35:08,630 --> 00:35:11,220 essi vengono scambiati per me. 789 00:35:11,220 --> 00:35:15,120 >> Ora questo è incredibilmente noioso a guardare questo, certamente, 790 00:35:15,120 --> 00:35:18,630 per molto tempo, a meno di notare l' takeaway-- grandi barre che si spostano a destra, 791 00:35:18,630 --> 00:35:20,460 piccoli bar si spostano verso sinistra. 792 00:35:20,460 --> 00:35:23,380 Cerchiamo di interrompere questo processo e accelerare questo 793 00:35:23,380 --> 00:35:27,330 di essere molto più veloce, in modo che possiamo ottenere un senso alto livello di ciò che, 794 00:35:27,330 --> 00:35:29,970 in effetti, il Bubble sort sta facendo. 795 00:35:29,970 --> 00:35:33,150 Infatti, è gorgogliare fino al lato destro della lista, 796 00:35:33,150 --> 00:35:35,260 o la matrice, le barre più grandi. 797 00:35:35,260 --> 00:35:40,020 E viceversa, i piccoli bar sono ribollimento loro strada verso sinistra, 798 00:35:40,020 --> 00:35:42,950 anche se ad un ritmo più veloce di quanto abbiamo fatto in precedenza. 799 00:35:42,950 --> 00:35:45,850 Quindi, più difficile da vedere con gli esseri umani, ma visivamente questo è davvero quello che 800 00:35:45,850 --> 00:35:46,540 stava accadendo. 801 00:35:46,540 --> 00:35:49,110 >> Ma proviamo un fondamentalmente approccio diverso ora. 802 00:35:49,110 --> 00:35:52,387 Proviamo un diverso algoritmo con cui abbiamo voi 803 00:35:52,387 --> 00:35:59,640 ragazzi iniziano in questi originale posizioni, che era presente ordinanza qui. 804 00:35:59,640 --> 00:36:00,827 E andiamo avanti ora. 805 00:36:00,827 --> 00:36:02,910 E ho intenzione di fare qualcosa ancora più semplice, giusto? 806 00:36:02,910 --> 00:36:06,710 Col senno di poi, lo scambio di nuovo a coppie e di nuovo, quasi un po 'intelligente. 807 00:36:06,710 --> 00:36:10,460 Cerchiamo di fare le cose ancora più ingenuamente, dove se voglio ordinare queste persone, 808 00:36:10,460 --> 00:36:12,560 vorrei solo continuare a cercare per l'elemento più piccolo. 809 00:36:12,560 --> 00:36:14,570 Così adesso, 4 è il numero più piccolo che abbia mai visto. 810 00:36:14,570 --> 00:36:15,695 Io vado a ricordare che. 811 00:36:15,695 --> 00:36:17,750 No, 2 è meglio, e ricordate che. 812 00:36:17,750 --> 00:36:20,730 1 è ancora più piccolo. 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 Tra-- cosa c'è di nuovo il tuo nome? 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 Così, Artie, andare avanti. 819 00:36:25,460 --> 00:36:27,043 Io vado a tirare fuori dalla linea. 820 00:36:27,043 --> 00:36:28,400 Se potessi tornare qui. 821 00:36:28,400 --> 00:36:30,790 E ho bisogno di fare spazio per lui. 822 00:36:30,790 --> 00:36:32,040 Abbiamo un punto di decisione qui. 823 00:36:32,040 --> 00:36:36,000 Come possiamo fare spazio per Artie qui all'inizio cui numero 1 appartiene? 824 00:36:36,000 --> 00:36:36,770 >> PUBBLICO: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, abbiamo potrebbe spostare tutti. 826 00:36:38,950 --> 00:36:40,860 Ma proporre una ottimizzazione. 827 00:36:40,860 --> 00:36:43,410 Che si sente un po 'fastidioso per me di chiedere quattro persone 828 00:36:43,410 --> 00:36:44,620 per spostare fino in fondo. 829 00:36:44,620 --> 00:36:45,520 Che altro potevo fare? 830 00:36:45,520 --> 00:36:46,360 >> PUBBLICO: li Interruttore. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: li Interruttore. 832 00:36:46,850 --> 00:36:47,900 E che cosa c'è di nuovo il tuo nome? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, spostare. 835 00:36:50,330 --> 00:36:54,440 Molto più efficiente solo per avere Luoghi di swap Giacobbe con Artie, 836 00:36:54,440 --> 00:36:56,710 al contrario di forzatura tutti e quattro di queste persone, 837 00:36:56,710 --> 00:36:58,734 vi ringrazio molto, a loro posizione corretta. 838 00:36:58,734 --> 00:37:01,150 Cosa c'è di bello su Artie ora, lui è nella sua posizione corretta. 839 00:37:01,150 --> 00:37:02,060 Facciamolo di nuovo. 840 00:37:02,060 --> 00:37:03,730 2, che è il più piccolo numero che ho visto. 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 è sicuramente il più piccolo. 844 00:37:07,467 --> 00:37:08,550 Non hanno a che fare qualsiasi lavoro. 845 00:37:08,550 --> 00:37:09,320 Facciamolo di nuovo. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Più piccolo? 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 Permettetemi di ricordare 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Permettetemi di ricordare 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Il più piccolo numero ho visto su questo passaggio è 3. 857 00:37:18,490 --> 00:37:20,340 Se vuoi vieni fuori. 858 00:37:20,340 --> 00:37:21,986 Dove stiamo andando a mettere voi? 859 00:37:21,986 --> 00:37:22,860 E qual è il tuo nome? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, siamo andando ad avere per sfrattare. 862 00:37:25,780 --> 00:37:28,670 Ma questo è più efficiente, per scambiare semplicemente due persone, 863 00:37:28,670 --> 00:37:31,850 di avere più persone effettivamente eludere sopra. 864 00:37:31,850 --> 00:37:32,850 Ora facciamolo di nuovo. 865 00:37:32,850 --> 00:37:34,980 Io vado a selezionare 4, in modo da venire in avanti. 866 00:37:34,980 --> 00:37:36,540 E chi sta per trasferirsi? 867 00:37:36,540 --> 00:37:37,750 Numero 8, naturalmente. 868 00:37:37,750 --> 00:37:40,260 Se ora trovo il numero 5, vieni fuori. 869 00:37:40,260 --> 00:37:42,104 Numero 8 sta per ottenere sfrattati di nuovo. 870 00:37:42,104 --> 00:37:43,770 Ora sto andando a trovare il numero 6 in luogo. 871 00:37:43,770 --> 00:37:44,410 7 in posizione. 872 00:37:44,410 --> 00:37:45,080 8 in posizione. 873 00:37:45,080 --> 00:37:48,590 >> Quello che abbiamo appena fatto ora è qualcosa chiamato ordinamento per selezione, 874 00:37:48,590 --> 00:37:52,560 e se visualizziamo questo, è andare a sentire un po 'diverso. 875 00:37:52,560 --> 00:37:56,800 Andiamo avanti e da questo menù qui, questo visualization-- 876 00:37:56,800 --> 00:38:02,920 cambiamo questo a-- dai, Firefox. 877 00:38:02,920 --> 00:38:07,610 Cambiamo questo tipo di selezione. 878 00:38:07,610 --> 00:38:11,830 E cerchiamo di accelerarlo come prima, e avviare la visualizzazione ora. 879 00:38:11,830 --> 00:38:13,990 E questo algoritmo ha un diverso sentire ad esso. 880 00:38:13,990 --> 00:38:16,480 Su ogni iterazione, francamente, è ancora più semplice. 881 00:38:16,480 --> 00:38:18,385 Sto solo selezionando l'elemento più piccolo. 882 00:38:18,385 --> 00:38:21,510 Ora, francamente, ho avuto un po 'di fortuna che tempo, in quanto ordinati super-veloce. 883 00:38:21,510 --> 00:38:22,660 Gli elementi erano casuali. 884 00:38:22,660 --> 00:38:25,520 Non è, come vedremo alla fine vedere, fondamentalmente più veloce. 885 00:38:25,520 --> 00:38:29,400 Ma vediamo una terza ed ultima avvicinare qui come per quello che sta succedendo. 886 00:38:29,400 --> 00:38:36,230 Quindi cerchiamo di andare avanti e si reimposta ragazzi un'ultima volta di essere in questo ordine qui. 887 00:38:36,230 --> 00:38:38,450 >> E ora, ho intenzione di essere un po 'più intelligente, 888 00:38:38,450 --> 00:38:40,220 solo per completare i nostri algoritmi. 889 00:38:40,220 --> 00:38:41,230 Ho intenzione di fare questo. 890 00:38:41,230 --> 00:38:43,140 Ho intenzione di non andare avanti e indietro così tanto. 891 00:38:43,140 --> 00:38:44,900 Francamente, sono stanco di tutto questo movimento. 892 00:38:44,900 --> 00:38:47,691 Sto solo andando a prendere quello che sto dato all'inizio della lista, 893 00:38:47,691 --> 00:38:49,460 e ho intenzione di ordinare che lì per lì. 894 00:38:49,460 --> 00:38:50,140 Così eccoci qui. 895 00:38:50,140 --> 00:38:51,030 Numero 4. 896 00:38:51,030 --> 00:38:53,680 Ho intenzione di inserire il numero 4 in un elenco ordinato. 897 00:38:53,680 --> 00:38:54,180 Fatto. 898 00:38:54,180 --> 00:38:58,300 Io rivendico ora, e solo per fare questo più chiaro, questa parte della mia lista è ordinata. 899 00:38:58,300 --> 00:39:02,610 E 'una specie di sinistro stupido, ma anzi 4 è ordinata in un elenco di dimensione uno. 900 00:39:02,610 --> 00:39:04,210 Ora, io vado a prendere il numero 2. 901 00:39:04,210 --> 00:39:07,670 Numero 2 ora sto andando a inserire nel posto giusto. 902 00:39:07,670 --> 00:39:08,680 Così dove 2 appartiene? 903 00:39:08,680 --> 00:39:09,824 Ovviamente, qui. 904 00:39:09,824 --> 00:39:11,490 Quindi, andare avanti e tornare indietro, se potessi. 905 00:39:11,490 --> 00:39:14,406 E perché non voi ragazzi basta prendere la tua musica è con te questa volta. 906 00:39:14,406 --> 00:39:17,020 E diamo forza inserisci tu nell'inizio della lista. 907 00:39:17,020 --> 00:39:17,936 Quindi un po 'di lavoro. 908 00:39:17,936 --> 00:39:20,890 Ho dovuto spostare Giacobbe intorno, e qual è il tuo nome? 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 Ma almeno io non sono andato avanti e indietro. 912 00:39:24,350 --> 00:39:25,739 Sto solo prendendo le cose come vado. 913 00:39:25,739 --> 00:39:27,530 Sto solo inserendoli nel posto giusto. 914 00:39:27,530 --> 00:39:29,220 6, questo è in realtà abbastanza semplice. 915 00:39:29,220 --> 00:39:31,510 Facciamo si inserisce là, se si volevo solo passare un po 'sopra. 916 00:39:31,510 --> 00:39:32,870 Numero 8, anche abbastanza facile. 917 00:39:32,870 --> 00:39:33,741 Proprio laggiù. 918 00:39:33,741 --> 00:39:34,240 Accidenti. 919 00:39:34,240 --> 00:39:37,590 Numero 1 non possiamo solo scambiare con Amin qui, 920 00:39:37,590 --> 00:39:39,340 perché quello che sta succedendo a sconvolgere l'ordine. 921 00:39:39,340 --> 00:39:40,660 Quindi dobbiamo essere un po 'più intelligente. 922 00:39:40,660 --> 00:39:42,770 Così, Artie, se potessi eseguire il backup per un momento. 923 00:39:42,770 --> 00:39:46,550 Andiamo avanti ed innestare ora, a differenza dei nostri algoritmi precedenti, 924 00:39:46,550 --> 00:39:50,910 per fare spazio a Artie proprio qui all'inizio. 925 00:39:50,910 --> 00:39:54,690 Così, alla fine della giornata, io sono una specie di fare quello che volevo evitare prima. 926 00:39:54,690 --> 00:39:57,770 E così il mio algoritmo è una sorta di invertiti, intellettualmente, 927 00:39:57,770 --> 00:39:59,070 da quello che era in origine. 928 00:39:59,070 --> 00:40:01,240 Sto solo facendo lo spostamento in un punto diverso. 929 00:40:01,240 --> 00:40:02,291 Ora sono a 3. 930 00:40:02,291 --> 00:40:02,790 Oh, accidenti. 931 00:40:02,790 --> 00:40:04,039 Dobbiamo fare ancora più lavoro. 932 00:40:04,039 --> 00:40:05,060 Quindi cerchiamo di spingere fuori. 933 00:40:05,060 --> 00:40:09,360 Passiamo 8, 6, 4-- oh oh-- e 3 sta per andare proprio lì. 934 00:40:09,360 --> 00:40:11,490 Così a lievi risparmi almeno questa volta. 935 00:40:11,490 --> 00:40:13,100 7, non troppo lavoro da fare. 936 00:40:13,100 --> 00:40:15,370 Quindi, se si desidera pop indietro, ti permette di inserire. 937 00:40:15,370 --> 00:40:17,440 E, infine, 5, se si voglia di pop indietro, abbiamo 938 00:40:17,440 --> 00:40:22,610 necessario spostare voi, voi, si, fino alle cinque è a posto. 939 00:40:22,610 --> 00:40:25,670 >> Così ora di vedere questo in un alto livello grafico, 940 00:40:25,670 --> 00:40:31,080 facciamolo questo algoritmo visualizzazione una volta in più. 941 00:40:31,080 --> 00:40:33,580 Quindi questo chiameremo insertion sort. 942 00:40:33,580 --> 00:40:37,700 Faremo altrettanto veloce, e iniziare qui. 943 00:40:37,700 --> 00:40:39,580 E, anche, ha una sensazione diversa. 944 00:40:39,580 --> 00:40:42,180 E 'una sorta di migliorare e meglio, ma non è mai perfetto 945 00:40:42,180 --> 00:40:44,630 fino a quando vado in e liscia in quelle lacune. 946 00:40:44,630 --> 00:40:47,860 Perché, ancora una volta, sto solo prendendo ciò che Mi viene dato da sinistra a destra. 947 00:40:47,860 --> 00:40:50,350 Quindi non ho avuto così fortunato che tutto era perfetto. 948 00:40:50,350 --> 00:40:54,190 Ecco perché abbiamo avuto questi piccoli mispositions che fissa nel tempo. 949 00:40:54,190 --> 00:40:58,890 >> Quindi tutti questi algoritmi sembrano funzionare a ritmi leggermente diverse. 950 00:40:58,890 --> 00:41:02,030 In realtà, che diresti è il migliore o il più veloce finora? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, il primo? 952 00:41:03,450 --> 00:41:05,000 Selezione tipo, il secondo? 953 00:41:05,000 --> 00:41:08,450 Ordina inserimento, la terza? 954 00:41:08,450 --> 00:41:10,710 Ho sentito alcuni tipi di selezione. 955 00:41:10,710 --> 00:41:13,280 Altri pensieri? 956 00:41:13,280 --> 00:41:16,880 >> Così si scopre che tutti questi algoritmi 957 00:41:16,880 --> 00:41:22,400 sono fondamentalmente altrettanto efficiente come ogni other-- o, al contrario, proprio come 958 00:41:22,400 --> 00:41:25,980 inefficiente come ogni altro, perché possiamo fare fondamentalmente 959 00:41:25,980 --> 00:41:28,120 meglio di tutti e tre di questi algoritmi. 960 00:41:28,120 --> 00:41:29,990 E questo è un po 'una bugia bianca, troppo. 961 00:41:29,990 --> 00:41:32,580 quando dico il più efficiente o come inefficiente, 962 00:41:32,580 --> 00:41:35,040 questo è, almeno per super-grandi valori di n. 963 00:41:35,040 --> 00:41:38,450 Quando abbiamo solo otto persone qui, o forse 50 o giù di barre sullo schermo, 964 00:41:38,450 --> 00:41:41,645 sarete assolutamente notato differenze tra questi tre algoritmi. 965 00:41:41,645 --> 00:41:44,020 Ma come n, il numero di persone, o il numero di numeri, 966 00:41:44,020 --> 00:41:46,350 o il numero di persone nel telefono libro, o il numero di pagine web 967 00:41:46,350 --> 00:41:48,230 nel database di Google diventa sempre più grande, 968 00:41:48,230 --> 00:41:51,650 vedremo che tutte e tre queste algoritmi sono in realtà piuttosto scarsa. 969 00:41:51,650 --> 00:41:54,060 E possiamo fare fondamentalmente meglio di così. 970 00:41:54,060 --> 00:41:56,830 >> Diamo uno sguardo, infine, a ciò che questi algoritmi potrebbero 971 00:41:56,830 --> 00:41:59,520 suonare come nel contesto di pochi altri 972 00:41:59,520 --> 00:42:03,550 nonché attraverso questo Visualizzazione qui 973 00:42:03,550 --> 00:42:06,860 che ci introdurrà a un certo numero di algoritmi. 974 00:42:06,860 --> 00:42:10,330 Andiamo avanti e si congratulano qui i nostri partecipanti, i quali 975 00:42:10,330 --> 00:42:11,690 si sono ordinate molto bene. 976 00:42:11,690 --> 00:42:15,124 Se vuoi fare un regalo d'addio. 977 00:42:15,124 --> 00:42:16,540 È possibile mantenere i numeri pure. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 E quello che vedrete, o meglio sentire, ora, 980 00:42:22,520 --> 00:42:25,710 è che, come abbiamo messo i suoni a ciascuno di questi bar 981 00:42:25,710 --> 00:42:28,660 e associarlo con il software, diversa frequenza del suono, 982 00:42:28,660 --> 00:42:33,970 si può avvolgere la vostra mente più audioly attorno a ciò che ciascuna di queste cose 983 00:42:33,970 --> 00:42:34,470 assomigliare. 984 00:42:34,470 --> 00:42:39,325 Il primo dei quali è insertion sort 985 00:42:39,325 --> 00:42:44,275 >> [TONI] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Questo è il bubble sort. 988 00:42:49,720 --> 00:42:54,175 >> [TONI] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Selezione tipo. 991 00:43:18,222 --> 00:43:22,596 >> [TONI] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Qualcosa chiamato merge sort. 994 00:43:35,150 --> 00:43:38,140 >> [TONI] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Tipo Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [TONI] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Questo è tutto per CS50. 1000 00:44:09,430 --> 00:44:13,360 Ci vediamo il Mercoledì. 1001 00:44:13,360 --> 00:44:16,671 >> NARRATORE: E ora, "Deep Pensieri, "di Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Perché è un ciclo for? 1004 00:44:21,590 --> 00:44:23,200 Perché non fare di meglio? 1005 00:44:23,200 --> 00:44:25,970 Mi piacerebbe fare un ciclo di cinque. 1006 00:44:25,970 --> 00:44:28,720 >> [Risate]