1 00:00:00,000 --> 00:00:08,532 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: La primera cosa que usted podría aviso sobre hallazgo es que ya 3 00:00:12,060 --> 00:00:13,450 haber código escrito para nosotros. 4 00:00:13,450 --> 00:00:15,160 Esto se llama código de distribución. 5 00:00:15,160 --> 00:00:18,000 Así que no sólo estamos escribiendo nuestra propia código desde cero ya. 6 00:00:18,000 --> 00:00:22,800 Más bien, estamos llenando los vacíos en algún código preexistente. 7 00:00:22,800 --> 00:00:27,790 >> El programa find.c solicita números para llenar el pajar, busca la 8 00:00:27,790 --> 00:00:32,189 Haystack por una aguja enviado por los usuarios, y lo hace llamando a clasificar y 9 00:00:32,189 --> 00:00:35,590 de búsqueda, funciones definidas en helpers.c. 10 00:00:35,590 --> 00:00:37,670 Así find.c está ya escrito. 11 00:00:37,670 --> 00:00:40,770 Su trabajo es escribir ayudantes. 12 00:00:40,770 --> 00:00:41,870 >> Entonces, ¿qué estamos haciendo? 13 00:00:41,870 --> 00:00:44,210 Estamos implementando dos funciones. 14 00:00:44,210 --> 00:00:49,030 Buscar, que devuelve true si un valor se encuentra en el pajar, volviendo 15 00:00:49,030 --> 00:00:51,370 false si el valor es no en el pajar. 16 00:00:51,370 --> 00:00:57,990 Y entonces nosotros también estamos implementando especie que ordena la matriz llamada valores. 17 00:00:57,990 --> 00:00:59,960 >> Así que vamos a abordar en esta categoría. 18 00:00:59,960 --> 00:01:04,560 Buscar Actualmente se implementa como un búsqueda lineal, pero se puede hacer mucho 19 00:01:04,560 --> 00:01:05,550 mejor que eso. 20 00:01:05,550 --> 00:01:09,910 La búsqueda lineal se implementa en O de tiempo n, que es bastante lento. 21 00:01:09,910 --> 00:01:13,850 Aunque, puede buscar cualquier lista que se le da. 22 00:01:13,850 --> 00:01:20,130 Su trabajo consiste en poner en práctica la búsqueda binaria, que se ha quedado tiempo O de registro n. 23 00:01:20,130 --> 00:01:21,130 Eso es bastante rápido. 24 00:01:21,130 --> 00:01:23,170 >> Pero hay una condición. 25 00:01:23,170 --> 00:01:27,600 Búsqueda binaria sólo puede buscar a través de las listas de pre-ordenados. 26 00:01:27,600 --> 00:01:30,370 ¿Por qué? 27 00:01:30,370 --> 00:01:32,620 >> Bueno vamos a ver un ejemplo. 28 00:01:32,620 --> 00:01:36,280 Dada una matriz de valores, el pajar, vamos a estar buscando 29 00:01:36,280 --> 00:01:37,130 para una aguja. 30 00:01:37,130 --> 00:01:40,460 Y en este ejemplo, el número entero tres. 31 00:01:40,460 --> 00:01:44,130 La forma en que la búsqueda binaria funciona es que se compara el valor medio de 32 00:01:44,130 --> 00:01:48,370 la matriz a la aguja, al igual que la forma en abrimos una agenda para el medio 33 00:01:48,370 --> 00:01:50,660 página en la semana cero. 34 00:01:50,660 --> 00:01:54,650 >> Así que después de comparar el valor medio de la aguja, se puede descartar tampoco la 35 00:01:54,650 --> 00:01:58,530 izquierda o la mitad derecha de la matriz apretando sus límites. 36 00:01:58,530 --> 00:02:03,390 En este caso, ya que tres, nuestra aguja, es menos de 10, el valor medio, la 37 00:02:03,390 --> 00:02:05,990 derecho de Unión se reducirá. 38 00:02:05,990 --> 00:02:08,400 Pero tratar de hacer que sus límites lo más ajustado posible. 39 00:02:08,400 --> 00:02:11,630 Si el valor medio no es la aguja, entonces usted sabe que usted no tiene que 40 00:02:11,630 --> 00:02:13,010 incluirlo en su búsqueda. 41 00:02:13,010 --> 00:02:17,310 Así que estás en lo cierto límite puede apretar la búsqueda sale un poquito más, 42 00:02:17,310 --> 00:02:21,770 y así sucesivamente y así sucesivamente hasta a encontrar su aguja. 43 00:02:21,770 --> 00:02:23,480 >> Entonces, ¿qué hace el pseudocódigo parece? 44 00:02:23,480 --> 00:02:28,420 Bueno, mientras que todavía estamos mirando a través de la lista y aún así tener elementos para 45 00:02:28,420 --> 00:02:33,690 Buscar en, tomamos la mitad de la lista, y comparar ese valor medio de 46 00:02:33,690 --> 00:02:34,950 nuestra aguja. 47 00:02:34,950 --> 00:02:37,310 Si son iguales, entonces eso significa que hemos encontrado la aguja y podemos 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> De lo contrario, si la aguja es menos de el valor medio, entonces eso significa que 50 00:02:42,870 --> 00:02:47,280 puede descartar la mitad derecha, y justo buscar el lado izquierdo de la matriz. 51 00:02:47,280 --> 00:02:51,090 De lo contrario, vamos a buscar la lado derecho de la matriz. 52 00:02:51,090 --> 00:02:54,410 Y al final, si usted no tiene ninguna más elementos que dejan de buscar, pero que 53 00:02:54,410 --> 00:02:58,050 no ha encontrado su aguja todavía, entonces usted return false porque la aguja 54 00:02:58,050 --> 00:03:01,890 definitivamente no se encuentra en el pajar. 55 00:03:01,890 --> 00:03:05,270 >> Ahora, una cosa aseada sobre este pseudocódigo en búsqueda binaria es que puede ser 56 00:03:05,270 --> 00:03:09,940 interpretarse como un proceso iterativo o implementación recursiva. 57 00:03:09,940 --> 00:03:13,810 Así que sería recursivo si se llama la función de búsqueda en la búsqueda 58 00:03:13,810 --> 00:03:17,350 funcionar en cualquiera de la mitad de la matriz. 59 00:03:17,350 --> 00:03:21,030 Vamos a cubrir la recursividad un poco más tarde en el por supuesto, pero sí sabemos que se trata de un 60 00:03:21,030 --> 00:03:24,190 opción si desea probar. 61 00:03:24,190 --> 00:03:26,030 >> Ahora echemos un vistazo a clase. 62 00:03:26,030 --> 00:03:30,750 Ordenar toma una matriz y el número entero n, que es el tamaño de la matriz. 63 00:03:30,750 --> 00:03:34,030 Ahora bien, hay varios tipos diferentes de las clases, y se puede ver en algunos 64 00:03:34,030 --> 00:03:36,370 pantalones cortos para demostraciones y explicaciones. 65 00:03:36,370 --> 00:03:39,580 El tipo de cambio de nuestra función de clasificación es nula. 66 00:03:39,580 --> 00:03:43,580 Así que eso significa que no vamos para devolver cualquier matriz de ordenación. 67 00:03:43,580 --> 00:03:48,140 Estamos realmente va a cambiar la misma matriz que se pasó a nosotros. 68 00:03:48,140 --> 00:03:52,290 >> Y eso es posible porque las matrices son pasan por referencia en C. Ahora vamos a 69 00:03:52,290 --> 00:03:55,290 ver más sobre esto más adelante, pero el diferencia esencial entre pasar 70 00:03:55,290 --> 00:03:59,340 en algo así como un entero y pasa en una matriz, es que cuando se 71 00:03:59,340 --> 00:04:03,490 pasar en un entero, C es sólo va a hacer una copia de ese entero y pasar 72 00:04:03,490 --> 00:04:04,450 a la función. 73 00:04:04,450 --> 00:04:08,530 No se modificará la variable original una vez que la función ha terminado. 74 00:04:08,530 --> 00:04:12,480 Con una matriz, por otro lado, es no va a hacer una copia, y usted 75 00:04:12,480 --> 00:04:17,910 en realidad ser la edición de la sí muy array. 76 00:04:17,910 --> 00:04:21,269 >> Así que un tipo de especie es el tipo de selección. 77 00:04:21,269 --> 00:04:24,750 La ordenación por selección Funciona a partir de las Al principio, y luego iterar 78 00:04:24,750 --> 00:04:26,820 una y encontrar el elemento más pequeño. 79 00:04:26,820 --> 00:04:30,710 Y entonces cambias que los más pequeños elemento con la primera. 80 00:04:30,710 --> 00:04:34,360 Y entonces usted se mueve al segundo elemento , Buscar la siguiente más pequeña 81 00:04:34,360 --> 00:04:38,320 elemento, y luego de intercambio que con la segundo elemento de la matriz, ya 82 00:04:38,320 --> 00:04:41,100 el primer elemento ya está ordenado. 83 00:04:41,100 --> 00:04:45,370 Y entonces usted continúa para cada elemento en la identificación de la más pequeña 84 00:04:45,370 --> 00:04:47,690 valor y el trueque de un vistazo. 85 00:04:47,690 --> 00:04:53,460 >> Para I es igual a 0, el primer elemento a n menos 1, vas a comparar 86 00:04:53,460 --> 00:04:57,820 cada valor siguiente después de eso y encontrar el índice del valor mínimo. 87 00:04:57,820 --> 00:05:02,520 Una vez que encuentre el índice de valor mínimo, usted puede cambiar el valor de la matriz 88 00:05:02,520 --> 00:05:05,930 mínimo y variedad I. 89 00:05:05,930 --> 00:05:09,760 >> Otro tipo de especie que pueda implementar es la ordenación de burbuja. 90 00:05:09,760 --> 00:05:14,380 Así se repite burbuja ordenar más de la lista la comparación de los elementos adyacentes y 91 00:05:14,380 --> 00:05:17,720 el intercambio de los elementos que están en el orden equivocado. 92 00:05:17,720 --> 00:05:22,380 Y de esta manera, el elemento más grande burbujeará hasta el final. 93 00:05:22,380 --> 00:05:28,070 Y la lista se ordena una vez más elementos se han intercambiado. 94 00:05:28,070 --> 00:05:31,920 >> Así que estos son dos ejemplos de una especie algoritmos que se pueden implementar para 95 00:05:31,920 --> 00:05:33,230 el programa de búsqueda. 96 00:05:33,230 --> 00:05:37,350 Una vez que termine de ordenar y tienes Búsqueda hecho, haya terminado. 97 00:05:37,350 --> 00:05:39,720 Mi nombre es Zamyla, y esto es CS50. 98 00:05:39,720 --> 00:05:46,987 >> [REPRODUCCIÓN DE MÚSICA]