1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: La primera cosa que vostè podria avís sobre troballa és que ja 3 00:00:13,120 --> 00:00:14,520 haver codi escrit per a nosaltres. 4 00:00:14,520 --> 00:00:16,219 Això es diu codi de distribució. 5 00:00:16,219 --> 00:00:19,060 Així que no només estem escrivint la nostra pròpia codi des de zero ja. 6 00:00:19,060 --> 00:00:23,870 Més aviat, estem omplint els buits en algun codi preexistent. 7 00:00:23,870 --> 00:00:28,860 >> El programa find.c sol · licita números per omplir el paller, cerca la 8 00:00:28,860 --> 00:00:33,260 Haystack per una agulla enviat pels usuaris, i ho fa cridant a classificar i 9 00:00:33,260 --> 00:00:36,660 de recerca, funcions definides en helpers.c. 10 00:00:36,660 --> 00:00:38,740 Així find.c està ja escrit. 11 00:00:38,740 --> 00:00:41,840 El seu treball és escriure ajudants. 12 00:00:41,840 --> 00:00:42,940 >> Llavors, què estem fent? 13 00:00:42,940 --> 00:00:45,270 Estem implementant dues funcions. 14 00:00:45,270 --> 00:00:50,110 Cerca, que retorna true si un valor es troba al paller, tornant 15 00:00:50,110 --> 00:00:52,430 false si el valor és no en el paller. 16 00:00:52,430 --> 00:00:59,060 I llavors nosaltres també estem implementant espècie, que ordena la matriu anomenada valors. 17 00:00:59,060 --> 00:01:01,120 Així que anem a abordar en aquesta categoria. 18 00:01:01,120 --> 00:01:04,550 >> Cercar actualment està sent implementat com una recerca lineal. 19 00:01:04,550 --> 00:01:06,620 Però es pot fer molt millor que això. 20 00:01:06,620 --> 00:01:11,610 Hi lineal s'implementa a O de n temps, el que és bastant lent, encara que 21 00:01:11,610 --> 00:01:14,920 pot buscar qualsevol llista que se li dóna. 22 00:01:14,920 --> 00:01:21,190 El seu treball consisteix a posar en pràctica la recerca binària, que s'ha quedat temps O de registre núm. 23 00:01:21,190 --> 00:01:22,200 Això és bastant ràpid. 24 00:01:22,200 --> 00:01:24,240 >> Però hi ha una condició. 25 00:01:24,240 --> 00:01:28,910 Cerca binària només pot buscar a través de les llistes de pre-ordenats. 26 00:01:28,910 --> 00:01:31,450 Per què? 27 00:01:31,450 --> 00:01:33,690 Bé, donem una ullada a un exemple. 28 00:01:33,690 --> 00:01:37,350 Donada una matriu de valors, el paller, estarem buscant 29 00:01:37,350 --> 00:01:41,510 per una agulla, i en aquest exemple, el nombre enter 3. 30 00:01:41,510 --> 00:01:45,220 >> La forma en què la recerca binària funciona és que es compara el valor mitjà de 31 00:01:45,220 --> 00:01:49,430 la matriu a l'agulla, igual que la manera obrim un llibre de telèfon a la meitat 32 00:01:49,430 --> 00:01:51,720 pàgina en la Setmana 0. 33 00:01:51,720 --> 00:01:55,710 Així que després de comparar el valor mitjà de l'agulla, es pot descartar tampoc la 34 00:01:55,710 --> 00:01:59,620 esquerra o la meitat dreta de la matriu estrenyent els seus límits. 35 00:01:59,620 --> 00:02:04,450 En aquest cas, des de 3, la nostra agulla, és menys de 10, el valor mitjà, la 36 00:02:04,450 --> 00:02:07,060 dret d'Unió es reduirà. 37 00:02:07,060 --> 00:02:09,470 >> Però tractar de fer que els seus límits el més ajustat possible. 38 00:02:09,470 --> 00:02:12,690 Si el valor mitjà no és l'agulla, llavors vostè sap que vostè no ha de 39 00:02:12,690 --> 00:02:14,070 incloure en la seva recerca. 40 00:02:14,070 --> 00:02:18,390 De manera que el seu extrem dret pot prémer la recerca surt una miqueta més, 41 00:02:18,390 --> 00:02:22,840 i així successivament i així successivament, fins que a trobar el seu agulla. 42 00:02:22,840 --> 00:02:24,580 >> Així que el que fa el pseudo- codi sembla? 43 00:02:24,580 --> 00:02:28,980 Bé, ja que estem encara mirant a través de la llista i tot i així tenir 44 00:02:28,980 --> 00:02:33,540 elements que ha de buscar, ens prenen el centre de la llista i comparar aquesta 45 00:02:33,540 --> 00:02:36,020 valor mitjà de la nostra agulla. 46 00:02:36,020 --> 00:02:38,380 Si són iguals, llavors això vol dir que hem trobat l'agulla, i podem 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> En cas contrari, si l'agulla és menys de el valor mitjà, llavors això vol dir que 49 00:02:43,940 --> 00:02:48,350 pot rebutjar el medi correcte i just buscar el costat esquerre de la matriu. 50 00:02:48,350 --> 00:02:51,860 En cas contrari, anem a buscar la costat dret de la matriu. 51 00:02:51,860 --> 00:02:55,470 I al final, si vostè no té cap més elements que deixen de buscar, però que 52 00:02:55,470 --> 00:02:58,030 no han trobat l'agulla, però, A continuació, tornarà fals. 53 00:02:58,030 --> 00:03:02,960 A causa de que l'agulla sens dubte no està al paller. 54 00:03:02,960 --> 00:03:06,200 >> Ara, una cosa polida sobre aquest pseudo codi binari de cerca és que pot 55 00:03:06,200 --> 00:03:11,000 interpretar ja sigui com un procés iteratiu o implementació recursiva. 56 00:03:11,000 --> 00:03:14,900 Així que seria recursiu si es diu la funció de cerca a la recerca 57 00:03:14,900 --> 00:03:18,400 funcionar en qualsevol de la meitat de la matriu. 58 00:03:18,400 --> 00:03:20,750 Anem a cobrir la recursivitat una mica més endavant en el curs. 59 00:03:20,750 --> 00:03:23,210 Però no saben que és una opció si vol provar. 60 00:03:23,210 --> 00:03:24,460