1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA Chan: Ensimmäinen asia, saatat ilmoitus siitä löytää on se, että meillä on jo 3 00:00:13,120 --> 00:00:14,520 on koodi kirjoitettu meille. 4 00:00:14,520 --> 00:00:16,219 Tätä kutsutaan jakelu koodi. 5 00:00:16,219 --> 00:00:19,060 Joten emme vain kirjallisesti oman koodata tyhjästä enää. 6 00:00:19,060 --> 00:00:23,870 Pikemminkin olemme täyttämällä huokoset Joissakin ennestään koodi. 7 00:00:23,870 --> 00:00:28,860 >> Find.c ohjelma kysyy numerot täyttää heinäsuovasta, etsii 8 00:00:28,860 --> 00:00:33,260 heinäpaali varten käyttäjä toimitti neula, ja se tekee tämän soittamalla lajitella ja 9 00:00:33,260 --> 00:00:36,660 haku, tehtävät määritellään vuonna helpers.c. 10 00:00:36,660 --> 00:00:38,740 Joten find.c on kirjoitettu jo. 11 00:00:38,740 --> 00:00:41,840 Sinun tehtäväsi on kirjoittaa auttajia. 12 00:00:41,840 --> 00:00:42,940 >> Joten mitä me teemme? 13 00:00:42,940 --> 00:00:45,270 Olemme täytäntöön kaksi tehtävää. 14 00:00:45,270 --> 00:00:50,110 Haku, joka palauttaa true, jos arvo löytyy Heinäsuovan palaavat 15 00:00:50,110 --> 00:00:52,430 false jos arvo on ei heinäsuovasta. 16 00:00:52,430 --> 00:00:59,060 Ja sitten me toteuttaa myös lajitella, joka järjestää taulukon nimeltään arvoja. 17 00:00:59,060 --> 00:01:01,120 Joten puuttua haku. 18 00:01:01,120 --> 00:01:04,550 >> Haku toteutetaan nykyisin lineaarisena haku. 19 00:01:04,550 --> 00:01:06,620 Mutta voit tehdä paljon parempaa. 20 00:01:06,620 --> 00:01:11,610 Lineaarinen haku toteutetaan O n aika, joka on melko hidas, vaikka se 21 00:01:11,610 --> 00:01:14,920 voi etsiä luettelon sille antaneet. 22 00:01:14,920 --> 00:01:21,190 Sinun tehtäväsi on toteuttaa binäärihaku, joka on ajoaika O log n. 23 00:01:21,190 --> 00:01:22,200 Se on melko nopeasti. 24 00:01:22,200 --> 00:01:24,240 >> Mutta on määräys. 25 00:01:24,240 --> 00:01:28,910 Binäärihaku hakea vain kautta valmiiksi lajiteltu luetteloita. 26 00:01:28,910 --> 00:01:31,450 Miksi näin? 27 00:01:31,450 --> 00:01:33,690 No, katsotaanpa esimerkki. 28 00:01:33,690 --> 00:01:37,350 Ottaen huomioon arvomatriisin, heinäsuovasta, aiomme olla etsimässä 29 00:01:37,350 --> 00:01:41,510 neulaa, ja tässä Esimerkiksi kokonaisluku 3. 30 00:01:41,510 --> 00:01:45,220 >> Siten, että binäärihaku toimii on, että vertaamme keskellä arvo 31 00:01:45,220 --> 00:01:49,430 array neula, aivan kuten miten avasimme puhelinluettelosta keskelle 32 00:01:49,430 --> 00:01:51,720 sivu viikolla 0. 33 00:01:51,720 --> 00:01:55,710 Niin sen jälkeen verrattiin keskisuuria arvoa neula, voit hylätä joko 34 00:01:55,710 --> 00:01:59,620 vasemmalle tai oikealle puolet array kiristämällä rajasi. 35 00:01:59,620 --> 00:02:04,450 Tässä tapauksessa, koska 3, meidän neula, on vähemmän kuin 10, keskimmäinen arvo, 36 00:02:04,450 --> 00:02:07,060 oikea raja voi vähentää. 37 00:02:07,060 --> 00:02:09,470 >> Mutta yritä tehdä rajoja mahdollisimman tiukka. 38 00:02:09,470 --> 00:02:12,690 Jos keskimmäinen arvo ei ole neulaa, niin tiedät, että sinun ei tarvitse 39 00:02:12,690 --> 00:02:14,070 sisällyttää sen haun. 40 00:02:14,070 --> 00:02:18,390 Joten oikea raja voi kiristää haku bounds vain pikkuisen enemmän, 41 00:02:18,390 --> 00:02:22,840 ja niin edelleen ja niin edelleen, kunnes huomaat neulan. 42 00:02:22,840 --> 00:02:24,580 >> Joten mitä pseudo koodi näyttää? 43 00:02:24,580 --> 00:02:28,980 No, kun olemme vielä silmäilyn luettelo ja vielä 44 00:02:28,980 --> 00:02:33,540 elementit katsoa, ​​otamme keskellä luettelon ja vertaa sitä 45 00:02:33,540 --> 00:02:36,020 keskimmäinen arvo meidän neula. 46 00:02:36,020 --> 00:02:38,380 Jos he ovat yhtä, niin se tarkoittaa, olemme löytyi neula, ja voimme 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Muussa tapauksessa, jos neula on pienempi kuin keskimmäinen arvo, niin se tarkoittaa, me 49 00:02:43,940 --> 00:02:48,350 voi hävitä oikea puoli ja vain etsi vasemmalla puolella jono. 50 00:02:48,350 --> 00:02:51,860 Muuten me etsiä oikea puoli array. 51 00:02:51,860 --> 00:02:55,470 Ja lopussa, jos sinulla ei ole mitään enemmän elementtejä vasemmalle etsiä mutta et 52 00:02:55,470 --> 00:02:58,030 ei löytynyt neulan vielä, sitten palaat vääriä. 53 00:02:58,030 --> 00:03:02,960 Koska neula ehdottomasti ei ole heinäsuovasta. 54 00:03:02,960 --> 00:03:06,200 >> Nyt yksi siisti juttu tämä pseudo koodin binäärihaku on, että se voi 55 00:03:06,200 --> 00:03:11,000 tulkita joko iteratiivinen tai rekursiivinen täytäntöönpano. 56 00:03:11,000 --> 00:03:14,900 Joten olisi rekursiivinen, jos olet soittanut hakutoiminto sisällä haku 57 00:03:14,900 --> 00:03:18,400 toimiakseen joko puolet array. 58 00:03:18,400 --> 00:03:20,750 Me kattaa rekursio vähän myöhemmin kurssin. 59 00:03:20,750 --> 00:03:23,210 Mutta tiedän, että se on vaihtoehto jos haluat kokeilla. 60 00:03:23,210 --> 00:03:24,460