1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Prva stvar, ki jo morda obvestilo o najdbi je, da smo že 3 00:00:13,120 --> 00:00:14,520 so zapisana koda za nas. 4 00:00:14,520 --> 00:00:16,219 To se imenuje porazdelitev koda. 5 00:00:16,219 --> 00:00:19,060 Torej ne samo pisanje lastnega kodo iz nič več. 6 00:00:19,060 --> 00:00:23,870 Namesto tega smo zapolnjevanje praznin v nekaterih obstoječo kodo. 7 00:00:23,870 --> 00:00:28,860 >> Program find.c vpraša po številkah zapolniti senu, išče 8 00:00:28,860 --> 00:00:33,260 senu uporabniško predložiti iglo, in to počne tako, da kliče vrste in 9 00:00:33,260 --> 00:00:36,660 iskanja, funkcije so opredeljena V helpers.c. 10 00:00:36,660 --> 00:00:38,740 Torej je find.c napisal že. 11 00:00:38,740 --> 00:00:41,840 Vaša naloga je, da napišete pomočnice. 12 00:00:41,840 --> 00:00:42,940 >> Torej, kaj počnemo? 13 00:00:42,940 --> 00:00:45,270 Mi smo za izvajanje dveh funkcij. 14 00:00:45,270 --> 00:00:50,110 Iskanje, ki vrne true, če vrednost se nahaja v senu, vračanje 15 00:00:50,110 --> 00:00:52,430 false, če je vrednost ne v senu. 16 00:00:52,430 --> 00:00:59,060 In potem smo tudi izvajanje vrste, ki sortira array imenovano vrednosti. 17 00:00:59,060 --> 00:01:01,120 Torej, kaj je dosti iskanje. 18 00:01:01,120 --> 00:01:04,550 >> Iskanje se trenutno izvaja kot linearno iskanje. 19 00:01:04,550 --> 00:01:06,620 Vendar pa lahko narediš veliko bolje kot to. 20 00:01:06,620 --> 00:01:11,610 Linearni iskanje se izvaja v O n Čas, ki je zelo počasi, čeprav 21 00:01:11,610 --> 00:01:14,920 lahko poiščete katero koli seznam, ki ga ima. 22 00:01:14,920 --> 00:01:21,190 Vaša naloga je, da se izvaja binarno iskanje, ki je teči čas O log n. 23 00:01:21,190 --> 00:01:22,200 To je zelo hitro. 24 00:01:22,200 --> 00:01:24,240 >> Ampak tam je določilo. 25 00:01:24,240 --> 00:01:28,910 Binarno iskanje lahko iščete le skozi predhodno razvrščena-seznamov. 26 00:01:28,910 --> 00:01:31,450 Zakaj je tako? 27 00:01:31,450 --> 00:01:33,690 No, pa si poglejmo primer. 28 00:01:33,690 --> 00:01:37,350 Glede na niz vrednot, senu, bomo morali iskati 29 00:01:37,350 --> 00:01:41,510 iglo, in v tem Na primer, celo število 3. 30 00:01:41,510 --> 00:01:45,220 >> Tako, da binarno iskanje deluje, je, da primerjamo srednjo vrednost 31 00:01:45,220 --> 00:01:49,430 matrika z iglo, podobno kot kako smo odprli telefonski imenik na sredino 32 00:01:49,430 --> 00:01:51,720 Stran v tednu 0. 33 00:01:51,720 --> 00:01:55,710 Torej po primerjavi srednji vrednosti igle, lahko zavržemo bodisi 34 00:01:55,710 --> 00:01:59,620 levo ali desno polovico matrike s poostritvijo svoje meje. 35 00:01:59,620 --> 00:02:04,450 V tem primeru, ker 3, naš igle, je manj kot 10, srednja vrednost, 36 00:02:04,450 --> 00:02:07,060 Pravica vezan, lahko zmanjša. 37 00:02:07,060 --> 00:02:09,470 >> Ampak poskusiti, da bi svoje meje tako strogo, kot je mogoče. 38 00:02:09,470 --> 00:02:12,690 Če je srednja vrednost ni igla, potem veste, da vam ni treba, da 39 00:02:12,690 --> 00:02:14,070 jo vključite v vaše iskanje. 40 00:02:14,070 --> 00:02:18,390 Tako da lahko vaša pravica vezana zategnite išči meje le majhen košček več, 41 00:02:18,390 --> 00:02:22,840 in tako naprej in tako naprej, dokler ste našli iglo. 42 00:02:22,840 --> 00:02:24,580 >> Torej, kaj psevdo koda izgledati? 43 00:02:24,580 --> 00:02:28,980 No, medtem ko še vedno iščemo preko seznam in še vedno 44 00:02:28,980 --> 00:02:33,540 elemente, ki so videti v, vzamemo sredino seznama in primerjajte 45 00:02:33,540 --> 00:02:36,020 srednja vrednost za naše iglo. 46 00:02:36,020 --> 00:02:38,380 Če so enaki, potem to pomeni, da ste našel iglo, in bomo lahko 47 00:02:38,380 --> 00:02:40,160 vrne true. 48 00:02:40,160 --> 00:02:43,940 >> V nasprotnem primeru, če je igla manj kot srednja vrednost, potem to pomeni, da 49 00:02:43,940 --> 00:02:48,350 lahko zavržemo desno polovico in samo iskanje po levi strani matrike. 50 00:02:48,350 --> 00:02:51,860 V nasprotnem primeru bomo iskanje desni strani polja. 51 00:02:51,860 --> 00:02:55,470 In na koncu, če ne boste imeli več elementov pustili za iskanje pa vam 52 00:02:55,470 --> 00:02:58,030 niso našli svojo iglo še ni, potem vrne false. 53 00:02:58,030 --> 00:03:02,960 Ker igla definitivno ni v senu. 54 00:03:02,960 --> 00:03:06,200 >> Zdaj, eno lepo stvar o tem psevdo koda v binarni iskanja je, da lahko 55 00:03:06,200 --> 00:03:11,000 razlagati tako, da bodisi ponavljajoč ali rekurzivna izvajanje. 56 00:03:11,000 --> 00:03:14,900 Tako da bi bilo rekurzivni, če se imenuje Iskalna funkcija v iskanju 57 00:03:14,900 --> 00:03:18,400 deluje na obeh polovici matrike. 58 00:03:18,400 --> 00:03:20,750 Pokrili bomo rekurzije malo kasneje v teku. 59 00:03:20,750 --> 00:03:23,210 Ampak vem, da je možnost Če želite poskusiti. 60 00:03:23,210 --> 00:03:24,460