1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Det første du kanskje varsel om funn er at vi allerede 3 00:00:13,120 --> 00:00:14,520 har kode som er skrevet for oss. 4 00:00:14,520 --> 00:00:16,219 Dette kalles fordelingskode. 5 00:00:16,219 --> 00:00:19,060 Så vi ikke bare skriver vår egen kode fra scratch lenger. 6 00:00:19,060 --> 00:00:23,870 Snarere er vi fylle tomrom i en pre-eksisterende kode. 7 00:00:23,870 --> 00:00:28,860 >> Den find.c program ber om tall å fylle høystakken, søker den 8 00:00:28,860 --> 00:00:33,260 høystakk for en bruker sendt nål, og det gjør dette ved å ringe sortere og 9 00:00:33,260 --> 00:00:36,660 søk, funksjoner definert i helpers.c. 10 00:00:36,660 --> 00:00:38,740 Så find.c er skrevet allerede. 11 00:00:38,740 --> 00:00:41,840 Din jobb er å skrive hjelpere. 12 00:00:41,840 --> 00:00:42,940 >> Så hva gjør vi? 13 00:00:42,940 --> 00:00:45,270 Vi implementere to funksjoner. 14 00:00:45,270 --> 00:00:50,110 Søk, som returnerer true hvis en verdi er funnet i høystakken, retur 15 00:00:50,110 --> 00:00:52,430 usann hvis verdien er ikke i høystakken. 16 00:00:52,430 --> 00:00:59,060 Og så er vi også implementere sortere, som sorterer tabellen kalt verdier. 17 00:00:59,060 --> 00:01:01,120 Så la oss takle søk. 18 00:01:01,120 --> 00:01:04,550 >> Søk er i dag implementert som en lineær søk. 19 00:01:04,550 --> 00:01:06,620 Men du kan gjøre mye bedre enn det. 20 00:01:06,620 --> 00:01:11,610 Lineær søk er implementert i O n tid, noe som er ganske langsom, selv om det 21 00:01:11,610 --> 00:01:14,920 kan søke noen liste gitt til det. 22 00:01:14,920 --> 00:01:21,190 Din jobb er å implementere binære søk, som har kjøretid O av log n. 23 00:01:21,190 --> 00:01:22,200 Det er ganske fort. 24 00:01:22,200 --> 00:01:24,240 >> Men det er en fastsettelse. 25 00:01:24,240 --> 00:01:28,910 Binære søk kan bare søke gjennom pre-sorterte lister. 26 00:01:28,910 --> 00:01:31,450 Hvorfor er det? 27 00:01:31,450 --> 00:01:33,690 Vel, la oss se på et eksempel. 28 00:01:33,690 --> 00:01:37,350 Gitt en matrise med verdier, høystakken, vi kommer til å være ute 29 00:01:37,350 --> 00:01:41,510 for en nål, og i denne eksempel heltallet 3. 30 00:01:41,510 --> 00:01:45,220 >> Måten binære søk fungerer er at Sammenligner vi den midterste verdien av 31 00:01:45,220 --> 00:01:49,430 matrisen til nålen, mye som hvordan vi åpnet en telefonbok til midten 32 00:01:49,430 --> 00:01:51,720 side i uke 0. 33 00:01:51,720 --> 00:01:55,710 Så etter å sammenligne den midterste verdien til nålen, kan du forkaste enten 34 00:01:55,710 --> 00:01:59,620 venstre eller høyre halvdel av matrisen ved å stramme grenser. 35 00:01:59,620 --> 00:02:04,450 I dette tilfelle, siden 3, vår nål, er mindre enn 10, den midterste verdien, den 36 00:02:04,450 --> 00:02:07,060 høyre grense kan reduseres. 37 00:02:07,060 --> 00:02:09,470 >> Men prøv å gjøre dine grenser så stramt som mulig. 38 00:02:09,470 --> 00:02:12,690 Hvis den midterste verdien ikke nålen da vet du at du ikke trenger å 39 00:02:12,690 --> 00:02:14,070 inkludere det i søket. 40 00:02:14,070 --> 00:02:18,390 Så høyre bundet kan stramme søke grensene bare en liten bit mer, 41 00:02:18,390 --> 00:02:22,840 og så videre og så videre, inntil du finne nålen. 42 00:02:22,840 --> 00:02:24,580 >> Så hva gjør pseudo Koden se ut? 43 00:02:24,580 --> 00:02:28,980 Vel, mens vi fortsatt leter gjennom listen og har fortsatt 44 00:02:28,980 --> 00:02:33,540 elementer for å se på, tar vi på midten av listen og sammenligne det 45 00:02:33,540 --> 00:02:36,020 midterste verdien til vår nål. 46 00:02:36,020 --> 00:02:38,380 Hvis de er like, så det betyr at vi har funnet nålen, og vi kan 47 00:02:38,380 --> 00:02:40,160 returnere true. 48 00:02:40,160 --> 00:02:43,940 >> Ellers, hvis nålen er mindre enn den midterste verdien, så det betyr at vi 49 00:02:43,940 --> 00:02:48,350 kan forkaste høyre halvdel og bare søk på venstre side av tabellen. 50 00:02:48,350 --> 00:02:51,860 Ellers vil vi søke høyre side av tabellen. 51 00:02:51,860 --> 00:02:55,470 Og på slutten, hvis du ikke har noen flere elementer igjen å søke, men du 52 00:02:55,470 --> 00:02:58,030 har ikke funnet din nål ennå, så du return false. 53 00:02:58,030 --> 00:03:02,960 Fordi kanylen absolutt er ikke i høystakken. 54 00:03:02,960 --> 00:03:06,200 >> Nå, ett pene ting om denne pseudo kode i binær søk er at det kan 55 00:03:06,200 --> 00:03:11,000 tolkes enten som en iterativ eller rekursiv gjennomføring. 56 00:03:11,000 --> 00:03:14,900 Så det ville være rekursiv hvis du heter søkefunksjonen i søket 57 00:03:14,900 --> 00:03:18,400 fungere på hver halvdel av matrisen. 58 00:03:18,400 --> 00:03:20,750 Vi dekker rekursjon litt senere i kurset. 59 00:03:20,750 --> 00:03:23,210 Men vet at det er et alternativ hvis du har lyst til å prøve. 60 00:03:23,210 --> 00:03:24,460