1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: pirmas dalykas, kurį galėtų pranešimas apie radinį, kad mes jau 3 00:00:13,120 --> 00:00:14,520 yra kodas parašyta mums. 4 00:00:14,520 --> 00:00:16,219 Tai vadinama platinimo kodas. 5 00:00:16,219 --> 00:00:19,060 Taigi mes ne tik raštu mūsų pačių Kodas iš nulio nebėra. 6 00:00:19,060 --> 00:00:23,870 Atvirkščiai, mes užpildant ertmes kai iš anksto esamą kodą. 7 00:00:23,870 --> 00:00:28,860 >> Find.c programa paragina numerius užpildyti kaugė, ieško 8 00:00:28,860 --> 00:00:33,260 kaugė vartotojo pateikta adata, ir tai daroma telefonu rūšiuoti ir 9 00:00:33,260 --> 00:00:36,660 ieškoti, funkcijos apibrėžtos į helpers.c. 10 00:00:36,660 --> 00:00:38,740 Taigi find.c parašyta jau. 11 00:00:38,740 --> 00:00:41,840 Jūsų darbas yra rašyti pagalbininkai. 12 00:00:41,840 --> 00:00:42,940 >> Taigi, ką mes darome? 13 00:00:42,940 --> 00:00:45,270 Mes įgyvendinti dvi funkcijas. 14 00:00:45,270 --> 00:00:50,110 Paieška, kuri grąžina true, jei vertė randama šieno kupetoje, grįžta 15 00:00:50,110 --> 00:00:52,430 false, jei reikšmė yra ne kaugė. 16 00:00:52,430 --> 00:00:59,060 Ir tada mes taip pat įgyvendinant rūšiuoti, kuri rūšiuoja masyvas vadinamas vertės. 17 00:00:59,060 --> 00:01:01,120 Taigi galime spręsti paiešką. 18 00:01:01,120 --> 00:01:04,550 >> Paieška šiuo metu įgyvendinamas kaip linijinio paiešką. 19 00:01:04,550 --> 00:01:06,620 Bet jūs galite padaryti daug geriau nei tai. 20 00:01:06,620 --> 00:01:11,610 Linijinis paieška įgyvendinama O n laikas, kuris yra gana lėtas, tačiau jis 21 00:01:11,610 --> 00:01:14,920 gali ieškoti bet kokių jai suteiktus sąrašą. 22 00:01:14,920 --> 00:01:21,190 Jūsų darbas yra įgyvendinti dvejetainis paieškos, kuri skaičiuoti laiką O log n. 23 00:01:21,190 --> 00:01:22,200 Tai gana greitai. 24 00:01:22,200 --> 00:01:24,240 >> Tačiau yra nuostata. 25 00:01:24,240 --> 00:01:28,910 Dvejetainiai paieškos gali ieškoti tik per surūšiuotas sąrašus. 26 00:01:28,910 --> 00:01:31,450 Kodėl taip yra? 27 00:01:31,450 --> 00:01:33,690 Na, pažiūrėkime į pavyzdį. 28 00:01:33,690 --> 00:01:37,350 Atsižvelgiant vertybių masyvas, kaugė, mes ketiname būti ieškote 29 00:01:37,350 --> 00:01:41,510 Pereiti prie adatos, ir tai Pavyzdžiui, sveikasis skaičius 3. 30 00:01:41,510 --> 00:01:45,220 >> Taip, kad dvejetainis paieška veikia tai, kad mes palyginti vidurinį vertę 31 00:01:45,220 --> 00:01:49,430 masyvas adata, panašiai kaip mes atidarėme telefonų knygą į vidurį 32 00:01:49,430 --> 00:01:51,720 puslapis 0 savaitės. 33 00:01:51,720 --> 00:01:55,710 Taigi palyginus vidurinį vertę adata, galite išmesti arba 34 00:01:55,710 --> 00:01:59,620 kairę arba į dešinę pusę masyvo veržiant savo ribas. 35 00:01:59,620 --> 00:02:04,450 Šiuo atveju, kadangi 3, mūsų adata, yra mažiau nei 10, viduriniosios vertė, 36 00:02:04,450 --> 00:02:07,060 teisė riba gali sumažėti. 37 00:02:07,060 --> 00:02:09,470 >> Bet pabandyti padaryti savo ribas taip griežtai, kaip įmanoma. 38 00:02:09,470 --> 00:02:12,690 Jei vidurinioji vertė yra ne adata, tuomet jūs žinote, kad jums nereikia 39 00:02:12,690 --> 00:02:14,070 įtraukti jį į savo paiešką. 40 00:02:14,070 --> 00:02:18,390 Taigi, jūsų teisė jungiasi gali sugriežtinti Paieškos ribų Truputėlį daugiau, 41 00:02:18,390 --> 00:02:22,840 ir taip toliau ir taip toliau, kol jums rasti adatą. 42 00:02:22,840 --> 00:02:24,580 >> Taigi, ką daro pseudo kodas atrodo? 43 00:02:24,580 --> 00:02:28,980 Na, o mes vis dar ieško per sąrašas ir dar 44 00:02:28,980 --> 00:02:33,540 elementai ieškoti, mes per vidurį sąrašo ir palyginkite, kad 45 00:02:33,540 --> 00:02:36,020 vidutinio vertė mūsų adata. 46 00:02:36,020 --> 00:02:38,380 Jei jie vienodi, tada tai reiškia, kad mes rasti adatą, ir mes galime 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Priešingu atveju, jei adata yra mažesnis nei vidutinio vertė, tai reiškia, kad mes 49 00:02:43,940 --> 00:02:48,350 gali išmesti tinkamą pusę ir tik ieškoti kairėje pusėje masyvo. 50 00:02:48,350 --> 00:02:51,860 Priešingu atveju, mes ieškoti Dešinėje pusėje masyvo. 51 00:02:51,860 --> 00:02:55,470 Ir pabaigoje, jei jūs neturite daugiau elementų paliko ieškoti bet jūs 52 00:02:55,470 --> 00:02:58,030 neradau savo adatą dar, tada return false. 53 00:02:58,030 --> 00:03:02,960 Nes adata tikrai nėra šieno kupetoje. 54 00:03:02,960 --> 00:03:06,200 >> Dabar vienas tvarkingas dalykas apie šį pseudo kodas dvejetainėje paieškos yra tai, kad ji gali 55 00:03:06,200 --> 00:03:11,000 būti aiškinama arba kaip kartotinis arba grįžtamojo įgyvendinimas. 56 00:03:11,000 --> 00:03:14,900 Taigi būtų grįžtamojo jei vadinamas paieškos funkcija per paiešką 57 00:03:14,900 --> 00:03:18,400 veikti abiejose masyvo pusę. 58 00:03:18,400 --> 00:03:20,750 Mes padengti rekursija truputį vėliau į paskaitas. 59 00:03:20,750 --> 00:03:23,210 Bet žinau, kad tai yra galimybė jei norite pabandyti. 60 00:03:23,210 --> 00:03:24,460