1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Primul lucru pe care s-ar putea aviz cu privire la descoperire este că noi deja 3 00:00:13,120 --> 00:00:14,520 au cod scris pentru noi. 4 00:00:14,520 --> 00:00:16,219 Aceasta se numește cod de distribuție. 5 00:00:16,219 --> 00:00:19,060 Deci, nu doar scris propria noastră mai cod de la zero. 6 00:00:19,060 --> 00:00:23,870 Mai degrabă, suntem completarea golurilor în unele cod pre-existent. 7 00:00:23,870 --> 00:00:28,860 >> Programul find.c solicită numere pentru a umple carul cu fân, caută 8 00:00:28,860 --> 00:00:33,260 claie de fân pentru un ac de utilizator prezentate, și-l face acest lucru prin apel tip și 9 00:00:33,260 --> 00:00:36,660 de căutare, funcții definite în helpers.c. 10 00:00:36,660 --> 00:00:38,740 Astfel find.c este scris deja. 11 00:00:38,740 --> 00:00:41,840 Treaba ta este de a scrie ajutoare. 12 00:00:41,840 --> 00:00:42,940 >> Deci, ce facem? 13 00:00:42,940 --> 00:00:45,270 Suntem punerea în aplicare a două funcții. 14 00:00:45,270 --> 00:00:50,110 De căutare, care returneaza true daca o valoare se găsește în carul cu fân, revenind 15 00:00:50,110 --> 00:00:52,430 false dacă valoarea este nu în carul cu fân. 16 00:00:52,430 --> 00:00:59,060 Și apoi vom punere în aplicare a, de asemenea, un fel, care sortează matrice numita valori. 17 00:00:59,060 --> 00:01:01,120 Deci, haideți să abordeze căutare. 18 00:01:01,120 --> 00:01:04,550 >> Căutare este implementat în prezent ca o căutare liniară. 19 00:01:04,550 --> 00:01:06,620 Dar poți să faci mult mai mult decât atât. 20 00:01:06,620 --> 00:01:11,610 Căutare liniară este implementat în O de n timp, care este destul de lent, deși 21 00:01:11,610 --> 00:01:14,920 poate căuta orice listă dat să-l. 22 00:01:14,920 --> 00:01:21,190 Treaba ta este de a implementa căutare binară, care a rulat timp O, de n log. 23 00:01:21,190 --> 00:01:22,200 Asta e destul de repede. 24 00:01:22,200 --> 00:01:24,240 >> Dar există o prevedere. 25 00:01:24,240 --> 00:01:28,910 Binar de căutare poate căuta numai prin liste de pre-sortate. 26 00:01:28,910 --> 00:01:31,450 De ce este asta? 27 00:01:31,450 --> 00:01:33,690 Ei bine, să ne uităm la un exemplu. 28 00:01:33,690 --> 00:01:37,350 Având în vedere o serie de valori, carul cu fân, vom fi uitat 29 00:01:37,350 --> 00:01:41,510 pentru un ac, și în acest exemplu, numărul întreg 3. 30 00:01:41,510 --> 00:01:45,220 >> Modul în care funcționează binar de căutare este că vom compara valoarea de mijloc a 31 00:01:45,220 --> 00:01:49,430 matrice pentru a acului, mai mult ca și cum am deschis o carte de telefon la mijloc 32 00:01:49,430 --> 00:01:51,720 Pagina în Săptămâna 0. 33 00:01:51,720 --> 00:01:55,710 Deci, după compararea valorii de mijloc a acul, puteți să aruncați fie 34 00:01:55,710 --> 00:01:59,620 stânga sau jumătatea din dreapta a matrice prin strângerea limitele impuse. 35 00:01:59,620 --> 00:02:04,450 În acest caz, deoarece 3, ac noastră, este mai puțin de 10, valoarea de mijloc, 36 00:02:04,450 --> 00:02:07,060 drept legat poate scădea. 37 00:02:07,060 --> 00:02:09,470 >> Dar încercați să faceți limite de la fel de bine ca posibil. 38 00:02:09,470 --> 00:02:12,690 Dacă valoarea de mijloc nu este acul, atunci știți că nu aveți nevoie să 39 00:02:12,690 --> 00:02:14,070 include în căutarea. 40 00:02:14,070 --> 00:02:18,390 Deci, chiar dvs. legat poate strânge limite de căutare doar un pic mai mult, 41 00:02:18,390 --> 00:02:22,840 și așa mai departe și așa mai departe, până când veți găsi ac ta. 42 00:02:22,840 --> 00:02:24,580 >> Deci, ceea ce face pseudo Codul arata ca? 43 00:02:24,580 --> 00:02:28,980 Ei bine, în timp ce suntem încă în căutarea prin lista și încă mai au 44 00:02:28,980 --> 00:02:33,540 elemente să se uite la, vom lua la mijloc listei și compara că 45 00:02:33,540 --> 00:02:36,020 Valoarea medie a ac nostru. 46 00:02:36,020 --> 00:02:38,380 Dacă sunt egali, atunci înseamnă că ne-am găsit acul, și putem 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Altfel, dacă acul este mai mică valoarea de mijloc, atunci înseamnă că ne-am 49 00:02:43,940 --> 00:02:48,350 se poate renunța la jumătatea din dreapta și doar căutați în partea stângă a tabloului. 50 00:02:48,350 --> 00:02:51,860 În caz contrar, vom căuta partea dreapta a matrice. 51 00:02:51,860 --> 00:02:55,470 Iar la final, dacă nu aveți nici o mai multe elemente de stânga pentru a căuta, dar te 52 00:02:55,470 --> 00:02:58,030 Nu s-au găsit acul încă, atunci vă întoarceți false. 53 00:02:58,030 --> 00:03:02,960 Deoarece acul siguranta nu este în carul cu fân. 54 00:03:02,960 --> 00:03:06,200 >> Acum, un lucru curat despre acest pseudo cod în căutare binar este că se poate 55 00:03:06,200 --> 00:03:11,000 trebuie interpretate în nici un iterativ sau punerea în aplicare a recursiv. 56 00:03:11,000 --> 00:03:14,900 Asa ca ar fi recursiv, dacă te-a sunat funcția de căutare în căutarea 57 00:03:14,900 --> 00:03:18,400 funcționeze pe fiecare jumătate de matrice. 58 00:03:18,400 --> 00:03:20,750 Vom acoperi recursivitate un pic mai târziu în cursul. 59 00:03:20,750 --> 00:03:23,210 Dar știu că aceasta este o opțiune dacă doriți să încercați. 60 00:03:23,210 --> 00:03:24,460