1 00:00:00,000 --> 00:00:08,532 >> [MUSIC PŘEHRÁVÁNÍ] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: První věc, kterou by mohl Oznámení o nálezu je, že jsme již 3 00:00:12,060 --> 00:00:13,450 se kód napsaný pro nás. 4 00:00:13,450 --> 00:00:15,160 To se nazývá rozdělení kódu. 5 00:00:15,160 --> 00:00:18,000 Takže jsme nejen psát naše vlastní kód od nuly už. 6 00:00:18,000 --> 00:00:22,800 Spíše jsme vyplňování dutin v nějakém pre-existujícího kódu. 7 00:00:22,800 --> 00:00:27,790 >> Program find.c vyzve k zadání čísla vyplnit kupce sena, hledá 8 00:00:27,790 --> 00:00:32,189 haystack pro uživatele předloženy jehly, a to tím, že volá druh a 9 00:00:32,189 --> 00:00:35,590 vyhledávání, funkce definované v helpers.c. 10 00:00:35,590 --> 00:00:37,670 Takže find.c je psáno již. 11 00:00:37,670 --> 00:00:40,770 Vaším úkolem je napsat pomocníky. 12 00:00:40,770 --> 00:00:41,870 >> Tak co budeme dělat? 13 00:00:41,870 --> 00:00:44,210 Jsme se provádí dvě funkce. 14 00:00:44,210 --> 00:00:49,030 Vyhledávání, která vrací hodnotu true, pokud hodnota se nachází v kupce sena, vrací 15 00:00:49,030 --> 00:00:51,370 false pokud je tato hodnota není v kupce sena. 16 00:00:51,370 --> 00:00:57,990 A pak jsme také provádí jakousi která setřídí pole s názvem hodnoty. 17 00:00:57,990 --> 00:00:59,960 >> Takže pojďme řešit hledání. 18 00:00:59,960 --> 00:01:04,560 Vyhledávání je v současné době prováděna jako lineární hledání, ale můžete dělat mnohem 19 00:01:04,560 --> 00:01:05,550 lepší než to. 20 00:01:05,550 --> 00:01:09,910 Lineární vyhledávání je realizován v O n času, což je poměrně pomalé. 21 00:01:09,910 --> 00:01:13,850 I když to může vyhledávat jakýkoli seznam uveden na něj. 22 00:01:13,850 --> 00:01:20,130 Vaším úkolem je provádět binární vyhledávání, který má běžet čas O log n. 23 00:01:20,130 --> 00:01:21,130 To je docela rychlý. 24 00:01:21,130 --> 00:01:23,170 >> Ale je tu podmínka. 25 00:01:23,170 --> 00:01:27,600 Binární vyhledávání lze vyhledávat pouze díky předem roztříděných seznamech. 26 00:01:27,600 --> 00:01:30,370 Proč je to tak? 27 00:01:30,370 --> 00:01:32,620 >> No podívejme se na příklad. 28 00:01:32,620 --> 00:01:36,280 Vzhledem k tomu, pole hodnot, kupka sena, budeme hledat 29 00:01:36,280 --> 00:01:37,130 jehlu. 30 00:01:37,130 --> 00:01:40,460 A v tomto případě, číslo tři. 31 00:01:40,460 --> 00:01:44,130 Tak, že binární vyhledávání funguje tak, že Porovnáme-li střední hodnotu 32 00:01:44,130 --> 00:01:48,370 pole s jehlou, stejně jako jak jsme otevřeli telefonní seznam do středu 33 00:01:48,370 --> 00:01:50,660 Stránka v týdnu nulové. 34 00:01:50,660 --> 00:01:54,650 >> Takže po porovnání střední hodnoty jehla, můžete odhodit buď 35 00:01:54,650 --> 00:01:58,530 levá nebo pravá polovina pole utažením své meze. 36 00:01:58,530 --> 00:02:03,390 V tomto případě, protože tři, naše jehla, je menší než 10, střední hodnota, 37 00:02:03,390 --> 00:02:05,990 přímo vázané může snížit. 38 00:02:05,990 --> 00:02:08,400 Ale snaží se, aby vaše hranice tak pevně, jak je to možné. 39 00:02:08,400 --> 00:02:11,630 Je-li střední hodnota není jehla, pak víte, že nemusíte 40 00:02:11,630 --> 00:02:13,010 zahrnout do vyhledávání. 41 00:02:13,010 --> 00:02:17,310 Takže máš pravdu vázán lze utáhnout hledání hranice jen trošičku víc, 42 00:02:17,310 --> 00:02:21,770 a tak dále a tak dále, dokud můžete najít jehlu. 43 00:02:21,770 --> 00:02:23,480 >> Takže to, co se v pseudokódu vypadat? 44 00:02:23,480 --> 00:02:28,420 No, když jsme stále hledají přes Seznam a ještě prvky 45 00:02:28,420 --> 00:02:33,690 Podívejte se do bereme uprostřed seznamu, a porovnat, že střední hodnoty 46 00:02:33,690 --> 00:02:34,950 naše jehla. 47 00:02:34,950 --> 00:02:37,310 Pokud jsou stejné, pak to znamená, že máme našel jehlu a můžeme 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> V opačném případě, je-li jehla je menší než střední hodnota, pak to znamená, že 50 00:02:42,870 --> 00:02:47,280 může vyřadit pravou polovinu, a jen hledat na levé straně pole. 51 00:02:47,280 --> 00:02:51,090 V opačném případě budeme hledat na pravé straně pole. 52 00:02:51,090 --> 00:02:54,410 A na závěr, pokud nemáte žádné zbývá hledat další prvky, ale můžete 53 00:02:54,410 --> 00:02:58,050 nenašli jste jehlu ještě, pak se return false, protože jehla 54 00:02:58,050 --> 00:03:01,890 rozhodně není v kupce sena. 55 00:03:01,890 --> 00:03:05,270 >> Nyní užitečná věc o tomto pseudokódu v binární hledání je, že může být 56 00:03:05,270 --> 00:03:09,940 interpretovat buď jako opakující se nebo rekurzivní implementace. 57 00:03:09,940 --> 00:03:13,810 Tak to by bylo rekurzivní, pokud jste volali vyhledávací funkce v rámci hledání 58 00:03:13,810 --> 00:03:17,350 fungovat na obou polovině pole. 59 00:03:17,350 --> 00:03:21,030 Budeme pokrývat rekurzi trochu později Samozřejmě, ale vím, že to je 60 00:03:21,030 --> 00:03:24,190 volba, pokud byste chtěli vyzkoušet. 61 00:03:24,190 --> 00:03:26,030 >> Nyní se pojďme podívat na druhu. 62 00:03:26,030 --> 00:03:30,750 Seřadit bere pole a číslo n, což je velikost pole. 63 00:03:30,750 --> 00:03:34,030 Teď tam jsou různé typy druhů, a můžete se podívat na některé 64 00:03:34,030 --> 00:03:36,370 šortky pro ukázky a vysvětlení. 65 00:03:36,370 --> 00:03:39,580 Návratový typ pro naše Funkce třídění je neplatné. 66 00:03:39,580 --> 00:03:43,580 Takže to znamená, že nejdeme vrátit jakoukoli nabídku od druhu. 67 00:03:43,580 --> 00:03:48,140 Jsme skutečně změní velmi pole, který byl předán do nás. 68 00:03:48,140 --> 00:03:52,290 >> A to je možné, protože pole jsou prošel odkazem v C. Nyní se budeme 69 00:03:52,290 --> 00:03:55,290 viz více o tom později, ale Podstatný rozdíl mezi procházení 70 00:03:55,290 --> 00:03:59,340 něco jako celé číslo a procházení v poli, je, že když 71 00:03:59,340 --> 00:04:03,490 předat celé číslo, C je jen tak vytvořit kopii tohoto integer a projít 72 00:04:03,490 --> 00:04:04,450 že do funkce. 73 00:04:04,450 --> 00:04:08,530 Původní proměnné se nezmění Jakmile je funkce dokončena. 74 00:04:08,530 --> 00:04:12,480 S pole, na druhé straně, to je nebudu dělat kopii, a budete 75 00:04:12,480 --> 00:04:17,910 skutečně úpravách Velmi pole sám. 76 00:04:17,910 --> 00:04:21,269 >> Takže jeden druh druhu je výběr třídění. 77 00:04:21,269 --> 00:04:24,750 Výběr třídit funguje tak, že počínaje začátek, a pak iterovat 78 00:04:24,750 --> 00:04:26,820 nad a najít nejmenší prvek. 79 00:04:26,820 --> 00:04:30,710 A pak vyměnit, že nejmenší prvek s prvním. 80 00:04:30,710 --> 00:04:34,360 A pak se přesunout na druhý prvek , Naleznete další nejmenší 81 00:04:34,360 --> 00:04:38,320 prvek, a pak vyměnit, že se Druhým prvkem v poli, neboť 82 00:04:38,320 --> 00:04:41,100 První element je již řazeno. 83 00:04:41,100 --> 00:04:45,370 A tak se pak budete pokračovat za každou prvkem při určování nejmenší 84 00:04:45,370 --> 00:04:47,690 hodnota a vymění ji. 85 00:04:47,690 --> 00:04:53,460 >> Vždyť já se rovná 0, úplně první prvek na n minus 1, budete porovnávat 86 00:04:53,460 --> 00:04:57,820 každá další hodnota po tom a najít index minimální hodnoty. 87 00:04:57,820 --> 00:05:02,520 Jakmile zjistíte, index minimální hodnoty, můžete prohodit, že hodnota pole 88 00:05:02,520 --> 00:05:05,930 minimální a řada I. 89 00:05:05,930 --> 00:05:09,760 >> Dalším typem druhu, který můžete realizovat je bublina třídění. 90 00:05:09,760 --> 00:05:14,380 Takže bubble sort přes seznamu iterace porovnání sousedních prvků a 91 00:05:14,380 --> 00:05:17,720 vyměňovat prvky, které jsou ve špatném pořadí. 92 00:05:17,720 --> 00:05:22,380 A to způsobem, největší prvek bude bubliny až do konce. 93 00:05:22,380 --> 00:05:28,070 A seznam je seřazen jednou více prvky byly vyměněny. 94 00:05:28,070 --> 00:05:31,920 >> Takže to jsou dva příklady druhu algoritmy, které můžete realizovat pro 95 00:05:31,920 --> 00:05:33,230 Program find. 96 00:05:33,230 --> 00:05:37,350 Jakmile dokončíte třídit, a vy jste provedeno hledání, budete hotovi. 97 00:05:37,350 --> 00:05:39,720 Jmenuji se Zamyla, a to je CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUSIC PŘEHRÁVÁNÍ]