1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Det första du kanske meddelande om fyndet är att vi redan 3 00:00:13,120 --> 00:00:14,520 har kod skriven för oss. 4 00:00:14,520 --> 00:00:16,219 Detta kallas distributionskoden. 5 00:00:16,219 --> 00:00:19,060 Så vi inte bara skriva vår egen koda från grunden längre. 6 00:00:19,060 --> 00:00:23,870 I stället ska vi fylla i tomrummen i någon befintlig kod. 7 00:00:23,870 --> 00:00:28,860 >> Den find.c Programmet frågar efter siffror att fylla höstacken, söker 8 00:00:28,860 --> 00:00:33,260 höstack för en användare lämnade nål, och den gör det genom att ringa sortera och 9 00:00:33,260 --> 00:00:36,660 sökning, funktioner definierade i helpers.c. 10 00:00:36,660 --> 00:00:38,740 Så find.c är redan skrivet. 11 00:00:38,740 --> 00:00:41,840 Ditt jobb är att skriva hjälpare. 12 00:00:41,840 --> 00:00:42,940 >> Så vad gör vi? 13 00:00:42,940 --> 00:00:45,270 Vi ska genomföra två funktioner. 14 00:00:45,270 --> 00:00:50,110 Sök, som returnerar true om ett värde påträffas i höstacken, återvänder 15 00:00:50,110 --> 00:00:52,430 false om värdet är inte i höstacken. 16 00:00:52,430 --> 00:00:59,060 Och då vi genomför också sortera, som sorterar arrayen kallas värden. 17 00:00:59,060 --> 00:01:01,120 Så låt oss ta itu sökning. 18 00:01:01,120 --> 00:01:04,550 >> Sök förs för närvarande som en linjär sökning. 19 00:01:04,550 --> 00:01:06,620 Men du kan göra mycket bättre än så. 20 00:01:06,620 --> 00:01:11,610 Linjär sökning genomförs i O n tid, vilket är ganska långsam, även om det 21 00:01:11,610 --> 00:01:14,920 kan söka någon lista som ges till det. 22 00:01:14,920 --> 00:01:21,190 Ditt jobb är att implementera binär sökning, som har körtid O i log n. 23 00:01:21,190 --> 00:01:22,200 Det är ganska snabbt. 24 00:01:22,200 --> 00:01:24,240 >> Men det finns en bestämmelse. 25 00:01:24,240 --> 00:01:28,910 Binär sökning kan endast söka genom pre-sorterade listor. 26 00:01:28,910 --> 00:01:31,450 Varför är det? 27 00:01:31,450 --> 00:01:33,690 Nåväl, låt oss titta på ett exempel. 28 00:01:33,690 --> 00:01:37,350 Givet en matris med värden, höstacken, vi kommer att vara ute 29 00:01:37,350 --> 00:01:41,510 efter en nål, och i detta Exempelvis heltalet 3. 30 00:01:41,510 --> 00:01:45,220 >> Det sätt som binär sökning fungerar är att vi jämför det mittersta värdet av 31 00:01:45,220 --> 00:01:49,430 arrayen till nålen, ungefär som hur Vi öppnade en telefonbok till mitten 32 00:01:49,430 --> 00:01:51,720 sida i vecka 0. 33 00:01:51,720 --> 00:01:55,710 Så efter att ha jämfört det mittersta värdet till nålen, kan du kasta antingen 34 00:01:55,710 --> 00:01:59,620 vänstra eller den högra halvan av matrisen genom att dra dina gränser. 35 00:01:59,620 --> 00:02:04,450 I det här fallet, sedan 3, vår nål, är mindre än 10, det mittersta värdet, den 36 00:02:04,450 --> 00:02:07,060 rätt bunden kan minska. 37 00:02:07,060 --> 00:02:09,470 >> Men försök att göra dina gränser så tätt som möjligt. 38 00:02:09,470 --> 00:02:12,690 Om det mittersta värdet är inte av nålen, då vet du att du inte behöver 39 00:02:12,690 --> 00:02:14,070 inkludera det i din sökning. 40 00:02:14,070 --> 00:02:18,390 Så din rätt bunden kan dra åt sökning bounds bara en liten bit mer, 41 00:02:18,390 --> 00:02:22,840 och så vidare och så vidare, till dess du hittar din nål. 42 00:02:22,840 --> 00:02:24,580 >> Så vad gör pseudo koden se ut? 43 00:02:24,580 --> 00:02:28,980 Tja, medan vi fortfarande letar igenom listan och fortfarande ha 44 00:02:28,980 --> 00:02:33,540 faktorer att titta in, tar vi i mitten av listan och jämföra det 45 00:02:33,540 --> 00:02:36,020 mitt värde till vår nål. 46 00:02:36,020 --> 00:02:38,380 Om de är lika, då det innebär att vi har hittade nålen, och vi kan 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Annars, om nålen är mindre än det mittersta värdet, då det innebär att vi 49 00:02:43,940 --> 00:02:48,350 kan kasta den högra halvan och bara söka den vänstra sidan av matrisen. 50 00:02:48,350 --> 00:02:51,860 I annat fall kommer vi att söka på höger sida av kedjan. 51 00:02:51,860 --> 00:02:55,470 Och i slutet, om du inte har några fler element kvar att söka, men du 52 00:02:55,470 --> 00:02:58,030 har inte hittat din nål ännu, då du returnerar falskt. 53 00:02:58,030 --> 00:03:02,960 Eftersom nålen definitivt är inte i höstacken. 54 00:03:02,960 --> 00:03:06,200 >> Nu, en snygg sak om denna pseudo koden i binär sökning är att den kan 55 00:03:06,200 --> 00:03:11,000 tolkas som antingen en iterativ eller rekursiv genomförande. 56 00:03:11,000 --> 00:03:14,900 Så det skulle vara rekursiv om du heter sökfunktionen i sökandet 57 00:03:14,900 --> 00:03:18,400 fungera på vardera halvan av matrisen. 58 00:03:18,400 --> 00:03:20,750 Vi täcker rekursion lite senare i kursen. 59 00:03:20,750 --> 00:03:23,210 Men vet att det är ett alternativ Om du vill prova. 60 00:03:23,210 --> 00:03:24,460