1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Muy bien. 3 00:00:11,940 --> 00:00:16,470 Así que este es CS50, y esto es ahora el inicio de la semana tres. 4 00:00:16,470 --> 00:00:19,960 >> Así que, hasta ahora, no tenemos estado escribiendo programas en C 5 00:00:19,960 --> 00:00:23,210 esa mirada un poco algo como esto aquí. 6 00:00:23,210 --> 00:00:25,470 Así que tenemos un par de agudo incluye en la parte superior. 7 00:00:25,470 --> 00:00:28,490 Tenemos int, principal, nula, y entonces hay algo que hacer en el centro, 8 00:00:28,490 --> 00:00:30,590 algún fragmento de código dentro de esa función. 9 00:00:30,590 --> 00:00:34,170 Pero clave ha sido el hecho de que que hemos estado diciendo vacío aquí. 10 00:00:34,170 --> 00:00:39,320 Así vacío, todo este tiempo, especifica que este programa, cuando se ejecuta, 11 00:00:39,320 --> 00:00:41,300 sólo se puede ejecutar a través de su nombre. 12 00:00:41,300 --> 00:00:46,330 No se puede escribir cualquier otra palabra o números después del nombre del programa cuando 13 00:00:46,330 --> 00:00:46,830 ejecutarlo. 14 00:00:46,830 --> 00:00:51,200 Así, por ejemplo, si el programa eran compilado en un archivo llamado hola, 15 00:00:51,200 --> 00:00:53,480 usted podría hacer ./hola, pero eso es todo. 16 00:00:53,480 --> 00:00:56,750 >> La única manera que usted podría aportaciones a este programa 17 00:00:56,750 --> 00:00:57,960 es llamando a una función. 18 00:00:57,960 --> 00:00:59,790 Por ejemplo, ¿qué función hemos estado utilizando hasta ahora 19 00:00:59,790 --> 00:01:00,950 para obtener la entrada del usuario? 20 00:01:00,950 --> 00:01:02,117 >> AUDIENCIA: Obtener cadena. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Para obtener la secuencia, o conseguir int, o has visto a otros, 22 00:01:04,700 --> 00:01:07,630 incluso si usted no los ha utilizado todavía, como conseguir mucho, mucho y similares. 23 00:01:07,630 --> 00:01:09,380 Pero supongamos que realmente desee comenzar 24 00:01:09,380 --> 00:01:12,760 escribir programas que son poco más versátil, y, francamente, un poco más 25 00:01:12,760 --> 00:01:15,090 al igual que los comandos que usted ha estado recibiendo, con suerte, 26 00:01:15,090 --> 00:01:16,550 un poco acostumbrado. 27 00:01:16,550 --> 00:01:18,560 Como cd espacio Dropbox. 28 00:01:18,560 --> 00:01:20,800 Esto, por supuesto, los cambios su directorio, asumiendo 29 00:01:20,800 --> 00:01:23,590 estás en la casa de John Harvard directorio, a su carpeta de Dropbox. 30 00:01:23,590 --> 00:01:27,380 Mientras tanto, un comando como este crea un nuevo directorio llamado PSet2, 31 00:01:27,380 --> 00:01:30,290 ya que es posible que tenga o pronto para fijar un problema de dos. 32 00:01:30,290 --> 00:01:33,970 Hacer Hola, por supuesto, es un comando que construye un programa que se llama hola 33 00:01:33,970 --> 00:01:35,770 desde un archivo denominado hola punto c. 34 00:01:35,770 --> 00:01:39,140 Y en cada uno de estos casos, ahora, hemos tenido 35 00:01:39,140 --> 00:01:43,620 proporcionar un argumento en la llamada línea de comandos, el símbolo parpadea, 36 00:01:43,620 --> 00:01:48,540 para que haga lo que sabe construir, y así que mkdir sabe qué carpeta para crear, 37 00:01:48,540 --> 00:01:51,110 y por lo que sabe cd donde desea ir. 38 00:01:51,110 --> 00:01:54,720 Pero hasta ahora, seguimos diciendo que la principal, su función por defecto, 39 00:01:54,720 --> 00:01:58,500 tiene una expresión nula dentro de esos paréntesis, 40 00:01:58,500 --> 00:02:01,250 lo que significa que no puede tener ningún argumento. 41 00:02:01,250 --> 00:02:03,240 >> Así que a partir de hoy, lo que vamos a hacer 42 00:02:03,240 --> 00:02:06,270 Es decir, vamos a empezar apoyo a este tipo de cosas, incluso. 43 00:02:06,270 --> 00:02:08,990 De hecho, en este caso, que se no suelen escribir manualmente, 44 00:02:08,990 --> 00:02:11,130 Hacer que ha estado haciendo esto para nosotros, no hay 45 00:02:11,130 --> 00:02:15,840 uno, sino uno, dos, tres adicionales cuerdas después del programa de llamada 46 00:02:15,840 --> 00:02:16,850 sonido metálico. 47 00:02:16,850 --> 00:02:18,240 Entonces, ¿cómo lo logramos? 48 00:02:18,240 --> 00:02:20,260 >> Bueno, a partir de hoy, en los casos en los que queremos 49 00:02:20,260 --> 00:02:22,855 para proporcionar entrada a través de la la llamada línea de comandos, 50 00:02:22,855 --> 00:02:24,980 vamos a empezar a añadir aquí lo que está en Yellow-- 51 00:02:24,980 --> 00:02:30,520 sustitución de vacío con comas int argc cadena argv corchete abierto corchete de cierre. 52 00:02:30,520 --> 00:02:32,520 Ahora esto es interesante por un par de razones. 53 00:02:32,520 --> 00:02:35,690 Uno, que va a dejar que nos escribimos programas que son un poco más dinámico. 54 00:02:35,690 --> 00:02:37,570 Pero, más convincente, que va a abrir 55 00:02:37,570 --> 00:02:40,340 ahora una conversación sobre qué arreglos puede realmente 56 00:02:40,340 --> 00:02:43,300 ser utilizado, por lo que una cadena realmente está debajo del capó, 57 00:02:43,300 --> 00:02:47,320 hasta la próxima semana cuando comenzamos el buceo aún más profundo en cuanto a cómo la máquina está 58 00:02:47,320 --> 00:02:48,590 haciendo todo este trabajo cosas. 59 00:02:48,590 --> 00:02:51,920 Pero por ahora, vamos a dibujar, tal vez, una imagen. 60 00:02:51,920 --> 00:02:54,950 >> Cuando se escribe un programa con principal declarada 61 00:02:54,950 --> 00:02:58,810 de esta manera, tal que la principal toma dos argumentos, un int 62 00:02:58,810 --> 00:03:03,233 y-- qué tipo de datos es el segundo argumento? 63 00:03:03,233 --> 00:03:04,529 >> AUDIENCIA: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Así que parece a primera vista como si fuera un cadena, pero observe los corchetes. 66 00:03:09,170 --> 00:03:12,760 Recuerde la última vez que introdujimos la noción de una matriz. 67 00:03:12,760 --> 00:03:16,210 Y matrices utilizan corchetes en un par de contextos. 68 00:03:16,210 --> 00:03:19,160 Es posible utilizar la plaza soportes para ir en una matriz 69 00:03:19,160 --> 00:03:22,710 y obtener un elemento en particular, como Soporte de 0 o 1 o soporte de montaje 2. 70 00:03:22,710 --> 00:03:25,500 Pero vimos, aunque brevemente, la semana pasada que también 71 00:03:25,500 --> 00:03:28,790 utilizar estos corchetes a declarar el tamaño de una matriz, 72 00:03:28,790 --> 00:03:31,790 si usted sabe de antemano cuántos enteros o cuántas cuerdas o lo que usted 73 00:03:31,790 --> 00:03:32,630 realmente quieren. 74 00:03:32,630 --> 00:03:34,790 Así que resulta que hay tercera contexto aquí 75 00:03:34,790 --> 00:03:37,890 que no tiene número en su interior de los corchetes. 76 00:03:37,890 --> 00:03:41,920 Cuando se especifique, como lo he hecho aquí, el nombre de algo así como argv, 77 00:03:41,920 --> 00:03:44,550 que es sólo una forma elegante de diciendo argumento vector, que 78 00:03:44,550 --> 00:03:47,750 es otra forma elegante de diciendo una serie de argumentos, 79 00:03:47,750 --> 00:03:50,870 corchete abierto corchete de cierre sólo significa que usted no lo hace necesariamente 80 00:03:50,870 --> 00:03:52,960 saber de antemano lo grande la matriz va a ser, 81 00:03:52,960 --> 00:03:55,070 pero usted sabe que va a ser una matriz. 82 00:03:55,070 --> 00:03:57,320 Así que si usted no sabe la número no lo pongas ahí, 83 00:03:57,320 --> 00:04:01,160 para abrir el paréntesis corchete de cierre significa que argv no es una cadena, 84 00:04:01,160 --> 00:04:03,124 pero una matriz de cadenas. 85 00:04:03,124 --> 00:04:05,040 Así sintácticamente, si pensar de nuevo la semana pasada, 86 00:04:05,040 --> 00:04:09,460 es muy similar a decir algo así como int edades soporte abierto, 87 00:04:09,460 --> 00:04:10,984 y luego algo después. 88 00:04:10,984 --> 00:04:12,150 Entonces, ¿qué se parece esto? 89 00:04:12,150 --> 00:04:13,399 Vamos a realmente hacer un dibujo. 90 00:04:13,399 --> 00:04:18,756 Así que cuando se ejecuta este programa con Principal habiendo dos argumentos definida en el interior 91 00:04:18,756 --> 00:04:21,339 de esos paréntesis, se esencialmente tener al menos dos trozos 92 00:04:21,339 --> 00:04:23,560 de la memoria entregada a usted debajo de la capucha. 93 00:04:23,560 --> 00:04:26,550 Uno, como voy dibuja como este rectángulo, se va a llamar argc. 94 00:04:26,550 --> 00:04:30,645 Y así como un resumen rápido, ¿cuál es el tipo de datos de argc? 95 00:04:30,645 --> 00:04:31,270 Así que es un int. 96 00:04:31,270 --> 00:04:33,480 Así que un número se va ir por turnos argc-- 97 00:04:33,480 --> 00:04:35,660 que representa el recuento argumento. 98 00:04:35,660 --> 00:04:38,887 Mientras tanto, he dibujado argv como una matriz. 99 00:04:38,887 --> 00:04:40,970 Y yo no lo sé cuánto tiempo va a ser, 100 00:04:40,970 --> 00:04:42,470 así que para los propósitos de hoy dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Puede ser que consiga de cierta extensión. 102 00:04:43,636 --> 00:04:45,640 Pero me he imaginado aquí al menos cuatro rectángulos. 103 00:04:45,640 --> 00:04:50,970 Así argv un trozo de memoria que almacena cadena cadena cadena dot dot dot, 104 00:04:50,970 --> 00:04:53,950 y argc es sólo un trozo de memoria para un entero. 105 00:04:53,950 --> 00:04:55,710 >> Así que ahora, vamos a ser un poco más precisos. 106 00:04:55,710 --> 00:04:59,200 Si, cuando tengo cuerdas en esta matriz, llamado 107 00:04:59,200 --> 00:05:03,290 argv, quiero llegar a ellos de forma individual, al igual que la semana pasada, 108 00:05:03,290 --> 00:05:05,670 vamos a utilizar la notación como argv soporte 0 109 00:05:05,670 --> 00:05:07,650 para conseguir lo primero una matriz. 110 00:05:07,650 --> 00:05:10,440 Argv soporte 1 para obtener el Lo segundo, y así sucesivamente. 111 00:05:10,440 --> 00:05:14,597 La clave aquí es que estamos todavía 0 indexed-- todavía estamos contando desde 0. 112 00:05:14,597 --> 00:05:16,430 Así que ahora vamos a realidad poner algo en esto. 113 00:05:16,430 --> 00:05:21,670 Si tuviera que compilar un programa llamado hola desde un archivo denominado hola punto c, 114 00:05:21,670 --> 00:05:24,340 y luego ejecuto ese programa con el punto slash hola, 115 00:05:24,340 --> 00:05:28,380 lo que hace mi equipo, mi laptop, ver como debajo de la capucha 116 00:05:28,380 --> 00:05:31,300 el momento me encuentro dot slash hola y pulsa intro? 117 00:05:31,300 --> 00:05:33,500 Bueno, este es tal vez lo que podríamos describir 118 00:05:33,500 --> 00:05:37,010 como el contenido de la computadora de memoria, o memoria de acceso aleatorio RAM--. 119 00:05:37,010 --> 00:05:40,330 En otras palabras, el ordenador, de alguna manera para que por arte de magia, 120 00:05:40,330 --> 00:05:45,360 pone el número 1 en argc, AKA argcount, y pone literalmente la cadena 121 00:05:45,360 --> 00:05:48,200 ./hola en argv soporte 0. 122 00:05:48,200 --> 00:05:51,750 No tengo ni idea, la verdad, lo que es en el soporte argv 1 o 2 o 3, 123 00:05:51,750 --> 00:05:55,550 ya que si el usuario no tiene escrito nada, además ./hola, 124 00:05:55,550 --> 00:05:58,550 vamos a suponer que estos son valores más probables de basura, 125 00:05:58,550 --> 00:05:59,700 por así decirlo. 126 00:05:59,700 --> 00:06:02,650 Esos fragmentos de memoria existe, pero no depende de nosotros 127 00:06:02,650 --> 00:06:05,710 mirarlos, porque la argcount es único. 128 00:06:05,710 --> 00:06:07,870 >> Ahora, por su parte, si escribir ejecutar otro programa, 129 00:06:07,870 --> 00:06:12,250 cd, que es más adecuadamente un comando, en su parpadear espacio cd prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- cuando corro que, efectivamente, cuando se ejecuta el programa de cd, argc, 131 00:06:17,200 --> 00:06:22,270 dentro de la memoria de mi computadora, es para el más breve segundo el número 2. 132 00:06:22,270 --> 00:06:25,936 Y luego argv soporte o tiene cd, soporte argv 1 tiene Dropbox, 133 00:06:25,936 --> 00:06:28,560 y luego, por supuesto, el comando completa, por lo que todo esto de memoria 134 00:06:28,560 --> 00:06:30,420 esencialmente se va y se utiliza para otra cosa. 135 00:06:30,420 --> 00:06:32,270 Y es por eso que digo sólo una fracción de segundo. 136 00:06:32,270 --> 00:06:35,720 >> Mientras tanto, si hacemos PSet2 mkdir, la imagen se ve casi lo mismo, 137 00:06:35,720 --> 00:06:37,900 pero con diferentes cuerdas dentro argv. 138 00:06:37,900 --> 00:06:42,570 Si lo hago tablero clang hola hola punto c, la misma idea. 139 00:06:42,570 --> 00:06:47,060 Más cosas se rellena para argv y argc, por supuesto, es 4. 140 00:06:47,060 --> 00:06:49,150 Así, en otras palabras, a pesar de que esta matriz 141 00:06:49,150 --> 00:06:52,950 podría dot dot dot, de alguna longitud variable, por así decirlo, 142 00:06:52,950 --> 00:06:56,720 que siempre sabe dónde está el final de la misma es, porque argc va a decir usted 143 00:06:56,720 --> 00:07:00,120 en qué punto usted tiene que parar mirando a los elementos en argv. 144 00:07:00,120 --> 00:07:03,660 Usted sólo puede mirar a las cuatro En total en este caso. 145 00:07:03,660 --> 00:07:06,600 >> Así que ahora vamos a echar un vistazo a, tal vez, un programa simple. 146 00:07:06,600 --> 00:07:09,070 Uno que sólo dice hola para alguien como Zamyla. 147 00:07:09,070 --> 00:07:12,620 Así que yo reclamo que voy a escribir un programa en un momento a través de la que yo podía hacer 148 00:07:12,620 --> 00:07:16,670 ./hola espacio Zamyla, y luego quiero mi programa para imprimir algo 149 00:07:16,670 --> 00:07:18,520 super-simple como "hola, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Ahora bien, en el pasado hemos usado getString. 151 00:07:20,100 --> 00:07:22,850 Así que en el pasado, incluso si usted es nuevo en la programación, 152 00:07:22,850 --> 00:07:27,180 las probabilidades son que usted podría preparar una programa que utiliza getString 153 00:07:27,180 --> 00:07:29,390 y luego utiliza printf saludar a Zamyla. 154 00:07:29,390 --> 00:07:31,290 Pero no usemos GetString este momento. 155 00:07:31,290 --> 00:07:37,510 Déjame en lugar de entrar en la Appliant y no incluir estándar I O dot h. 156 00:07:37,510 --> 00:07:41,160 Permítanme también incluyo CS50 punto h. 157 00:07:41,160 --> 00:07:44,730 Ahora int main, y ahora estoy no va a hacer vacío en la actualidad. 158 00:07:44,730 --> 00:07:51,200 En su lugar, voy a hacer int argc argv cadena corchete abierto corchete de cierre, 159 00:07:51,200 --> 00:07:52,640 sin especificar un número. 160 00:07:52,640 --> 00:07:54,644 Y ahora aquí está mi llamado a hacer. 161 00:07:54,644 --> 00:07:57,560 ¿Qué voy a hacer ahora es que estoy vamos a hacer un poco de un salto de la fe, 162 00:07:57,560 --> 00:08:00,560 Voy a asumir que el usuario de va a utilizar este programa correctamente, 163 00:08:00,560 --> 00:08:04,980 y simplemente voy a hacer printf hola,% sn. 164 00:08:04,980 --> 00:08:06,630 Así que nada nuevo allí. 165 00:08:06,630 --> 00:08:11,470 Pero quiero ahora poner cualquier palabra del usuario escribe después del nombre del programa. 166 00:08:11,470 --> 00:08:16,970 Así que si lo hago ./hola espacio Zamyla, I desee alguna manera el acceso mediante programación 167 00:08:16,970 --> 00:08:20,870 comillas "Zamyla." así que puede entrar en mi argumento vector, 168 00:08:20,870 --> 00:08:25,980 mi matriz de cadenas, y si el comando, de nuevo, era ./hola espacio Zamyla, 169 00:08:25,980 --> 00:08:29,340 qué número es lo que quiero para poner en argv aquí? 170 00:08:29,340 --> 00:08:29,840 AUDIENCIA: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, porque Soporte de 0 resulta 172 00:08:32,355 --> 00:08:34,230 va a ser la El nombre del programa, como vimos. 173 00:08:34,230 --> 00:08:37,789 Así soporte 1 es la primera palabra que yo, el usuario, ha escrito. 174 00:08:37,789 --> 00:08:39,559 Voy a seguir adelante y salvar a este. 175 00:08:39,559 --> 00:08:42,830 Voy a ir a mi carpeta donde he puesto este archivo. 176 00:08:42,830 --> 00:08:44,920 Yo voy a hacer que hola 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hola Zamyla Intro. 179 00:08:51,380 --> 00:08:54,480 ¿Qué hice mal? 180 00:08:54,480 --> 00:08:57,270 Estaba atrapado por sorpresa a mí mismo por un momento allí. 181 00:08:57,270 --> 00:08:58,230 ¿Qué hice mal? 182 00:08:58,230 --> 00:08:59,220 >> AUDIENCIA: Nombre. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: El archivo de en realidad se llama hello3.c. 184 00:09:01,767 --> 00:09:03,850 Y lo hice sólo para consistencia, porque hemos 185 00:09:03,850 --> 00:09:06,550 tenido de hola.c en el pasado en el código en línea. 186 00:09:06,550 --> 00:09:11,550 Así que vamos a arreglar este ./hola soporte de tablero 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Intro. 188 00:09:12,370 --> 00:09:14,030 Y ahora tenemos hola, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Mientras tanto, puedo cambiar esto a ser Rob, o en realidad cualquier otra palabra. 190 00:09:17,650 --> 00:09:19,230 >> Pero vamos a considerar un caso esquina. 191 00:09:19,230 --> 00:09:24,360 ¿Qué podría esperar que sucederá si Yo no escribo el nombre de nadie en absoluto? 192 00:09:24,360 --> 00:09:25,270 >> AUDIENCIA: Error. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: un error de algún tipo, tal vez. 194 00:09:27,300 --> 00:09:28,200 Vamos a ver. 195 00:09:28,200 --> 00:09:29,440 Intro. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Así printf es ser realmente un poco de protección de nosotros 198 00:09:33,870 --> 00:09:38,131 aquí, y literalmente la impresión paren abiertas null, pero las cosas aún peores pueden suceder. 199 00:09:38,131 --> 00:09:40,130 Y sólo para demostrar algo que absolutamente 200 00:09:40,130 --> 00:09:42,800 no debe hacer, vamos a ir en aquí y empezar a jugar. 201 00:09:42,800 --> 00:09:43,300 ¿Cierto? 202 00:09:43,300 --> 00:09:46,410 Si yo sé que la imagen de memoria es esencialmente esto, 203 00:09:46,410 --> 00:09:52,660 argv soporte 1 tiene Zamyla, argv soporte tiene 0 ./hola, o ./hola-3. 204 00:09:52,660 --> 00:09:55,400 Lo que está en el soporte 2? 205 00:09:55,400 --> 00:09:58,210 Así que puedo responder a esa cuestionarme, ¿verdad? 206 00:09:58,210 --> 00:10:00,460 Yo sólo puedo cambiar el 1 a un 2. 207 00:10:00,460 --> 00:10:07,270 Ahora puedo volver a compilar hola 3, ./hello3 Vamos a acercar y pulsa enter. 208 00:10:07,270 --> 00:10:08,270 ¡Vaya. 209 00:10:08,270 --> 00:10:10,660 Sin comillas. 210 00:10:10,660 --> 00:10:12,540 Interesante. 211 00:10:12,540 --> 00:10:15,530 Así que es una especie de fresco a ver qué más hay por aquí. 212 00:10:15,530 --> 00:10:17,130 >> Entonces, ¿qué más hay en el interior de mi portátil? 213 00:10:17,130 --> 00:10:20,390 Salvemos con soporte 3. 214 00:10:20,390 --> 00:10:25,190 Hacer hello3, ./hola-3. 215 00:10:25,190 --> 00:10:26,500 Curioso. 216 00:10:26,500 --> 00:10:30,560 Y ahora vamos a llegar realmente bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Así que eso es realmente buceo profundo en la memoria de mi computadora. 218 00:10:34,340 --> 00:10:35,930 50 índices en. 219 00:10:35,930 --> 00:10:41,950 Así que hola 3 ./hola-3. 220 00:10:41,950 --> 00:10:42,680 Curioso. 221 00:10:42,680 --> 00:10:44,660 Muy bien, ahora estoy solo va a conseguir imprudente. 222 00:10:44,660 --> 00:10:47,331 Vayamos a 5000. 223 00:10:47,331 --> 00:10:47,830 Bien. 224 00:10:47,830 --> 00:10:49,520 Así que permítanme recompilar. 225 00:10:49,520 --> 00:10:51,460 Hacer hello3, ./hola-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 Okay. 228 00:10:56,460 --> 00:10:59,250 Ahora algunos de ustedes, no podría ser una bombilla de apagarse. 229 00:10:59,250 --> 00:11:01,900 ¿Cuántos de ustedes tienen visto este mensaje antes? 230 00:11:01,900 --> 00:11:03,440 Okay. 231 00:11:03,440 --> 00:11:04,420 Así que, ¿por qué? 232 00:11:04,420 --> 00:11:07,250 >> Probabilidades son-- y hay diferentes cosas que pueden causar este, 233 00:11:07,250 --> 00:11:09,730 y es evidente que está en buena company-- tenemos claramente 234 00:11:09,730 --> 00:11:11,900 causado lo que se llama un fallo de segmentación. 235 00:11:11,900 --> 00:11:15,890 Y cuento largo por hoy, han tocado un segmento de memoria 236 00:11:15,890 --> 00:11:17,060 que no debería tener. 237 00:11:17,060 --> 00:11:19,970 Cuando un segmento que sólo significa un trozo de la memoria que no debería tener. 238 00:11:19,970 --> 00:11:25,530 Ahora, el equipo garantiza que si yo ejecutar ./helloZamyla que puedo tocar argv 239 00:11:25,530 --> 00:11:27,760 ser soporte 0 y argv soporte 1. 240 00:11:27,760 --> 00:11:32,730 Pero argc es el valor 2, que significa que soy sólo allowed-- es una especie de honor 241 00:11:32,730 --> 00:11:35,180 system-- a tocar soporte 0 y el soporte 1. 242 00:11:35,180 --> 00:11:37,990 Si voy más lejos, hay absolutamente va a ser la memoria allí. 243 00:11:37,990 --> 00:11:40,660 Mi RAM existe físicamente en el ordenador. 244 00:11:40,660 --> 00:11:42,080 Pero, ¿quién sabe lo que hay allí? 245 00:11:42,080 --> 00:11:44,450 De hecho, me estoy quedando múltiple programas al mismo tiempo. 246 00:11:44,450 --> 00:11:46,910 Yo podría haber seen-- si yo no estuviera haciendo esto en el Appliant 247 00:11:46,910 --> 00:11:49,937 pero en mi Mac o PC-- que podría tener visto el contenido de un correo electrónico. 248 00:11:49,937 --> 00:11:52,270 Yo podría haber visto un instante mensaje que he enviado recientemente. 249 00:11:52,270 --> 00:11:55,390 Cualquier cosa que pueda ser persistente alrededor en la memoria 250 00:11:55,390 --> 00:11:59,180 podría haber sido visitada por medio de esta arbitraria notación de corchetes. 251 00:11:59,180 --> 00:12:02,850 O, peor aún, es posible que tenga encontrado uno de mis contraseñas 252 00:12:02,850 --> 00:12:05,859 que yo escribí recientemente en que un programa había almacenado en la memoria con el fin de 253 00:12:05,859 --> 00:12:07,900 me autenticar y entonces sólo un poco dejado 254 00:12:07,900 --> 00:12:09,910 en la memoria RAM hasta que dejé de ese programa. 255 00:12:09,910 --> 00:12:12,860 >> Y de hecho, esta es una de el peligro y uno de los poderes 256 00:12:12,860 --> 00:12:15,980 de la utilización de un lenguaje como C. Usted tiene acceso sin restricciones 257 00:12:15,980 --> 00:12:18,860 a la totalidad de los contenidos de la memoria de un programa, 258 00:12:18,860 --> 00:12:21,340 y lo que los chicos malos pueden incluso hacer en esos casos-- 259 00:12:21,340 --> 00:12:23,807 sobre todo cuando nos llegar a la programación web 260 00:12:23,807 --> 00:12:26,890 hacia el final del semestre, vamos a revisar este topic-- se saca alrededor, 261 00:12:26,890 --> 00:12:31,660 potencialmente, a alguien es la computadora de memoria y encontrar cosas tan curiosas 262 00:12:31,660 --> 00:12:32,570 como vimos allí. 263 00:12:32,570 --> 00:12:36,900 O lo que es peor aún, las contraseñas que se o ella puede entonces utilizar para hacer cosas malas. 264 00:12:36,900 --> 00:12:40,240 >> Así que está claro que no debería haber hecho esto, porque las cosas extrañas comienzan a suceder. 265 00:12:40,240 --> 00:12:42,310 De hecho, este es un programa de estrellarse. 266 00:12:42,310 --> 00:12:44,580 Esto sería el equivalente de Mac OS o Windows 267 00:12:44,580 --> 00:12:46,770 una ventana de programa simplemente desaparecer. 268 00:12:46,770 --> 00:12:48,300 Se ha producido un error inesperado. 269 00:12:48,300 --> 00:12:50,840 En el entorno de línea de comandos vemos algo como esto. 270 00:12:50,840 --> 00:12:54,480 Pero es por eso, es que estoy simplemente tocando memoria que no me pertenece. 271 00:12:54,480 --> 00:12:57,090 >> Así que vamos a defender en contra de este un poco de una manera diferente 272 00:12:57,090 --> 00:12:59,010 examinado este programa aquí. 273 00:12:59,010 --> 00:13:01,000 Así, de nuevo, el esqueleto que vimos antes les hablé 274 00:13:01,000 --> 00:13:02,480 y yo he destacado esta vez int. 275 00:13:02,480 --> 00:13:05,900 Y todo este tiempo principal tiene efectivamente devuelto un valor. 276 00:13:05,900 --> 00:13:09,120 A pesar de que en la mayor parte de nuestra conferencia ejemplos que hemos ni una sola vez utilizamos 277 00:13:09,120 --> 00:13:10,990 devolver nada en main. 278 00:13:10,990 --> 00:13:13,710 Sólo escribimos printf cerca corchete y eso es todo. 279 00:13:13,710 --> 00:13:16,500 Pero de forma gratuita, lo que la compilador estado haciendo por ti, 280 00:13:16,500 --> 00:13:19,510 efectivamente, regresa 0 para usted. 281 00:13:19,510 --> 00:13:22,950 Activa salir-- y que es un poco counterintuitive-- que 0 es buena. 282 00:13:22,950 --> 00:13:24,690 Esto no significa falsa per se. 283 00:13:24,690 --> 00:13:29,080 0 es bueno, y cualquiera que no sea 0 valor, el mundo ha decidido, 284 00:13:29,080 --> 00:13:30,619 puede significar un error. 285 00:13:30,619 --> 00:13:32,910 Así que si alguna vez ha ensuciado algo en su equipo, 286 00:13:32,910 --> 00:13:36,600 o un programa acaba de morir en usted y usted ha conseguido alguna ventana errónea 287 00:13:36,600 --> 00:13:40,360 en la pantalla, error que dice negativo 49 o error 23-- 288 00:13:40,360 --> 00:13:44,170 algunos value-- aparentemente arbitrario que es debido a que un programador ha modificable 289 00:13:44,170 --> 00:13:49,370 un valor negativo como 49 o positivo 23 para representar cualquier número, me atrevo a decir, 290 00:13:49,370 --> 00:13:53,340 de 4 mil millones de cosas posibles que podría ir mal en un programa. 291 00:13:53,340 --> 00:13:55,700 >> Entonces, ¿cómo podría yo tomar ventaja de esto yo mismo? 292 00:13:55,700 --> 00:13:58,970 Bueno, déjame abro un programa que escribí con antelación, 293 00:13:58,970 --> 00:14:01,450 y hurgar en línea llamado hola 4. 294 00:14:01,450 --> 00:14:05,650 Y es casi idéntico, excepto que Su conseguido un poco de comprobación de errores. 295 00:14:05,650 --> 00:14:09,660 En este caso, he declarado de nuevo principal como tomar dos argumentos, 296 00:14:09,660 --> 00:14:13,180 pero esta vez, en la línea 17, la notificación Estoy haciendo un poco de una comprobación de validez. 297 00:14:13,180 --> 00:14:17,100 Me estoy asegurando de que argc es igual es igual a 2. 298 00:14:17,100 --> 00:14:18,960 Porque si lo es, que significa que puede de manera segura 299 00:14:18,960 --> 00:14:21,420 tocar no sólo el soporte 0, pero el soporte 1. 300 00:14:21,420 --> 00:14:24,330 Y sigo adelante e imprimir, en este caso, Zamyla o Rob 301 00:14:24,330 --> 00:14:26,020 o cualquier palabra que he escrito fuera. 302 00:14:26,020 --> 00:14:28,020 Y ahora acaba de llegar un poco más adecuada, 303 00:14:28,020 --> 00:14:31,910 Me voy a volver de forma explícita 0 para significar que todo está bien. 304 00:14:31,910 --> 00:14:33,300 Nada malo sucedió. 305 00:14:33,300 --> 00:14:38,590 >> Pero por convención, que voy a devuelve 1, o francamente cualquier valor que no sea 0, 306 00:14:38,590 --> 00:14:40,160 si algo salió mal. 307 00:14:40,160 --> 00:14:43,270 Ahora el usuario no va a realmente cuenta de lo que está pasando. 308 00:14:43,270 --> 00:14:50,410 De hecho si entro en este directorio, nos acercamos y qué hacemos hola 4, 309 00:14:50,410 --> 00:14:54,210 ./hola-4 Zamyla comporta como espero. 310 00:14:54,210 --> 00:14:58,570 Pero si en cambio no lo escribo nada, nada parece suceder, 311 00:14:58,570 --> 00:14:59,680 pero que no se desplome. 312 00:14:59,680 --> 00:15:04,660 Y si en lugar de hacer algo como Rob es un supervisor 313 00:15:04,660 --> 00:15:07,550 en el intercambio de Thayer-- información arbitraria. 314 00:15:07,550 --> 00:15:13,680 Pero aviso, argv 1, 2, 3, 4, y 5 Ahora debe existir en la memoria. 315 00:15:13,680 --> 00:15:16,540 Eso, también, no lo es mi programa de espera, 316 00:15:16,540 --> 00:15:20,300 porque yo he comprobado si argc es igual a los iguales 2 o no. 317 00:15:20,300 --> 00:15:22,140 Así que ahora estoy defendiendo en contra de este. 318 00:15:22,140 --> 00:15:25,290 >> Ahora, en un aparte, que la programmer-- o más bien que la users-- 319 00:15:25,290 --> 00:15:29,670 Nunca vemos que 0 o 1, pero utilizando un herramienta denominada depurador, u otras herramientas, 320 00:15:29,670 --> 00:15:32,250 como veremos antes de largo, que el programador 321 00:15:32,250 --> 00:15:36,590 en realidad puede ver lo que podría ser va mal dentro de su programa. 322 00:15:36,590 --> 00:15:39,170 >> Así, cualquier pregunta sobre argc? 323 00:15:39,170 --> 00:15:40,873 Sí. 324 00:15:40,873 --> 00:15:45,292 >> AUDIENCIA: He visto donde no han tenido el carácter, [inaudible] 325 00:15:45,292 --> 00:15:49,669 acaba de decir estrella cadena d, como carácter coma asterisco. 326 00:15:49,669 --> 00:15:50,710 ¿Son equivalentes aquí? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Son. 328 00:15:51,626 --> 00:15:55,080 Así que la pregunta es, usted tiene programas de vez en cuando se ven 329 00:15:55,080 --> 00:15:57,270 como este que no lo hacen decir soporte argv cadena 330 00:15:57,270 --> 00:16:01,015 pero en lugar de decir algo como soporte de carbón argv estrellas. 331 00:16:01,015 --> 00:16:03,140 Y hay incluso otra variantes que se pueden ver. 332 00:16:03,140 --> 00:16:04,264 De hecho, son equivalentes. 333 00:16:04,264 --> 00:16:06,240 Por ahora, tenemos estos tipo de ruedas de entrenamiento 334 00:16:06,240 --> 00:16:09,737 en la forma de cadena en el CS50 biblioteca, pero en poco más de una semana 335 00:16:09,737 --> 00:16:12,570 o por lo que vamos a eliminar esa obstrucción por completo y, de hecho 336 00:16:12,570 --> 00:16:16,820 mirar lo que el carbón y la estrella son, y cómo aquellos se refieren a la memoria 337 00:16:16,820 --> 00:16:18,140 representación más general. 338 00:16:18,140 --> 00:16:19,540 Así que vamos a volver a eso. 339 00:16:19,540 --> 00:16:21,540 >> Otras preguntas sobre nuestra argv o argc? 340 00:16:21,540 --> 00:16:22,397 Sí. 341 00:16:22,397 --> 00:16:24,438 AUDIENCIA: ¿Por qué volver un error [inaudible]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: ¿Por qué lo hizo devolverá un error only-- oh! 344 00:16:29,230 --> 00:16:31,813 En el caso anterior, cuando fueron pelearse un poco con la memoria, 345 00:16:31,813 --> 00:16:35,110 ¿por qué sólo se devuelve un error cuando realmente escribí un gran número? 346 00:16:35,110 --> 00:16:36,620 Respuesta corta es, tuvimos suerte. 347 00:16:36,620 --> 00:16:39,240 En términos generales, un ordenador asigna memoria en trozos, 348 00:16:39,240 --> 00:16:42,900 y me dio un trozo bastante grande que Me alejé, sin ser notado, 349 00:16:42,900 --> 00:16:46,280 de tocar el soporte 2, soporte 3, soporte de 50, pero en cuanto me empujé 350 00:16:46,280 --> 00:16:49,080 mi suerte, me fue más allá de la límites de la cantidad de memoria 351 00:16:49,080 --> 00:16:50,520 el sistema operativo me había dado. 352 00:16:50,520 --> 00:16:52,720 Y fue entonces cuando se tomado medidas drásticas y dijo no. 353 00:16:52,720 --> 00:16:54,580 Segmentación de error. 354 00:16:54,580 --> 00:16:55,692 Sí. 355 00:16:55,692 --> 00:16:58,890 >> AUDIENCIA: ¿Cómo funciona el ordenador conocer el valor de argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: ¿Cómo funciona el equipo sabe el valor de argc? 357 00:17:02,390 --> 00:17:07,920 Cuando se ejecuta un programa, ese programa, por la naturaleza de la petición de parpadear, 358 00:17:07,920 --> 00:17:11,359 se le pasa el conjunto de palabras que fueron tecleadas 359 00:17:11,359 --> 00:17:13,300 en el indicador, que fue tecleado en el prompt. 360 00:17:13,300 --> 00:17:16,569 Y lo que es su funcionamiento sistema que esencialmente 361 00:17:16,569 --> 00:17:20,329 rellena los argumentos de los principales para usted. 362 00:17:20,329 --> 00:17:22,829 Así que ese es uno de los servicios que usted consigue, más o menos en secreto 363 00:17:22,829 --> 00:17:24,869 debajo de la capucha de un sistema operativo. 364 00:17:24,869 --> 00:17:27,118 ¿Otras preguntas? 365 00:17:27,118 --> 00:17:27,618 Sí. 366 00:17:27,618 --> 00:17:29,787 >> AUDIENCIA: ¿Qué significa volcado de memoria? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: ¿Qué significa volcado de memoria? 368 00:17:31,370 --> 00:17:32,950 Así que esa es una buena pregunta. 369 00:17:32,950 --> 00:17:35,312 Y déjame volver a este directorio aquí. 370 00:17:35,312 --> 00:17:37,270 Y te darás cuenta de que Tengo un archivo nuevo allí. 371 00:17:37,270 --> 00:17:41,670 Ha hecho llama núcleo, y es en realidad suele ser un archivo de tamaño decente. 372 00:17:41,670 --> 00:17:45,300 Eso es esencialmente una instantánea de el contenido de la memoria de mi programa 373 00:17:45,300 --> 00:17:46,902 o RAM cuando se estrelló. 374 00:17:46,902 --> 00:17:49,110 Y esto será útil, potencialmente, diagnóstica, 375 00:17:49,110 --> 00:17:52,850 una vez que se habla en una conferencia futura y la sección acerca de la depuración, 376 00:17:52,850 --> 00:17:55,730 porque en realidad se puede hacer lo equivalente a una autopsia digitales 377 00:17:55,730 --> 00:18:00,300 en ese archivo para ayudar a determinar lo que hizo mal en su programa. 378 00:18:00,300 --> 00:18:01,220 Sí. 379 00:18:01,220 --> 00:18:04,450 >> AUDIENCIA: ¿Es argc un comando en en sí, o puede usted nombrar que nada? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Buena pregunta. 381 00:18:05,575 --> 00:18:08,040 Es argc un comando en sí mismo, o puedes llamarlo algo? 382 00:18:08,040 --> 00:18:09,290 Definitivamente no es un comando. 383 00:18:09,290 --> 00:18:13,500 Se trata simplemente de una variable de nombre o el nombre de un argumento, 384 00:18:13,500 --> 00:18:15,481 y tan absolutamente que podría llamar a este foo, 385 00:18:15,481 --> 00:18:18,480 podríamos llamar a este bar, que tienden ser el go-a las palabras que una computadora 386 00:18:18,480 --> 00:18:19,860 científico va. 387 00:18:19,860 --> 00:18:22,820 Pero por convención, utilizamos argc y argv. 388 00:18:22,820 --> 00:18:25,360 Pero eso es sólo un ser humano convención, nada más. 389 00:18:25,360 --> 00:18:25,860 Bien. 390 00:18:25,860 --> 00:18:28,140 Así resulta, he estado contando un poco de un lie-- blanco 391 00:18:28,140 --> 00:18:31,264 y francamente, en el futuro, usted verá hemos estado diciendo a otras mentiras piadosas. 392 00:18:31,264 --> 00:18:33,510 Pero por ahora, vamos para pelar uno de estos. 393 00:18:33,510 --> 00:18:37,310 En este caso aquí cuando previamente corrió un programa como ./hola o ./hola-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, tuvimos el contenido de mi la memoria de la computadora buscando más o menos igual 395 00:18:42,780 --> 00:18:43,280 esto. 396 00:18:43,280 --> 00:18:45,070 Pero recordemos lo que una cadena es. 397 00:18:45,070 --> 00:18:49,279 ¿Qué dijimos hace una semana lo que un cadena en realidad está debajo del capó? 398 00:18:49,279 --> 00:18:50,320 AUDIENCIA: Arsenal de caracteres. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Es una matriz de caracteres, ¿no? 400 00:18:52,111 --> 00:18:55,760 Así que puede ser que tengamos una serie de cadenas, pero, a su vez, una cadena 401 00:18:55,760 --> 00:18:57,150 es una serie de caracteres. 402 00:18:57,150 --> 00:19:00,010 Así que si yo realmente quiero ser anal cuando dibujo esta imagen, 403 00:19:00,010 --> 00:19:03,290 Realmente debería estar dibujando un poco de la misma familia, 404 00:19:03,290 --> 00:19:08,000 por lo que en cada uno de estos índices de mi matriz argv, 405 00:19:08,000 --> 00:19:11,432 no es en sí mismo una cadena completa que sí está en una matriz. 406 00:19:11,432 --> 00:19:13,140 Y ahora la mentira blanca le estamos diciendo hoy 407 00:19:13,140 --> 00:19:15,181 es que la imagen no mirar como este. 408 00:19:15,181 --> 00:19:19,110 De hecho, las pequeñas plazas son normalmente fuera de los grandes rectángulos 409 00:19:19,110 --> 00:19:19,610 Ya está. 410 00:19:19,610 --> 00:19:21,280 Pero vamos a volver a que en poco tiempo. 411 00:19:21,280 --> 00:19:25,440 Pero esto es ./hola barra invertida 0, que siendo el carácter especial que 412 00:19:25,440 --> 00:19:28,310 demarca el final de una cadena, y tenemos otro después 413 00:19:28,310 --> 00:19:29,360 El nombre de Zamyla. 414 00:19:29,360 --> 00:19:30,900 Así que ¿qué significa esto? 415 00:19:30,900 --> 00:19:33,410 >> Bueno, déjame ir adelante y abrir otras dos ejemplos 416 00:19:33,410 --> 00:19:35,220 que están disponibles en línea. 417 00:19:35,220 --> 00:19:40,590 Uno se llama argv1.c y el otro es argv2. 418 00:19:40,590 --> 00:19:44,260 Es un programa súper simple que es diferente de los programas anteriores 419 00:19:44,260 --> 00:19:47,260 en que ahora estoy usando argc y argv aquí. 420 00:19:47,260 --> 00:19:54,300 Y ahora me estoy integrando con un bucle for en la línea 18, desde i = 0 en un máximo de argc. 421 00:19:54,300 --> 00:19:56,850 Y ¿qué voy a hacer con esta línea de código en esta lista? 422 00:19:56,850 --> 00:19:58,270 En Inglés. 423 00:19:58,270 --> 00:20:00,510 Esto demuestra obviamente uso de argc. 424 00:20:00,510 --> 00:20:03,670 Pero en Inglés, lo que hace que hacer si me quedo este programa? 425 00:20:03,670 --> 00:20:04,366 ¿Sí? 426 00:20:04,366 --> 00:20:07,386 >> AUDIENCIA: Se va a imprimir su pantalla tantas veces como quieras. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Exactamente. 428 00:20:08,260 --> 00:20:10,480 Así que lo que sea que palabras escriba en el indicador, es 429 00:20:10,480 --> 00:20:13,120 ir a regurgitar ellos me uno por línea. 430 00:20:13,120 --> 00:20:14,370 Así que vamos a seguir adelante y hacer esto. 431 00:20:14,370 --> 00:20:17,862 Déjame ir a mi directorio hacer y hacen ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Y ahora, vamos a mantenerlo simple. 434 00:20:21,770 --> 00:20:23,834 Vamos a hacer nada al principio. 435 00:20:23,834 --> 00:20:26,750 Lo hizo imprimir una cosa, y eso es de hecho el nombre del programa, 436 00:20:26,750 --> 00:20:28,240 porque eso es en soporte 0. 437 00:20:28,240 --> 00:20:33,290 Si ahora digo foo, que va a hacer los dos, y si digo foo bar, 438 00:20:33,290 --> 00:20:35,580 que va a decir esas tres cosas. 439 00:20:35,580 --> 00:20:37,740 Eso sí que es algo interesante, tal vez. 440 00:20:37,740 --> 00:20:41,450 Pero recordar que argv es una matriz de cadenas, 441 00:20:41,450 --> 00:20:45,960 pero una cadena es una serie de caracteres, para que podamos tomar las cosas a un nivel superior 442 00:20:45,960 --> 00:20:48,560 y aplicar ese básica lógica y hacer que el código que 443 00:20:48,560 --> 00:20:51,160 se ve un poco más críptico, hay que reconocerlo. 444 00:20:51,160 --> 00:20:53,540 Pero al tener un anidada bucle, algo parecido 445 00:20:53,540 --> 00:20:57,030 a lo que se puede recordar de Mario, por ejemplo, si lo hizo de esta manera. 446 00:20:57,030 --> 00:21:00,380 >> Así que ahora noto en la línea 19, que soy de nuevo la iteración en mis argumentos, 447 00:21:00,380 --> 00:21:02,410 desde 0 hasta en argc. 448 00:21:02,410 --> 00:21:05,510 Y ahora en línea 21-- estoy pedir prestado un truco de última semana-- 449 00:21:05,510 --> 00:21:11,090 Estoy comprobando lo que es la longitud del soporte argv i. 450 00:21:11,090 --> 00:21:12,920 Estoy almacenando la respuesta en el n. 451 00:21:12,920 --> 00:21:18,230 Y entonces estoy integrando desde j en hasta n, donde j se inicializa a 0. 452 00:21:18,230 --> 00:21:19,460 Así, la convención para el recuento. 453 00:21:19,460 --> 00:21:22,335 Una vez que hayas utilizado i, si usted tiene un bucle anidado, no se puede usar i de nuevo, 454 00:21:22,335 --> 00:21:25,770 de lo contrario te Clobber, potencialmente, el valor fuera del bucle interno. 455 00:21:25,770 --> 00:21:27,200 Así que estoy usando j por convención. 456 00:21:27,200 --> 00:21:28,020 Podríamos utilizar k. 457 00:21:28,020 --> 00:21:31,080 Si usted tiene más de k, es probable que tener demasiado de anidación, por lo general. 458 00:21:31,080 --> 00:21:33,800 Pero ahora, notar mi printf línea es ligeramente diferente. 459 00:21:33,800 --> 00:21:37,520 No estoy imprimiendo% s, estoy impresión% c, que, por supuesto, 460 00:21:37,520 --> 00:21:39,460 es un marcador de posición para un char. 461 00:21:39,460 --> 00:21:40,770 >> Y ahora note esta sintaxis. 462 00:21:40,770 --> 00:21:41,270 Nuevo. 463 00:21:41,270 --> 00:21:42,630 Nosotros no hemos visto antes. 464 00:21:42,630 --> 00:21:47,290 Pero lógicamente, esto sólo significa obtener la cadena i-ésimo en argv 465 00:21:47,290 --> 00:21:50,067 y obtener el jth qué? 466 00:21:50,067 --> 00:21:50,900 AUDIENCIA: Carácter. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Personaje en esa cadena. 468 00:21:52,800 --> 00:21:57,100 Así mediante el uso de corchetes seguido de corchetes, 469 00:21:57,100 --> 00:22:00,390 este es el buceo primero en cadenas de argv, 470 00:22:00,390 --> 00:22:02,225 y luego el segundo corchetes con j 471 00:22:02,225 --> 00:22:06,580 es sumergirse en los personajes de esa cadena en particular en argv. 472 00:22:06,580 --> 00:22:09,562 Y entonces, sólo por si acaso, Estoy imprimiendo una nueva línea aquí. 473 00:22:09,562 --> 00:22:12,020 Así que ahora me dejes ir adelante y abrir una ventana un poco más grande 474 00:22:12,020 --> 00:22:13,600 por lo que podemos ver esto en acción. 475 00:22:13,600 --> 00:22:15,700 Déjame ir a esa carpeta. 476 00:22:15,700 --> 00:22:22,550 Y ahora lo que argv 2-- whoops-- hacer argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Intro. 478 00:22:23,110 --> 00:22:24,860 Y es un poco difícil leer verticalmente, 479 00:22:24,860 --> 00:22:27,920 pero eso es de hecho el nombre de la programa, seguido por una línea en blanco. 480 00:22:27,920 --> 00:22:30,210 Ahora voy a seguir adelante y hacer foo. 481 00:22:30,210 --> 00:22:33,210 Del mismo modo difícil de leer, pero es de hecho imprimir un carácter por línea. 482 00:22:33,210 --> 00:22:36,780 Y si lo hago bar, ahora es impresión de los línea por línea. 483 00:22:36,780 --> 00:22:40,140 Así que la comida para llevar aquí no es tanto que, wow, mira este nuevo truco 484 00:22:40,140 --> 00:22:44,750 donde se puede obtener en los contenidos de caracteres específicos de una matriz, 485 00:22:44,750 --> 00:22:48,380 sino más bien cómo lo estamos teniendo estos básicos ideas como la indización en una matriz, 486 00:22:48,380 --> 00:22:51,620 y luego la indexación en un matriz que estaba en esa matriz, 487 00:22:51,620 --> 00:22:56,180 y simplemente aplicar las mismas ideas a ejemplos ligeramente más sofisticados. 488 00:22:56,180 --> 00:22:59,560 Pero los fundamentos realmente no tienen cambiado, incluso desde la semana pasada. 489 00:22:59,560 --> 00:23:02,350 >> Ahora bien, esto es algo puntual, en que, recordemos, en la semana cero 490 00:23:02,350 --> 00:23:04,110 jugamos con un libro teléfono como este. 491 00:23:04,110 --> 00:23:06,670 Y aunque esto es obviamente piezas físicas de papel, 492 00:23:06,670 --> 00:23:09,150 usted puede tipo de pensar un directorio telefónico como una matriz. 493 00:23:09,150 --> 00:23:12,770 Ciertamente, si usted fuera a reimplementar estas piezas estas piezas de papel 494 00:23:12,770 --> 00:23:15,260 en un ordenador, probablemente usted utilizaría algo 495 00:23:15,260 --> 00:23:20,270 como una matriz para almacenar todos los nombres y números de la A hasta el final 496 00:23:20,270 --> 00:23:23,800 a la Z. Así que esto es bueno, porque nos permite una oportunidad, 497 00:23:23,800 --> 00:23:28,310 tal vez, a considerar cómo podría realmente poner en práctica algo así. 498 00:23:28,310 --> 00:23:31,250 Al igual que con una serie de puertas aquí. 499 00:23:31,250 --> 00:23:36,380 Así que si yo could-- necesitamos uno voluntario para venir en adelante. 500 00:23:36,380 --> 00:23:36,980 Vamos a ver. 501 00:23:36,980 --> 00:23:40,650 Un rostro desconocido tal vez, cara desconocida, tal vez. 502 00:23:40,650 --> 00:23:42,090 ¿Qué tal en naranja? 503 00:23:42,090 --> 00:23:42,680 Aquí. 504 00:23:42,680 --> 00:23:45,870 Camisa anaranjada, vamos arriba. 505 00:23:45,870 --> 00:23:52,230 >> Vamos a seguir adelante ahora y movimiento estas puertas a un lado, 506 00:23:52,230 --> 00:23:54,020 moverlos fuera del camino por un momento. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Cuál es tu nombre? 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 Encantada de conocerte. 513 00:23:59,451 --> 00:23:59,950 Bien. 514 00:23:59,950 --> 00:24:04,500 Así que tenemos detrás de estos seis puertas digitalmente en la screen-- 515 00:24:04,500 --> 00:24:07,810 o, mejor dicho, siete puertas en el screen-- un montón de números. 516 00:24:07,810 --> 00:24:10,099 Y yo le he dicho nada en advance-- acuerdo? 517 00:24:10,099 --> 00:24:11,140 AJAY: Nada de antemano. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Todo lo que quiero que hagas ahora es encontrar para mí, y para nosotros, 519 00:24:14,730 --> 00:24:20,920 Realmente, el número 50, un paso a la vez. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Número 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: El número 50. 522 00:24:22,580 --> 00:24:24,746 Y usted puede revelar lo que hay detrás de cada una de estas puertas 523 00:24:24,746 --> 00:24:27,930 simplemente tocándola con un dedo. 524 00:24:27,930 --> 00:24:31,364 Maldita sea. [Risas] 525 00:24:31,364 --> 00:24:34,560 >> [Aplausos] 526 00:24:34,560 --> 00:24:39,540 >> Muy bien hecho. 527 00:24:39,540 --> 00:24:40,400 Okay. 528 00:24:40,400 --> 00:24:44,090 Tenemos un regalo precioso premio para usted aquí. 529 00:24:44,090 --> 00:24:46,520 Su selección de películas que discutido la semana pasada. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, hombre. 531 00:24:47,362 --> 00:24:49,050 Oh, nunca he visto Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Bien. 534 00:24:50,140 --> 00:24:53,790 Así que aguanta sólo un momento. 535 00:24:53,790 --> 00:24:57,430 Cómo-- hagamos que esto un moment-- enseñable 536 00:24:57,430 --> 00:25:00,412 cómo fue el proceso de encontrar el número 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Elegí al azar. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Así que usted eligió azar y tuvimos suerte. 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 Excelente. 542 00:25:05,050 --> 00:25:08,470 Así que ahora, no tenía tenido suerte, ¿qué otra cosa 543 00:25:08,470 --> 00:25:10,210 podría haber ocurrido detrás de estas puertas? 544 00:25:10,210 --> 00:25:12,930 Así que si sigo adelante y revelar estos números aquí, 545 00:25:12,930 --> 00:25:15,180 lo que realmente son en orden aleatorio. 546 00:25:15,180 --> 00:25:17,750 Y lo mejor que podría tener hecho, francamente, es por, en última instancia, 547 00:25:17,750 --> 00:25:19,410 en el peor de los casos, la comprobación de todos ellos. 548 00:25:19,410 --> 00:25:23,000 Así que tienes súper afortunado, que no es lo que llamaríamos un algoritmo. 549 00:25:23,000 --> 00:25:24,730 Sí, felicidades. 550 00:25:24,730 --> 00:25:27,010 Pero ahora let's-- humor yo, si pudiera. 551 00:25:27,010 --> 00:25:28,310 Vamos a ir a esta ficha aquí. 552 00:25:28,310 --> 00:25:31,460 Y aquí están los números en claro lo que parece ser un orden aleatorio, 553 00:25:31,460 --> 00:25:32,280 y que eran. 554 00:25:32,280 --> 00:25:35,160 Pero ahora si en lugar reclamación que detrás de estas puertas 555 00:25:35,160 --> 00:25:39,070 son números que se ordenan. 556 00:25:39,070 --> 00:25:41,780 El objetivo ahora es también nosotros encontrar el número 50. 557 00:25:41,780 --> 00:25:45,910 Pero hacerlo algorítmicamente, y decirnos cómo va en ello. 558 00:25:45,910 --> 00:25:48,020 Y si lo encuentra, se mantiene la película. 559 00:25:48,020 --> 00:25:49,520 Usted no lo encuentras, te lo devolveré. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Así que voy a comprobar los extremos primero, para determinar si hay-- 562 00:25:58,112 --> 00:26:02,048 [Risas y aplausos] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Aquí tienes. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Echemos un vistazo a uno de los predecesores de Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, que no fue tan afortunado. 568 00:26:25,450 --> 00:26:28,670 Aceptar, por lo que su tarea aquí, Sean, es el siguiente. 569 00:26:28,670 --> 00:26:32,970 Me he escondido detrás de estos puertas del número siete, 570 00:26:32,970 --> 00:26:37,200 pero escondido en alguna de estas puertas así son otros números no negativos. 571 00:26:37,200 --> 00:26:40,730 Y su objetivo es pensar en este fila superior de los números como sólo una matriz. 572 00:26:40,730 --> 00:26:43,590 Estamos a sólo una secuencia de piezas de papel con números detrás de ellos. 573 00:26:43,590 --> 00:26:47,640 Y su objetivo es, sólo con la parte superior array aquí, me encontrar el número siete. 574 00:26:47,640 --> 00:26:51,200 Y estamos entonces vamos a criticar cómo se van haciendo sobre él. 575 00:26:51,200 --> 00:26:52,920 Encuéntrenos el número siete, por favor. 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 No es una pregunta capciosa. 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 En este punto, su puntuación no es muy bueno, para que así pueda seguir adelante. 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 Adelante. 590 00:27:39,802 --> 00:27:42,510 Francamente, no puedo evitar preguntarme lo que estás siquiera pensar. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Puedo tomar de sólo la fila superior. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Sólo la fila superior. 593 00:27:46,240 --> 00:27:47,281 Así que tienes tres izquierda. 594 00:27:47,281 --> 00:27:48,310 Así que encontrar 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [EXCLAMACIONES SUGERENCIAS] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Así pues, tanto de los que eran increíbles por razones muy diferentes. 599 00:28:26,130 --> 00:28:29,150 Así que aquí es donde nos dejamos hace un momento, 600 00:28:29,150 --> 00:28:32,530 y la idea clave aquí Fueron estas puertas tenían números 601 00:28:32,530 --> 00:28:37,390 detrás de ellos que se ordenaron, el ideal comida para llevar para el cual es que se puede hacer 602 00:28:37,390 --> 00:28:39,670 fundamentalmente mejor en este segundo ejemplo-- 603 00:28:39,670 --> 00:28:42,380 y, de hecho, eso era de Sean primer intento con números aleatorios 604 00:28:42,380 --> 00:28:45,460 así como antes-- pero tan pronto ya que estos números están ordenados, 605 00:28:45,460 --> 00:28:47,980 al igual que la guía telefónica, ¿qué se puede obviamente hacer? 606 00:28:47,980 --> 00:28:50,090 O ¿cómo se puede aprovechar ese conocimiento? 607 00:28:50,090 --> 00:28:51,530 Sí. 608 00:28:51,530 --> 00:28:54,910 >> AUDIENCIA: Usted va a medio camino [inaudible]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Si. 610 00:28:55,660 --> 00:28:56,160 Exactamente. 611 00:28:56,160 --> 00:28:59,680 Así instinto inicial de Ajay era para comprobar los extremos, por lo que recuerdo, 612 00:28:59,680 --> 00:29:02,320 y luego nos tipo de acabado el ejemplo rápidamente. 613 00:29:02,320 --> 00:29:05,220 Pero si empezamos a hacer esto más metódicamente a lo largo de esas líneas, 614 00:29:05,220 --> 00:29:07,860 pero partiendo quizás en el medio, ya que están ordenados, 615 00:29:07,860 --> 00:29:10,900 tan pronto como nos revelamos la número 16, por lo tanto, sabes-- 616 00:29:10,900 --> 00:29:14,850 y vamos a hacer exactamente eso-- nos por lo tanto, saber que el 50, en el caso de hoy, 617 00:29:14,850 --> 00:29:16,080 tiene que ser a la derecha. 618 00:29:16,080 --> 00:29:18,735 Así que al igual que en la semana cero cuando rompimos la guía telefónica en la mitad 619 00:29:18,735 --> 00:29:21,490 y lanzó la mitad de la problema de distancia, la misma idea aquí. 620 00:29:21,490 --> 00:29:23,680 Podemos lanzar este medio de que el problema desaparezca. 621 00:29:23,680 --> 00:29:25,730 Y probablemente lo que podría hacer algorítmicamente, 622 00:29:25,730 --> 00:29:28,710 una vez que sabes que el 50 debe ser a la derecha, si es en cualquier lugar, 623 00:29:28,710 --> 00:29:31,390 es probar allí, en el medio de las puertas restantes. 624 00:29:31,390 --> 00:29:33,450 Por supuesto, 50 es mayor del 42, por lo que podemos 625 00:29:33,450 --> 00:29:36,060 tirar esto restante trimestre del problema de distancia, 626 00:29:36,060 --> 00:29:38,510 y, por último, identificar algo como 50. 627 00:29:38,510 --> 00:29:41,050 Pero al igual que con la guía telefónica, estos números 628 00:29:41,050 --> 00:29:44,560 se les dio a nosotros ya en forma ordenada, lo que nos deja 629 00:29:44,560 --> 00:29:47,450 con la pregunta, ¿cómo hacer las cosas en orden ordenados? 630 00:29:47,450 --> 00:29:49,640 Y, francamente, ¿a qué costo? 631 00:29:49,640 --> 00:29:51,390 Una cosa es ser entregó la guía telefónica 632 00:29:51,390 --> 00:29:54,810 y luego impresionar a tus amigos mediante la búsqueda de un número de teléfono muy rápido, ¿verdad? 633 00:29:54,810 --> 00:29:58,520 Rasgando 32 páginas para encontrar una persona de cada 4 mil millones de páginas, 634 00:29:58,520 --> 00:30:00,470 dijimos era un ejemplo extremo. 635 00:30:00,470 --> 00:30:03,320 Pero, ¿cuánto tiempo le tomó a Verizon para ordenar que guía telefónica? 636 00:30:03,320 --> 00:30:06,170 ¿Cuánto tiempo nos tomó para ordenar estos siete números? 637 00:30:06,170 --> 00:30:10,110 Esa es una pregunta que nos hemos hasta ahora ignorado por completo. 638 00:30:10,110 --> 00:30:12,330 >> Así que vamos a responder a esta pregunta ahora. 639 00:30:12,330 --> 00:30:15,920 Y todos estamos de películas ahora, pero sí tenemos algunas bolas de estrés. 640 00:30:15,920 --> 00:30:19,480 Si, por ejemplo, ocho voluntarios no le importaría acompañarnos hasta aquí? 641 00:30:19,480 --> 00:30:24,100 Vamos a seguir adelante y hacer, ¿qué tal ustedes cuatro, tres de ustedes aquí? 642 00:30:24,100 --> 00:30:25,290 Obtener algunas caras nuevas. 643 00:30:25,290 --> 00:30:27,220 Y los cuatro de ustedes allí? 644 00:30:27,220 --> 00:30:30,760 Y ahora-- dejar no de sesgo aquí-- y número ocho de aquí al final. 645 00:30:30,760 --> 00:30:32,060 Vamos arriba. 646 00:30:32,060 --> 00:30:32,560 Bien. 647 00:30:32,560 --> 00:30:37,480 Así que lo que tenemos aquí para cada uno de ustedes es un número. 648 00:30:37,480 --> 00:30:40,055 Si desea ir Adelante, toma este número. 649 00:30:40,055 --> 00:30:40,763 Cuál es tu nombre? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, está bien. 652 00:30:43,100 --> 00:30:44,297 Eres el número 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 Eres el número 2. 657 00:30:47,530 --> 00:30:49,100 Y seguir adelante, como me entrego que las hojas de papel, 658 00:30:49,100 --> 00:30:52,130 alinear a vosotros mismos delante de la música se encuentra en el mismo orden como allá arriba. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hola, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, es bueno verte. 661 00:30:53,970 --> 00:30:54,520 Número 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, número 4. 664 00:30:56,760 --> 00:30:57,549 Bienvenido 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 Número 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, número 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, número 7. 672 00:31:04,880 --> 00:31:05,200 Y? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, número 8. 675 00:31:06,815 --> 00:31:07,100 Bien. 676 00:31:07,100 --> 00:31:08,766 Vaya por delante y se consigue en este orden. 677 00:31:08,766 --> 00:31:11,440 Permítanme poner un remanente atril en su lugar. 678 00:31:11,440 --> 00:31:13,670 ¿Dónde necesita un stand? 679 00:31:13,670 --> 00:31:14,170 Okay. 680 00:31:14,170 --> 00:31:18,710 Vaya por delante y sólo hay que poner los números donde el público puede verlos en, 681 00:31:18,710 --> 00:31:20,340 el atril hacia afuera. 682 00:31:20,340 --> 00:31:27,240 Y es de esperar, nuestro primer comprobación de validez aquí-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Espera un minuto. 685 00:31:29,070 --> 00:31:31,140 No tenemos un 8. 686 00:31:31,140 --> 00:31:35,180 Necesito desalojarlo de el ejemplo de alguna manera. 687 00:31:35,180 --> 00:31:35,680 No. 688 00:31:35,680 --> 00:31:36,940 No, eso está bien. 689 00:31:36,940 --> 00:31:37,890 Vamos a ver. 690 00:31:37,890 --> 00:31:38,880 Podemos hacer esto. 691 00:31:38,880 --> 00:31:39,440 Colocarse. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Eso es. 694 00:31:45,740 --> 00:31:46,800 Correcta. 695 00:31:46,800 --> 00:31:47,360 Bien. 696 00:31:47,360 --> 00:31:50,260 Así pues, ahora tenemos 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Okay. 698 00:31:50,760 --> 00:31:51,360 Excelente. 699 00:31:51,360 --> 00:31:54,400 >> Así que la pregunta en cuestión es, en qué costo, y por medio de qué método, 700 00:31:54,400 --> 00:31:58,580 podemos realmente ordenar estos números aquí para que podamos tipo de trabajo hacia atrás, 701 00:31:58,580 --> 00:32:02,759 en última instancia, y decide-- es realmente impresionante, ¿es realmente eficaz, 702 00:32:02,759 --> 00:32:04,550 que puedo dividir y conquistar una guía telefónica? 703 00:32:04,550 --> 00:32:06,716 ¿Es realmente eficiente que Puedo dividir y conquistar 704 00:32:06,716 --> 00:32:08,600 esas piezas digitales de papel en el tablero, 705 00:32:08,600 --> 00:32:14,500 si tal vez nos va a costar un fortuna en el tiempo o los ciclos de energía o de CPU 706 00:32:14,500 --> 00:32:17,340 para conseguir realmente nuestros datos en cierta forma ordenada? 707 00:32:17,340 --> 00:32:18,930 Así que vamos a esa pregunta. 708 00:32:18,930 --> 00:32:22,077 >> Así que para empezar, estos números son en más o menos al azar, 709 00:32:22,077 --> 00:32:24,160 y yo voy a proponer un algoritmo o proceso 710 00:32:24,160 --> 00:32:25,970 por el cual podemos clasificar estas personas. 711 00:32:25,970 --> 00:32:28,100 Voy a abordar esta bastante ingenuamente. 712 00:32:28,100 --> 00:32:30,730 Y voy a reconocer que es una especie de un montón para mí 713 00:32:30,730 --> 00:32:32,890 para envolver mi mente alrededor de la datos enteros establecen a la vez. 714 00:32:32,890 --> 00:32:33,640 Pero ¿sabes qué? 715 00:32:33,640 --> 00:32:37,450 Voy a hacer un poco de correcciones marginales muy simples. 716 00:32:37,450 --> 00:32:41,152 4 y 2 son fuera de servicio, si el objetivo es pasar de 1 en un máximo de 8. 717 00:32:41,152 --> 00:32:41,860 Así que ya sabes qué? 718 00:32:41,860 --> 00:32:43,776 Voy a tener que chicos intercambian, si cambia 719 00:32:43,776 --> 00:32:46,380 físicamente y posiciones sus pedazos de papel. 720 00:32:46,380 --> 00:32:47,894 Ahora 4 y 6, estos son en orden. 721 00:32:47,894 --> 00:32:49,060 Voy a dejar a los ser. 722 00:32:49,060 --> 00:32:50,227 6 y 8, los que están en orden. 723 00:32:50,227 --> 00:32:51,185 El ir a dejarlos ser. 724 00:32:51,185 --> 00:32:52,170 8 and1, fuera de orden. 725 00:32:52,170 --> 00:32:54,790 Si ustedes dos no le importaría intercambio. 726 00:32:54,790 --> 00:32:57,300 Ahora 8 y 3, si ustedes pudieran intercambiar. 727 00:32:57,300 --> 00:32:59,320 8 y 7, si ustedes pudieran intercambiar. 728 00:32:59,320 --> 00:33:01,790 Y 8 y 5, si ustedes pudieran intercambiar. 729 00:33:01,790 --> 00:33:03,980 >> Ahora, estoy hecho? 730 00:33:03,980 --> 00:33:05,200 No, obviamente no. 731 00:33:05,200 --> 00:33:07,880 Pero he tomado la situación mejor, ¿verdad? 732 00:33:07,880 --> 00:33:09,430 ¿Cuál era tu nombre, número 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Así que Rachel tiene efectivamente burbujeaba bastante lejos, 735 00:33:12,850 --> 00:33:15,660 todo el camino hasta el final de mi serie de números aquí. 736 00:33:15,660 --> 00:33:17,310 Y así, ese problema es una especie de resolverse. 737 00:33:17,310 --> 00:33:21,670 Ahora, claramente, 2 todavía tiene que mover un poco, y 4 y 6 y 1. 738 00:33:21,670 --> 00:33:24,420 Pero me parece que han conseguido una poco más cerca de la solución. 739 00:33:24,420 --> 00:33:26,790 Así que vamos a aplicar este mismo heurística ingenua de nuevo. 740 00:33:26,790 --> 00:33:27,690 2 y 4, en Aceptar. 741 00:33:27,690 --> 00:33:28,810 4 y 6, en Aceptar. 742 00:33:28,810 --> 00:33:29,930 6 y 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 De intercambio Let. 744 00:33:32,230 --> 00:33:33,200 6 y 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 De intercambio Let. 746 00:33:34,420 --> 00:33:35,580 6 y 7 está bien. 747 00:33:35,580 --> 00:33:36,590 7 y 5, pues no. 748 00:33:36,590 --> 00:33:37,790 De intercambio Let. 749 00:33:37,790 --> 00:33:38,470 Y ahora 7 y 8. 750 00:33:38,470 --> 00:33:39,862 ¿Y cuál es tu nombre? 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 Así que ahora es Frances, incluso en una mejor posición, porque ahora 7 y 8 754 00:33:44,230 --> 00:33:46,440 se burbujeaba correctamente hasta la cima. 755 00:33:46,440 --> 00:33:47,510 Así que 2 y 4, en Aceptar. 756 00:33:47,510 --> 00:33:48,720 4 y 1, de intercambio de let. 757 00:33:48,720 --> 00:33:50,410 4 y 3, de intercambio de let. 758 00:33:50,410 --> 00:33:51,550 4 y 6, que estás bien. 759 00:33:51,550 --> 00:33:53,340 6 y 5, de intercambio de let. 760 00:33:53,340 --> 00:33:54,590 Y ahora esos tipos son buenos. 761 00:33:54,590 --> 00:33:55,780 Ya casi llegamos. 762 00:33:55,780 --> 00:33:57,706 2 y 1, fuera de servicio, por lo que cambiar. 763 00:33:57,706 --> 00:33:59,080 Y ahora déjame hacer una comprobación de validez. 764 00:33:59,080 --> 00:34:03,080 2 y 3, 3 y 4, 4 y 5, 5 y 6, 6 y 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, así que hemos terminado. 766 00:34:05,060 --> 00:34:09,310 >> Pero ¿a qué precio me hizo ordenar estos números aquí? 767 00:34:09,310 --> 00:34:13,960 Bueno, ¿cuántos pasos hizo que potencialmente tomar al ordenar estas personas? 768 00:34:13,960 --> 00:34:15,710 Bueno, vamos a volver a esa pregunta. 769 00:34:15,710 --> 00:34:18,030 Pero, francamente, si tienes un poco aburrido, eso es 770 00:34:18,030 --> 00:34:22,270 tipo de revelador en que esto no era tal vez el algoritmo más eficiente. 771 00:34:22,270 --> 00:34:25,230 Y, de hecho, francamente, estoy sudando tanto más yendo y viniendo. 772 00:34:25,230 --> 00:34:26,639 Que no se sentía particularmente eficiente. 773 00:34:26,639 --> 00:34:27,805 Así que vamos a intentar algo más. 774 00:34:27,805 --> 00:34:31,870 Si ustedes pudieran restablecer vosotros mismos a estos ocho valores. 775 00:34:31,870 --> 00:34:32,969 Buen trabajo. 776 00:34:32,969 --> 00:34:36,570 >> Echemos un vistazo digitalmente, por sólo un momento antes de intentar otra cosa, 777 00:34:36,570 --> 00:34:38,179 a lo que acaba de suceder. 778 00:34:38,179 --> 00:34:41,330 Hasta aquí, estás a punto de ver una visualización de estos ocho seres humanos 779 00:34:41,330 --> 00:34:44,719 por el que azul y rojo barras representan los números. 780 00:34:44,719 --> 00:34:46,670 La más alta la barra, cuanto más grande es el número. 781 00:34:46,670 --> 00:34:48,510 Cuanto más corta sea la barra, cuanto menor sea el número. 782 00:34:48,510 --> 00:34:51,560 Y lo que vas a ver es en orden aleatorio más de ocho de ellos. 783 00:34:51,560 --> 00:34:55,830 Usted va a ver estas barras siendo ordenado por el mismo algoritmo, 784 00:34:55,830 --> 00:34:59,890 o conjunto de instrucciones, que que llamaremos de ahora en adelante especie de burbuja. 785 00:34:59,890 --> 00:35:04,000 Así que notar, cada segundo más o menos, dos barras se iluminan en rojo, 786 00:35:04,000 --> 00:35:05,590 se comparan por el ordenador. 787 00:35:05,590 --> 00:35:08,630 Y entonces, si la gran barra y la pequeño bar están fuera de orden, 788 00:35:08,630 --> 00:35:11,220 que están siendo intercambiados por mí. 789 00:35:11,220 --> 00:35:15,120 >> Ahora bien, esto es increíblemente tedioso al ver esto, sin duda, 790 00:35:15,120 --> 00:35:18,630 por mucho tiempo, pero note la takeaway-- grandes barras en movimiento a la derecha, 791 00:35:18,630 --> 00:35:20,460 pequeñas barras en movimiento a la izquierda. 792 00:35:20,460 --> 00:35:23,380 Vamos a abortar este proceso y acelerar este proceso 793 00:35:23,380 --> 00:35:27,330 ser mucho más rápido, por lo que podemos conseguir un sentido de alto nivel de lo que, 794 00:35:27,330 --> 00:35:29,970 de hecho, una especie de burbuja que está haciendo. 795 00:35:29,970 --> 00:35:33,150 De hecho, está burbujeando a la lado derecho de la lista, 796 00:35:33,150 --> 00:35:35,260 o la matriz, los bares más grandes. 797 00:35:35,260 --> 00:35:40,020 Y por el contrario, los pequeños bares son burbujear su camino hacia abajo a la izquierda, 798 00:35:40,020 --> 00:35:42,950 aunque a un ritmo más rápido que hicimos previamente. 799 00:35:42,950 --> 00:35:45,850 Por lo tanto, más difíciles de ver con los seres humanos, pero visualmente eso es precisamente lo que 800 00:35:45,850 --> 00:35:46,540 que estaba sucediendo. 801 00:35:46,540 --> 00:35:49,110 >> Pero vamos a tratar de una forma fundamentalmente enfoque diferente ahora. 802 00:35:49,110 --> 00:35:52,387 Vamos a probar un diferente algoritmo mediante el cual tenemos que 803 00:35:52,387 --> 00:35:59,640 chicos comienzan en estos originales posiciones, que era este orden aquí. 804 00:35:59,640 --> 00:36:00,827 Y vamos a seguir adelante ahora. 805 00:36:00,827 --> 00:36:02,910 Y yo voy a hacer algo aún más simple, ¿verdad? 806 00:36:02,910 --> 00:36:06,710 En retrospectiva, el intercambio de pares de nuevo y otra vez, casi un poco inteligente. 807 00:36:06,710 --> 00:36:10,460 Vamos a hacer las cosas aún más ingenuamente, donde si quiero clasificar a estas personas, 808 00:36:10,460 --> 00:36:12,560 déjame seguir buscando para el elemento más pequeño. 809 00:36:12,560 --> 00:36:14,570 Así que ahora mismo, 4 es el número más pequeño que he visto. 810 00:36:14,570 --> 00:36:15,695 Voy a recordar eso. 811 00:36:15,695 --> 00:36:17,750 No, 2 es mejor, y recuerdo. 812 00:36:17,750 --> 00:36:20,730 1 es aún menor. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 Okay. 815 00:36:22,470 --> 00:36:23,750 Uno-- ¿cuál es tu nombre? 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 Así, Artie, adelante. 819 00:36:25,460 --> 00:36:27,043 Yo voy a salir de la línea. 820 00:36:27,043 --> 00:36:28,400 Si pudieras volver aquí. 821 00:36:28,400 --> 00:36:30,790 Y tengo que hacer sitio para él. 822 00:36:30,790 --> 00:36:32,040 Tenemos un punto de decisión aquí. 823 00:36:32,040 --> 00:36:36,000 ¿Cómo podemos hacer espacio para Artie aquí al comienzo, donde el número 1 pertenece? 824 00:36:36,000 --> 00:36:36,770 >> AUDIENCIA: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, nos podría cambiar todo el mundo. 826 00:36:38,950 --> 00:36:40,860 Pero proponer una optimización. 827 00:36:40,860 --> 00:36:43,410 Eso se siente un poco molesto para que le pregunte a cuatro personas 828 00:36:43,410 --> 00:36:44,620 para mover todo el camino. 829 00:36:44,620 --> 00:36:45,520 ¿Qué otra cosa podía hacer? 830 00:36:45,520 --> 00:36:46,360 >> AUDIENCIA: Interruptor de ellos. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Interruptor ellos. 832 00:36:46,850 --> 00:36:47,900 ¿Y cuál es tu nombre? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, se movió. 835 00:36:50,330 --> 00:36:54,440 Mucho más eficiente sólo para tener Lugares de intercambio Jacob con Artie, 836 00:36:54,440 --> 00:36:56,710 en lugar de forzar los cuatro de estas personas, 837 00:36:56,710 --> 00:36:58,734 muchas gracias, a su posición correcta. 838 00:36:58,734 --> 00:37:01,150 Lo bueno de Artie ahora, está en su posición correcta. 839 00:37:01,150 --> 00:37:02,060 Vamos a hacer esto de nuevo. 840 00:37:02,060 --> 00:37:03,730 2, que es el número más pequeño que he visto. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 Okay. 843 00:37:06,190 --> 00:37:07,467 2 es sin duda la más pequeña. 844 00:37:07,467 --> 00:37:08,550 No tiene que hacer ningún trabajo. 845 00:37:08,550 --> 00:37:09,320 Vamos a hacerlo de nuevo. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Más pequeño? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nop. 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 Permítanme recordar 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Que recuerde 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Menor número que he visto en este paso es 3. 857 00:37:18,490 --> 00:37:20,340 Si vienes en adelante. 858 00:37:20,340 --> 00:37:21,986 ¿Dónde vamos a poner usted? 859 00:37:21,986 --> 00:37:22,860 ¿Y cuál es tu nombre? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, estamos va a tener que desalojarlo. 862 00:37:25,780 --> 00:37:28,670 Pero eso es más eficiente, a apenas intercambiar dos personas, 863 00:37:28,670 --> 00:37:31,850 de tener varias personas en realidad eludir terminado. 864 00:37:31,850 --> 00:37:32,850 Ahora vamos a hacer esto de nuevo. 865 00:37:32,850 --> 00:37:34,980 Voy a seleccionar 4, así que vamos a cabo. 866 00:37:34,980 --> 00:37:36,540 ¿Y quién va a mover? 867 00:37:36,540 --> 00:37:37,750 Número 8, por supuesto. 868 00:37:37,750 --> 00:37:40,260 Si ahora me encuentro con el número 5, vamos a cabo. 869 00:37:40,260 --> 00:37:42,104 Número 8 va a quedar desalojado de nuevo. 870 00:37:42,104 --> 00:37:43,770 Ahora me voy a encontrar el número 6 en su lugar. 871 00:37:43,770 --> 00:37:44,410 7 en su lugar. 872 00:37:44,410 --> 00:37:45,080 8 en su lugar. 873 00:37:45,080 --> 00:37:48,590 >> Lo que acabamos de hacer ahora es algo que se llama ordenamiento por selección, 874 00:37:48,590 --> 00:37:52,560 y si visualizamos esto, es va a sentir un poco diferente. 875 00:37:52,560 --> 00:37:56,800 Vamos a seguir adelante y de esta menú aquí, este visualization-- 876 00:37:56,800 --> 00:38:02,920 vamos a cambiar este a-- vamos, Firefox. 877 00:38:02,920 --> 00:38:07,610 Vamos a cambiar esto a la selección de clasificación. 878 00:38:07,610 --> 00:38:11,830 Y vamos a acelerarlo como antes, y comenzar la visualización ahora. 879 00:38:11,830 --> 00:38:13,990 Y este algoritmo tiene una sensación diferente a él. 880 00:38:13,990 --> 00:38:16,480 En cada iteración, francamente, es aún más sencillo. 881 00:38:16,480 --> 00:38:18,385 Sólo estoy seleccionando el elemento más pequeño. 882 00:38:18,385 --> 00:38:21,510 Ahora, francamente, tengo un poco de suerte que tiempo, en que lo resuelto súper rápido. 883 00:38:21,510 --> 00:38:22,660 Los elementos fueron al azar. 884 00:38:22,660 --> 00:38:25,520 No es, como veremos, finalmente, ver, fundamentalmente más rápido. 885 00:38:25,520 --> 00:38:29,400 Pero vamos a ver una tercera y última acercarse aquí en cuanto a lo que está pasando. 886 00:38:29,400 --> 00:38:36,230 Así que vamos a seguir adelante y restablecer chicos una última vez para estar en este orden aquí. 887 00:38:36,230 --> 00:38:38,450 >> Y ahora, me voy a ser un poco más inteligente, 888 00:38:38,450 --> 00:38:40,220 sólo para redondear nuestros algoritmos. 889 00:38:40,220 --> 00:38:41,230 Voy a hacer esto. 890 00:38:41,230 --> 00:38:43,140 Me voy para no ir ida y vuelta tanto. 891 00:38:43,140 --> 00:38:44,900 Francamente, estoy cansado de todo esto de desplazamiento. 892 00:38:44,900 --> 00:38:47,691 Yo sólo voy a tomar lo que soy dado al principio de la lista, 893 00:38:47,691 --> 00:38:49,460 y yo voy a ordenar que entonces y allí. 894 00:38:49,460 --> 00:38:50,140 Así que aquí estamos. 895 00:38:50,140 --> 00:38:51,030 Número 4. 896 00:38:51,030 --> 00:38:53,680 Voy a citar el número 4 en una lista ordenada. 897 00:38:53,680 --> 00:38:54,180 Hecho. 898 00:38:54,180 --> 00:38:58,300 Reclamo ahora, y sólo para hacer esto más claro, esta parte de mi lista está ordenada. 899 00:38:58,300 --> 00:39:02,610 Es una especie de un reclamo estúpido, pero de hecho 4 se ordena en una lista de tamaño de uno. 900 00:39:02,610 --> 00:39:04,210 Ahora, yo voy a tomar en el número 2. 901 00:39:04,210 --> 00:39:07,670 Número 2 Ahora estoy yendo a insertar en el lugar correcto. 902 00:39:07,670 --> 00:39:08,680 Entonces, ¿dónde 2 pertenecen? 903 00:39:08,680 --> 00:39:09,824 Obviamente, aquí. 904 00:39:09,824 --> 00:39:11,490 Así que adelante y regresar, si pudieras. 905 00:39:11,490 --> 00:39:14,406 ¿Y por qué no se acaba de tomar su música está con ustedes en esta ocasión. 906 00:39:14,406 --> 00:39:17,020 Y vamos a la fuerza que inserte en el principio de la lista. 907 00:39:17,020 --> 00:39:17,936 Así que un poco más de trabajo. 908 00:39:17,936 --> 00:39:20,890 Tuve que mover alrededor de Jacob, y ¿cuál es tu nombre? 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 Pero al menos no fui hacia atrás y adelante. 912 00:39:24,350 --> 00:39:25,739 Sólo estoy tomando las cosas a medida que avanzo. 913 00:39:25,739 --> 00:39:27,530 Sólo estoy insertándolas en el lugar correcto. 914 00:39:27,530 --> 00:39:29,220 6, esto es realmente muy fácil. 915 00:39:29,220 --> 00:39:31,510 Vamos a insertar por allí, si sólo quería pasar más ligeramente. 916 00:39:31,510 --> 00:39:32,870 Número 8, también es bastante fácil. 917 00:39:32,870 --> 00:39:33,741 Justo ahí. 918 00:39:33,741 --> 00:39:34,240 Maldita sea. 919 00:39:34,240 --> 00:39:37,590 Número 1 no podemos simplemente intercambiar con Amin aquí, 920 00:39:37,590 --> 00:39:39,340 porque eso está pasando echar a perder el orden. 921 00:39:39,340 --> 00:39:40,660 Así que tenemos que ser un poco más inteligente. 922 00:39:40,660 --> 00:39:42,770 Así, Artie, si pudiera una copia de seguridad por un momento. 923 00:39:42,770 --> 00:39:46,550 Vamos a seguir adelante y cambie ahora, a diferencia de los algoritmos anteriores, 924 00:39:46,550 --> 00:39:50,910 para dejar espacio a Artie aquí mismo, en el principio. 925 00:39:50,910 --> 00:39:54,690 Así que al final del día, yo soy una especie de haciendo lo que quería evitar antes. 926 00:39:54,690 --> 00:39:57,770 Y por lo que mi algoritmo es una especie de revertirse, intelectual, 927 00:39:57,770 --> 00:39:59,070 de lo que era originalmente. 928 00:39:59,070 --> 00:40:01,240 Sólo estoy haciendo el cambio en un punto diferente. 929 00:40:01,240 --> 00:40:02,291 Ahora estoy en el 3. 930 00:40:02,291 --> 00:40:02,790 Oh, maldita sea. 931 00:40:02,790 --> 00:40:04,039 Tenemos que hacer más trabajo de nuevo. 932 00:40:04,039 --> 00:40:05,060 Así que vamos a que empuja hacia fuera. 933 00:40:05,060 --> 00:40:09,360 Vamos a pasar 8, 6, 4-- oh OH- y 3 va a ir a la derecha allí. 934 00:40:09,360 --> 00:40:11,490 Así que por lo menos los ahorros leves este momento. 935 00:40:11,490 --> 00:40:13,100 7, no mucho trabajo por hacer. 936 00:40:13,100 --> 00:40:15,370 Así que si quieres hacer estallar vuelta, vamos a insertar. 937 00:40:15,370 --> 00:40:17,440 Y, por último, 5, si usted querer pop volver, nos 938 00:40:17,440 --> 00:40:22,610 tenga que cambiar tú, tú, que, hasta las cinco está en su lugar. 939 00:40:22,610 --> 00:40:25,670 >> Así que ahora a ver esto en un alto nivel gráficamente, 940 00:40:25,670 --> 00:40:31,080 vamos a hacer este algoritmo visualización de una vez adicional. 941 00:40:31,080 --> 00:40:33,580 Así que esto que llamaremos ordenación por inserción. 942 00:40:33,580 --> 00:40:37,700 Haremos sólo como rápido, y empezar desde aquí. 943 00:40:37,700 --> 00:40:39,580 Y es, también, tiene una sensación diferente. 944 00:40:39,580 --> 00:40:42,180 Es una especie de mejora y mejor, pero nunca es perfecta 945 00:40:42,180 --> 00:40:44,630 hasta que entro y suave en esas lagunas. 946 00:40:44,630 --> 00:40:47,860 Porque, de nuevo, sólo estoy tomando lo Estoy siendo dado de izquierda a derecha. 947 00:40:47,860 --> 00:40:50,350 Así que no he tenido tanta suerte que todo era perfecto. 948 00:40:50,350 --> 00:40:54,190 Es por eso que tuvimos estos pequeños mispositions que fija el paso del tiempo. 949 00:40:54,190 --> 00:40:58,890 >> Así que todos estos algoritmos parecen correr a ligeramente diferentes ritmos. 950 00:40:58,890 --> 00:41:02,030 De hecho, ¿cuál diría que es el mejor o el más rápido hasta la fecha? 951 00:41:02,030 --> 00:41:03,450 Ordenamiento de burbuja, la primera? 952 00:41:03,450 --> 00:41:05,000 Selección especie, la segunda? 953 00:41:05,000 --> 00:41:08,450 Tipo de inserción, la tercera? 954 00:41:08,450 --> 00:41:10,710 He oído algunas clases de selección. 955 00:41:10,710 --> 00:41:13,280 Otros pensamientos? 956 00:41:13,280 --> 00:41:16,880 >> Así que resulta que todos estos algoritmos 957 00:41:16,880 --> 00:41:22,400 son fundamentalmente igual de eficiente que cada otro-- o, por el contrario, al igual que 958 00:41:22,400 --> 00:41:25,980 ineficaz como los otros, porque podemos hacer fundamentalmente 959 00:41:25,980 --> 00:41:28,120 mejor que los tres de estos algoritmos. 960 00:41:28,120 --> 00:41:29,990 Y eso es un poco de una mentira blanca, también. 961 00:41:29,990 --> 00:41:32,580 cuando digo tan eficiente o como ineficiente, 962 00:41:32,580 --> 00:41:35,040 eso es por lo menos para super-grandes valores de n. 963 00:41:35,040 --> 00:41:38,450 Cuando tenemos sólo ocho personas aquí, o tal vez 50 o más barras en la pantalla, 964 00:41:38,450 --> 00:41:41,645 te darás cuenta de absolutamente diferencias entre estos tres algoritmos. 965 00:41:41,645 --> 00:41:44,020 Pero como n, el número de personas, o el número de números, 966 00:41:44,020 --> 00:41:46,350 o el número de personas en el teléfono libro, o el número de páginas web 967 00:41:46,350 --> 00:41:48,230 base de datos de Google se hace más grande y más grande, 968 00:41:48,230 --> 00:41:51,650 veremos que los tres de estos algoritmos son en realidad bastante pobre. 969 00:41:51,650 --> 00:41:54,060 Y podemos hacerlo fundamentalmente mejor que eso. 970 00:41:54,060 --> 00:41:56,830 >> Vamos a echar un vistazo, por último, lo que estos algoritmos pueden 971 00:41:56,830 --> 00:41:59,520 sonar como en la contexto de algunos otros 972 00:41:59,520 --> 00:42:03,550 así como por medio de este visualización aquí 973 00:42:03,550 --> 00:42:06,860 que nos introducirá en una serie de algoritmos. 974 00:42:06,860 --> 00:42:10,330 Vamos a seguir adelante y felicitar nuestros participantes aquí, todos los cuales 975 00:42:10,330 --> 00:42:11,690 ordenados de manera muy adecuada. 976 00:42:11,690 --> 00:42:15,124 Si desea dar un regalo de despedida. 977 00:42:15,124 --> 00:42:16,540 Usted puede mantener sus números también. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Y lo que verás, o más bien oír, ahora, 980 00:42:22,520 --> 00:42:25,710 es que a medida que ponemos sonidos a cada una de estas barras 981 00:42:25,710 --> 00:42:28,660 y asociarlo con el software, diferentes frecuencias de sonido, 982 00:42:28,660 --> 00:42:33,970 usted puede envolver su mente más audioly alrededor de lo que cada una de estas cosas 983 00:42:33,970 --> 00:42:34,470 parece. 984 00:42:34,470 --> 00:42:39,325 El primero de ellos es la ordenación por inserción 985 00:42:39,325 --> 00:42:44,275 >> [TONOS] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Esta es una especie de burbuja. 988 00:42:49,720 --> 00:42:54,175 >> [TONOS] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Selección especie. 991 00:43:18,222 --> 00:43:22,596 >> [TONOS] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Algo llamado merge sort. 994 00:43:35,150 --> 00:43:38,140 >> [TONOS] 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 >> [TONOS] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Eso es todo por CS50. 1000 00:44:09,430 --> 00:44:13,360 Nos vemos el miércoles. 1001 00:44:13,360 --> 00:44:16,671 >> NARRADOR: Y ahora, "Deep Pensamientos ", por Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 ¿Por qué es un bucle? 1004 00:44:21,590 --> 00:44:23,200 ¿Por qué no hacerlo mejor? 1005 00:44:23,200 --> 00:44:25,970 Me gustaría hacer un bucle de cinco. 1006 00:44:25,970 --> 00:44:28,720 >> [Risas]