1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA Chan: Prva stvar koju ćete Obavijest o otkriću je da smo već 3 00:00:13,120 --> 00:00:14,520 su kod napisan za nas. 4 00:00:14,520 --> 00:00:16,219 To se zove distribucija code. 5 00:00:16,219 --> 00:00:19,060 Dakle, mi ne samo pisanje vlastitih koda od nule više. 6 00:00:19,060 --> 00:00:23,870 Umjesto toga, mi smo popunjavanja praznine na neki već postojeći kod. 7 00:00:23,870 --> 00:00:28,860 >> Find.c Program traži brojeva popuniti plast sijena, traži 8 00:00:28,860 --> 00:00:33,260 plastu sijena za korisnika podnosi iglom, i to čini pozivom vrsta i 9 00:00:33,260 --> 00:00:36,660 pretraživanja, funkcije definirane u helpers.c. 10 00:00:36,660 --> 00:00:38,740 Dakle find.c je napisano već. 11 00:00:38,740 --> 00:00:41,840 Vaš je zadatak napisati pomagače. 12 00:00:41,840 --> 00:00:42,940 >> Pa što da radimo? 13 00:00:42,940 --> 00:00:45,270 Mi provedbi dvije funkcije. 14 00:00:45,270 --> 00:00:50,110 Pretraga, koji vraća true ako je vrijednost nalazi u plastu sijena, povratka 15 00:00:50,110 --> 00:00:52,430 false ako je vrijednost Ne u plastu sijena. 16 00:00:52,430 --> 00:00:59,060 I onda mi smo također provedbi vrsta, koji sortira niz zove vrijednosti. 17 00:00:59,060 --> 00:01:01,120 Tako ćemo se borila za pretraživanje. 18 00:01:01,120 --> 00:01:04,550 >> Traži se trenutno provode kao linearni pretragu. 19 00:01:04,550 --> 00:01:06,620 No, možete napraviti mnogo bolje od toga. 20 00:01:06,620 --> 00:01:11,610 Linearni traži se provodi u O n vrijeme, što je prilično spora, iako 21 00:01:11,610 --> 00:01:14,920 može tražiti bilo koji popis s obzirom na to. 22 00:01:14,920 --> 00:01:21,190 Vaš posao je da se provede binarni pretragu, koja je pokrenuti vrijeme O iz dnevnika n. 23 00:01:21,190 --> 00:01:22,200 To je prilično brzo. 24 00:01:22,200 --> 00:01:24,240 >> Ali postoji uvjet. 25 00:01:24,240 --> 00:01:28,910 Binary traži se samo traži kroz prethodno sortirani listama. 26 00:01:28,910 --> 00:01:31,450 Zašto je to tako? 27 00:01:31,450 --> 00:01:33,690 Pa, pogledajmo primjer. 28 00:01:33,690 --> 00:01:37,350 S obzirom na niz vrijednosti, plast, ćemo biti u potrazi 29 00:01:37,350 --> 00:01:41,510 za iglu, i u to Primjerice, cijeli broj 3. 30 00:01:41,510 --> 00:01:45,220 >> Način na koji binarno pretraživanje radi je da Usporedimo srednju vrijednost 31 00:01:45,220 --> 00:01:49,430 polje za igle, poput kako otvorili smo telefonski imenik na sredini 32 00:01:49,430 --> 00:01:51,720 stranica u tjednu 0. 33 00:01:51,720 --> 00:01:55,710 Dakle, nakon što se usporede srednje vrijednosti igla, možete odbaciti bilo 34 00:01:55,710 --> 00:01:59,620 lijeva ili desna polovica niz zatezanjem svoje granice. 35 00:01:59,620 --> 00:02:04,450 U tom slučaju, od 3, naša igla je manje od 10, srednja vrijednost, 36 00:02:04,450 --> 00:02:07,060 Pravo granicu može se smanjiti. 37 00:02:07,060 --> 00:02:09,470 >> No, pokušati napraviti svoje granice kao čvrsto što je više moguće. 38 00:02:09,470 --> 00:02:12,690 Ako srednja vrijednost nije igla, onda znate da ne trebate 39 00:02:12,690 --> 00:02:14,070 uključiti ga u pretraživanje. 40 00:02:14,070 --> 00:02:18,390 Dakle, vaše pravo dužni može zategnuti search granice samo jedan maleni malo više, 41 00:02:18,390 --> 00:02:22,840 i tako dalje i tako dalje, sve dok nađete svoj iglu. 42 00:02:22,840 --> 00:02:24,580 >> Pa što ne pseudo Kod izgledati? 43 00:02:24,580 --> 00:02:28,980 Pa, dok smo još uvijek gleda kroz Popis i još uvijek imaju 44 00:02:28,980 --> 00:02:33,540 Elementi za gledati u, uzmemo u sredini liste i usporedite to 45 00:02:33,540 --> 00:02:36,020 srednja vrijednost našem igle. 46 00:02:36,020 --> 00:02:38,380 Ako su oni jednaki, onda to znači da smo pronašao iglu, a možemo 47 00:02:38,380 --> 00:02:40,160 povratak istina. 48 00:02:40,160 --> 00:02:43,940 >> Inače, ako je igla ispod srednja vrijednost, onda da mi znači 49 00:02:43,940 --> 00:02:48,350 može odbaciti desnu polovicu i samo traži lijevu stranu polja. 50 00:02:48,350 --> 00:02:51,860 Inače, mi ćemo tražiti desnoj strani polja. 51 00:02:51,860 --> 00:02:55,470 I na kraju, ako ne imati bilo više elemenata ostavili da traži, ali ste 52 00:02:55,470 --> 00:02:58,030 nisu pronašli svoj iglu još, onda ste se vratili lažna. 53 00:02:58,030 --> 00:03:02,960 Zbog igla svakako Nije u plastu sijena. 54 00:03:02,960 --> 00:03:06,200 >> Sada, jedan uredan stvar o ovom pseudo Kod u binarnom pretraživanje je da je to moguće 55 00:03:06,200 --> 00:03:11,000 tumačiti kao bilo iterativni ili rekurzivna provedba. 56 00:03:11,000 --> 00:03:14,900 Tako da će to biti rekurzivna ako zove pretraživač u potrazi 57 00:03:14,900 --> 00:03:18,400 djelovati na bilo polovici polja. 58 00:03:18,400 --> 00:03:20,750 Mi ćemo pokriti Rekurzije malo kasnije u tijeku. 59 00:03:20,750 --> 00:03:23,210 Ali znam da je to opcija Ako želite isprobati. 60 00:03:23,210 --> 00:03:24,460