1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: První věc, kterou by mohl Oznámení o nálezu je, že jsme již 3 00:00:13,120 --> 00:00:14,520 se kód napsaný pro nás. 4 00:00:14,520 --> 00:00:16,219 To se nazývá rozdělení kódu. 5 00:00:16,219 --> 00:00:19,060 Takže jsme nejen psát naše vlastní kód od nuly už. 6 00:00:19,060 --> 00:00:23,870 Spíše jsme vyplňování dutin v nějakém pre-existujícího kódu. 7 00:00:23,870 --> 00:00:28,860 >> Program find.c vyzve k zadání čísla vyplnit kupce sena, hledá 8 00:00:28,860 --> 00:00:33,260 haystack pro uživatele předloženy jehly, a to tím, že volá druh a 9 00:00:33,260 --> 00:00:36,660 vyhledávání, funkce definované v helpers.c. 10 00:00:36,660 --> 00:00:38,740 Takže find.c je psáno již. 11 00:00:38,740 --> 00:00:41,840 Vaším úkolem je napsat pomocníky. 12 00:00:41,840 --> 00:00:42,940 >> Tak co budeme dělat? 13 00:00:42,940 --> 00:00:45,270 Jsme se provádí dvě funkce. 14 00:00:45,270 --> 00:00:50,110 Vyhledávání, která vrací hodnotu true, pokud hodnota se nachází v kupce sena, vrací 15 00:00:50,110 --> 00:00:52,430 false pokud je tato hodnota není v kupce sena. 16 00:00:52,430 --> 00:00:59,060 A pak jsme také implementaci druh, která setřídí pole s názvem hodnoty. 17 00:00:59,060 --> 00:01:01,120 Takže pojďme řešit hledání. 18 00:01:01,120 --> 00:01:04,550 >> Vyhledávání je v současné době prováděna jako lineární vyhledávání. 19 00:01:04,550 --> 00:01:06,620 Ale můžete to udělat mnohem lépe, než to. 20 00:01:06,620 --> 00:01:11,610 Lineární vyhledávání je realizován v O n čas, což je docela pomalý, i když to 21 00:01:11,610 --> 00:01:14,920 Můžete hledat seznam, který mu dává. 22 00:01:14,920 --> 00:01:21,190 Vaším úkolem je provádět binární vyhledávání, který má běžet čas O log n. 23 00:01:21,190 --> 00:01:22,200 To je docela rychlý. 24 00:01:22,200 --> 00:01:24,240 >> Ale je tu podmínka. 25 00:01:24,240 --> 00:01:28,910 Binární vyhledávání lze vyhledávat pouze díky předem roztříděných seznamech. 26 00:01:28,910 --> 00:01:31,450 Proč je to tak? 27 00:01:31,450 --> 00:01:33,690 Dobře, pojďme se podívat na příklad. 28 00:01:33,690 --> 00:01:37,350 Vzhledem k tomu, pole hodnot, kupka sena, budeme hledat 29 00:01:37,350 --> 00:01:41,510 jehlu, a v tomto například číslo 3. 30 00:01:41,510 --> 00:01:45,220 >> Tak, že binární vyhledávání funguje tak, že Porovnáme-li střední hodnotu 31 00:01:45,220 --> 00:01:49,430 pole s jehlou, stejně jako jak jsme otevřeli telefonní seznam do středu 32 00:01:49,430 --> 00:01:51,720 Stránka v týdnu 0. 33 00:01:51,720 --> 00:01:55,710 Takže po porovnání střední hodnoty jehla, můžete odhodit buď 34 00:01:55,710 --> 00:01:59,620 levá nebo pravá polovina pole utažením své meze. 35 00:01:59,620 --> 00:02:04,450 V tomto případě, protože 3, naše jehla, je méně než 10, střední hodnota, 36 00:02:04,450 --> 00:02:07,060 přímo vázané může snížit. 37 00:02:07,060 --> 00:02:09,470 >> Ale snaží se, aby vaše hranice tak pevně, jak je to možné. 38 00:02:09,470 --> 00:02:12,690 Je-li střední hodnota není jehla, pak víte, že nemusíte 39 00:02:12,690 --> 00:02:14,070 zahrnout do vyhledávání. 40 00:02:14,070 --> 00:02:18,390 Takže vaše právo vázáno může dotáhnout hledání hranice jen trošičku víc, 41 00:02:18,390 --> 00:02:22,840 a tak dále a tak dále, dokud můžete najít jehlu. 42 00:02:22,840 --> 00:02:24,580 >> Takže to, co dělá pseudo Kód vypadat? 43 00:02:24,580 --> 00:02:28,980 No, když jsme pořád dívá skrz Seznam a ještě 44 00:02:28,980 --> 00:02:33,540 prvky, které vypadají v, vezmeme střed seznamu, a porovnat, že 45 00:02:33,540 --> 00:02:36,020 střední hodnota naší jehlou. 46 00:02:36,020 --> 00:02:38,380 Pokud jsou stejné, pak to znamená, že máme našel jehlu, 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čném případě, je-li jehla je menší než střední hodnota, pak to znamená, že 49 00:02:43,940 --> 00:02:48,350 může vyřadit pravou polovinu a jen hledat na levé straně pole. 50 00:02:48,350 --> 00:02:51,860 V opačném případě budeme hledat na pravé straně pole. 51 00:02:51,860 --> 00:02:55,470 A na závěr, pokud nemáte žádné zbývá hledat další prvky, ale můžete 52 00:02:55,470 --> 00:02:58,030 nenašli jste jehlu ještě, pak vrátí false. 53 00:02:58,030 --> 00:03:02,960 Vzhledem k tomu, jehla rozhodně není v kupce sena. 54 00:03:02,960 --> 00:03:06,200 >> Teď, jedna užitečná věc o tomto pseudo kód v binárním vyhledávání je, že může 55 00:03:06,200 --> 00:03:11,000 být vykládáno buď jako opakující se nebo rekurzivní implementace. 56 00:03:11,000 --> 00:03:14,900 Tak to by bylo rekurzivní, pokud jste volali vyhledávací funkce v rámci hledání 57 00:03:14,900 --> 00:03:18,400 fungovat na obou polovině pole. 58 00:03:18,400 --> 00:03:20,750 Budeme pokrývat rekurze trochu Později v průběhu. 59 00:03:20,750 --> 00:03:23,210 Ale vím, že to je možnost pokud byste chtěli vyzkoušet. 60 00:03:23,210 --> 00:03:24,460