1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Prvá vec, ktorú by mohol Oznámenie o náleze je, že sme už 3 00:00:13,120 --> 00:00:14,520 sa kód napísaný pre nás. 4 00:00:14,520 --> 00:00:16,219 To sa nazýva rozdelenie kódu. 5 00:00:16,219 --> 00:00:19,060 Takže sme nielen písať naše vlastné kód od nuly už. 6 00:00:19,060 --> 00:00:23,870 Skôr sme vyplňovanie dutín v nejakom pre-existujúceho kódu. 7 00:00:23,870 --> 00:00:28,860 >> Program find.c vyzve na zadanie čísla vyplniť kope sena, hľadá 8 00:00:28,860 --> 00:00:33,260 stoh sena pre užívateľa predložené ihly, a to tým, že volá druh a 9 00:00:33,260 --> 00:00:36,660 vyhľadávanie, funkcie definované v helpers.c. 10 00:00:36,660 --> 00:00:38,740 Takže find.c je napísané už. 11 00:00:38,740 --> 00:00:41,840 Vašou úlohou je napísať pomocníkmi. 12 00:00:41,840 --> 00:00:42,940 >> Tak čo budeme robiť? 13 00:00:42,940 --> 00:00:45,270 Sme sa vykonáva dve funkcie. 14 00:00:45,270 --> 00:00:50,110 Vyhľadávanie, ktorá vracia hodnotu true, ak hodnota sa nachádza v kope sena, vracia 15 00:00:50,110 --> 00:00:52,430 false ak je táto hodnota nie je v kope sena. 16 00:00:52,430 --> 00:00:59,060 A potom sme tiež implementáciu druh, ktorá zotriedi pole s názvom hodnoty. 17 00:00:59,060 --> 00:01:01,120 Takže poďme riešiť hľadanie. 18 00:01:01,120 --> 00:01:04,550 >> Vyhľadávanie je v súčasnosti vykonávajú ako lineárny vyhľadávanie. 19 00:01:04,550 --> 00:01:06,620 Ale môžete to urobiť oveľa lepšie, než to. 20 00:01:06,620 --> 00:01:11,610 Lineárne vyhľadávanie je realizovaný v O n čas, čo je celkom pomalý, aj keď to 21 00:01:11,610 --> 00:01:14,920 Môžete hľadať zoznam, ktorý mu dáva. 22 00:01:14,920 --> 00:01:21,190 Vašou úlohou je vykonávať binárne vyhľadávanie, ktorý má bežať čas O log n 23 00:01:21,190 --> 00:01:22,200 To je celkom rýchly. 24 00:01:22,200 --> 00:01:24,240 >> Ale je tu podmienka. 25 00:01:24,240 --> 00:01:28,910 Binárne vyhľadávanie je možné vyhľadávať iba vďaka vopred roztriedených zoznamoch. 26 00:01:28,910 --> 00:01:31,450 Prečo je to tak? 27 00:01:31,450 --> 00:01:33,690 Dobre, poďme sa pozrieť na príklad. 28 00:01:33,690 --> 00:01:37,350 Vzhľadom k tomu, pole hodnôt, kôpka sena, budeme hľadať 29 00:01:37,350 --> 00:01:41,510 ihlu, a v tomto napríklad číslo 3. 30 00:01:41,510 --> 00:01:45,220 >> Tak, že binárne vyhľadávanie funguje tak, že Ak porovnáme strednú hodnotu 31 00:01:45,220 --> 00:01:49,430 pole s ihlou, rovnako ako ako sme otvorili telefónny zoznam do stredu 32 00:01:49,430 --> 00:01:51,720 Stránka v týždni 0. 33 00:01:51,720 --> 00:01:55,710 Takže po porovnaní strednej hodnoty ihla, môžete odhodiť buď 34 00:01:55,710 --> 00:01:59,620 ľavá alebo pravá polovica poľa utiahnutím svoje medze. 35 00:01:59,620 --> 00:02:04,450 V tomto prípade, pretože 3, naša ihla, je menej ako 10, stredná hodnota, 36 00:02:04,450 --> 00:02:07,060 priamo viazané môže znížiť. 37 00:02:07,060 --> 00:02:09,470 >> Ale snaží sa, aby vaše hranice tak pevne, ako je to možné. 38 00:02:09,470 --> 00:02:12,690 Je-li stredná hodnota nie je ihla, potom viete, že nemusíte 39 00:02:12,690 --> 00:02:14,070 zahrnúť do vyhľadávania. 40 00:02:14,070 --> 00:02:18,390 Takže vaše právo viazané môže dotiahnuť hľadanie hranice len trošičku viac, 41 00:02:18,390 --> 00:02:22,840 a tak ďalej a tak ďalej, až kým môžete nájsť ihlu. 42 00:02:22,840 --> 00:02:24,580 >> Takže to, čo robí pseudo Kód vyzerať? 43 00:02:24,580 --> 00:02:28,980 No, keď sme stále pozerá cez Zoznam a ešte 44 00:02:28,980 --> 00:02:33,540 prvky, ktoré vyzerajú v, vezmeme stred zoznamu, a porovnať, že 45 00:02:33,540 --> 00:02:36,020 stredná hodnota našej ihlou. 46 00:02:36,020 --> 00:02:38,380 Ak sú rovnaké, potom to znamená, že máme našiel ihlu, a môžeme 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> V opačnom prípade, ak je ihla je menšia ako stredná hodnota, potom to znamená, že 49 00:02:43,940 --> 00:02:48,350 môže vyradiť pravú polovicu a len hľadať na ľavej strane poľa. 50 00:02:48,350 --> 00:02:51,860 V opačnom prípade budeme hľadať na pravej strane poľa. 51 00:02:51,860 --> 00:02:55,470 A na záver, ak nemáte žiadne zostáva hľadať ďalšie prvky, ale môžete 52 00:02:55,470 --> 00:02:58,030 nenašli ste ihlu ešte, potom vráti false. 53 00:02:58,030 --> 00:03:02,960 Vzhľadom k tomu, ihla rozhodne nie je v kope sena. 54 00:03:02,960 --> 00:03:06,200 >> Teraz, jedna užitočná vec o tomto pseudo kód v binárnom vyhľadávania je, že môže 55 00:03:06,200 --> 00:03:11,000 byť vykladané buď ako opakujúce sa alebo rekurzívne implementácia. 56 00:03:11,000 --> 00:03:14,900 Tak to by bolo rekurzívne, ak ste volali vyhľadávacie funkcie v rámci hľadania 57 00:03:14,900 --> 00:03:18,400 fungovať na oboch polovici poľa. 58 00:03:18,400 --> 00:03:20,750 Budeme pokrývať rekurzia trochu Neskôr v priebehu. 59 00:03:20,750 --> 00:03:23,210 Ale viem, že to je možnosť ak by ste chceli vyskúšať. 60 00:03:23,210 --> 00:03:24,460