1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: La primera cosa que usted podría aviso sobre hallazgo es que ya 3 00:00:13,120 --> 00:00:14,520 haber código escrito para nosotros. 4 00:00:14,520 --> 00:00:16,219 Esto se llama código de distribución. 5 00:00:16,219 --> 00:00:19,060 Así que no sólo estamos escribiendo nuestra propia código desde cero ya. 6 00:00:19,060 --> 00:00:23,870 Más bien, estamos llenando los vacíos en algún código preexistente. 7 00:00:23,870 --> 00:00:28,860 >> El programa find.c solicita números para llenar el pajar, busca la 8 00:00:28,860 --> 00:00:33,260 Haystack por una aguja enviado por los usuarios, y lo hace llamando a clasificar y 9 00:00:33,260 --> 00:00:36,660 de búsqueda, funciones definidas en helpers.c. 10 00:00:36,660 --> 00:00:38,740 Así find.c está ya escrito. 11 00:00:38,740 --> 00:00:41,840 Su trabajo es escribir ayudantes. 12 00:00:41,840 --> 00:00:42,940 >> Entonces, ¿qué estamos haciendo? 13 00:00:42,940 --> 00:00:45,270 Estamos implementando dos funciones. 14 00:00:45,270 --> 00:00:50,110 Buscar, que devuelve true si un valor se encuentra en el pajar, volviendo 15 00:00:50,110 --> 00:00:52,430 false si el valor es no en el pajar. 16 00:00:52,430 --> 00:00:59,060 Y entonces nosotros también estamos implementando especie, que ordena la matriz llamada valores. 17 00:00:59,060 --> 00:01:01,120 Así que vamos a abordar en esta categoría. 18 00:01:01,120 --> 00:01:04,550 >> Buscar actualmente está siendo implementado como una búsqueda lineal. 19 00:01:04,550 --> 00:01:06,620 Pero se puede hacer mucho mejor que eso. 20 00:01:06,620 --> 00:01:11,610 La búsqueda lineal se implementa en O de n tiempo, lo que es bastante lento, aunque 21 00:01:11,610 --> 00:01:14,920 puede buscar cualquier lista que se le da. 22 00:01:14,920 --> 00:01:21,190 Su trabajo consiste en poner en práctica la búsqueda binaria, que se ha quedado tiempo O de registro n. 23 00:01:21,190 --> 00:01:22,200 Eso es bastante rápido. 24 00:01:22,200 --> 00:01:24,240 >> Pero hay una condición. 25 00:01:24,240 --> 00:01:28,910 Búsqueda binaria sólo puede buscar a través de las listas de pre-ordenados. 26 00:01:28,910 --> 00:01:31,450 ¿Por qué? 27 00:01:31,450 --> 00:01:33,690 Bueno, echemos un vistazo a un ejemplo. 28 00:01:33,690 --> 00:01:37,350 Dada una matriz de valores, el pajar, vamos a estar buscando 29 00:01:37,350 --> 00:01:41,510 para una aguja, y en este ejemplo, el número entero 3. 30 00:01:41,510 --> 00:01:45,220 >> La forma en que la búsqueda binaria funciona es que se compara el valor medio de 31 00:01:45,220 --> 00:01:49,430 la matriz a la aguja, al igual que la forma en abrimos un libro de teléfono a la mitad 32 00:01:49,430 --> 00:01:51,720 página en la Semana 0. 33 00:01:51,720 --> 00:01:55,710 Así que después de comparar el valor medio de la aguja, se puede descartar tampoco la 34 00:01:55,710 --> 00:01:59,620 izquierda o la mitad derecha de la matriz apretando sus límites. 35 00:01:59,620 --> 00:02:04,450 En este caso, desde 3, nuestra aguja, es menos de 10, el valor medio, la 36 00:02:04,450 --> 00:02:07,060 derecho de Unión se reducirá. 37 00:02:07,060 --> 00:02:09,470 >> Pero tratar de hacer que sus límites lo más ajustado posible. 38 00:02:09,470 --> 00:02:12,690 Si el valor medio no es la aguja, entonces usted sabe que usted no tiene que 39 00:02:12,690 --> 00:02:14,070 incluirlo en su búsqueda. 40 00:02:14,070 --> 00:02:18,390 De modo que su extremo derecho puede apretar la búsqueda sale un poquito más, 41 00:02:18,390 --> 00:02:22,840 y así sucesivamente y así sucesivamente, hasta que a encontrar su aguja. 42 00:02:22,840 --> 00:02:24,580 >> Así que lo que hace el pseudo- código parece? 43 00:02:24,580 --> 00:02:28,980 Bueno, ya que estamos todavía mirando a través de la lista y aún así tener 44 00:02:28,980 --> 00:02:33,540 elementos que debe buscar, nos toman el centro de la lista y comparar esa 45 00:02:33,540 --> 00:02:36,020 valor medio de nuestra aguja. 46 00:02:36,020 --> 00:02:38,380 Si son iguales, entonces eso significa que hemos encontrado la aguja, y podemos 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> De lo contrario, si la aguja es menos de el valor medio, entonces eso significa que 49 00:02:43,940 --> 00:02:48,350 puede desechar el medio correcto y justo buscar el lado izquierdo de la matriz. 50 00:02:48,350 --> 00:02:51,860 De lo contrario, vamos a buscar la lado derecho de la matriz. 51 00:02:51,860 --> 00:02:55,470 Y al final, si usted no tiene ninguna más elementos que dejan de buscar, pero que 52 00:02:55,470 --> 00:02:58,030 no han encontrado la aguja, sin embargo, A continuación, volverá falso. 53 00:02:58,030 --> 00:03:02,960 Debido a que la aguja sin duda no está en el pajar. 54 00:03:02,960 --> 00:03:06,200 >> Ahora, una cosa aseada sobre este pseudo código binario de búsqueda es que puede 55 00:03:06,200 --> 00:03:11,000 interpretarse ya sea como un proceso iterativo o implementación recursiva. 56 00:03:11,000 --> 00:03:14,900 Así que sería recursivo si se llama la función de búsqueda en la búsqueda 57 00:03:14,900 --> 00:03:18,400 funcionar en cualquiera de la mitad de la matriz. 58 00:03:18,400 --> 00:03:20,750 Vamos a cubrir la recursividad un poco más adelante en el curso. 59 00:03:20,750 --> 00:03:23,210 Pero no saben que es una opción si usted desea probar. 60 00:03:23,210 --> 00:03:24,460