1 00:00:00,000 --> 00:00:08,532 >> [MUSIC PLAYBACK] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Prvá vec, ktorú by mohol Oznámenie o náleze je, že sme už 3 00:00:12,060 --> 00:00:13,450 sa kód napísaný pre nás. 4 00:00:13,450 --> 00:00:15,160 To sa nazýva rozdelenie kódu. 5 00:00:15,160 --> 00:00:18,000 Takže sme nielen písať naše vlastné kód od nuly už. 6 00:00:18,000 --> 00:00:22,800 Skôr sme vyplňovanie dutín v nejakom pre-existujúceho kódu. 7 00:00:22,800 --> 00:00:27,790 >> Program find.c vyzve na zadanie čísla vyplniť kope sena, hľadá 8 00:00:27,790 --> 00:00:32,189 stoh sena pre užívateľa predložené ihly, a to tým, že volá druh a 9 00:00:32,189 --> 00:00:35,590 vyhľadávanie, funkcie definované v helpers.c. 10 00:00:35,590 --> 00:00:37,670 Takže find.c je napísané už. 11 00:00:37,670 --> 00:00:40,770 Vašou úlohou je napísať pomocníkmi. 12 00:00:40,770 --> 00:00:41,870 >> Tak čo budeme robiť? 13 00:00:41,870 --> 00:00:44,210 Sme sa vykonáva dve funkcie. 14 00:00:44,210 --> 00:00:49,030 Vyhľadávanie, ktorá vracia hodnotu true, ak hodnota sa nachádza v kope sena, vracia 15 00:00:49,030 --> 00:00:51,370 false ak je táto hodnota nie je v kope sena. 16 00:00:51,370 --> 00:00:57,990 A potom sme tiež vykonáva akúsi ktorá zotriedi pole s názvom hodnoty. 17 00:00:57,990 --> 00:00:59,960 >> Takže poďme riešiť hľadanie. 18 00:00:59,960 --> 00:01:04,560 Vyhľadávanie je v súčasnej dobe vykonáva ako lineárne hľadanie, ale môžete robiť oveľa 19 00:01:04,560 --> 00:01:05,550 lepšie ako to. 20 00:01:05,550 --> 00:01:09,910 Lineárne vyhľadávanie je realizovaný v O n času, čo je pomerne pomalé. 21 00:01:09,910 --> 00:01:13,850 Aj keď to môže vyhľadávať akýkoľvek zoznam uvedený na neho. 22 00:01:13,850 --> 00:01:20,130 Vašou úlohou je vykonávať binárne vyhľadávanie, ktorý má bežať čas O log n 23 00:01:20,130 --> 00:01:21,130 To je celkom rýchly. 24 00:01:21,130 --> 00:01:23,170 >> Ale je tu podmienka. 25 00:01:23,170 --> 00:01:27,600 Binárne vyhľadávanie je možné vyhľadávať iba vďaka vopred roztriedených zoznamoch. 26 00:01:27,600 --> 00:01:30,370 Prečo je to tak? 27 00:01:30,370 --> 00:01:32,620 >> No pozrime sa na príklad. 28 00:01:32,620 --> 00:01:36,280 Vzhľadom k tomu, pole hodnôt, kôpka sena, budeme hľadať 29 00:01:36,280 --> 00:01:37,130 ihlu. 30 00:01:37,130 --> 00:01:40,460 A v tomto prípade, číslo tri. 31 00:01:40,460 --> 00:01:44,130 Tak, že binárne vyhľadávanie funguje tak, že Ak porovnáme strednú hodnotu 32 00:01:44,130 --> 00:01:48,370 pole s ihlou, rovnako ako ako sme otvorili telefónny zoznam do stredu 33 00:01:48,370 --> 00:01:50,660 Stránka v týždni nulové. 34 00:01:50,660 --> 00:01:54,650 >> Takže po porovnaní strednej hodnoty ihla, môžete odhodiť buď 35 00:01:54,650 --> 00:01:58,530 ľavá alebo pravá polovica poľa utiahnutím svoje medze. 36 00:01:58,530 --> 00:02:03,390 V tomto prípade, pretože tri, naše ihla, je menšia ako 10, stredná hodnota, 37 00:02:03,390 --> 00:02:05,990 priamo viazané môže znížiť. 38 00:02:05,990 --> 00:02:08,400 Ale snaží sa, aby vaše hranice tak pevne, ako je to možné. 39 00:02:08,400 --> 00:02:11,630 Je-li stredná hodnota nie je ihla, potom viete, že nemusíte 40 00:02:11,630 --> 00:02:13,010 zahrnúť do vyhľadávania. 41 00:02:13,010 --> 00:02:17,310 Takže máš pravdu viazaný možno utiahnuť hľadanie hranice len trošičku viac, 42 00:02:17,310 --> 00:02:21,770 a tak ďalej a tak ďalej, až kým môžete nájsť ihlu. 43 00:02:21,770 --> 00:02:23,480 >> Takže to, čo sa v pseudokódu vyzerať? 44 00:02:23,480 --> 00:02:28,420 No, keď sme stále hľadajú cez Zoznam a ešte prvky 45 00:02:28,420 --> 00:02:33,690 Pozrite sa do berieme uprostred zoznamu, a porovnať, že stredné hodnoty 46 00:02:33,690 --> 00:02:34,950 naše ihla. 47 00:02:34,950 --> 00:02:37,310 Ak sú rovnaké, potom to znamená, že máme našiel ihlu 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čnom prípade, ak je ihla je menšia ako stredná hodnota, potom to znamená, že 50 00:02:42,870 --> 00:02:47,280 môže vyradiť pravú polovicu, a len hľadať na ľavej strane poľa. 51 00:02:47,280 --> 00:02:51,090 V opačnom prípade budeme hľadať na pravej strane poľa. 52 00:02:51,090 --> 00:02:54,410 A na záver, ak nemáte žiadne zostáva hľadať ďalšie prvky, ale môžete 53 00:02:54,410 --> 00:02:58,050 nenašli ste ihlu ešte, potom sa return false, pretože ihla 54 00:02:58,050 --> 00:03:01,890 rozhodne nie je v kope sena. 55 00:03:01,890 --> 00:03:05,270 >> Teraz užitočná vec o tomto pseudokódu v binárnej hľadanie je, že môže byť 56 00:03:05,270 --> 00:03:09,940 interpretovať buď ako opakujúce sa alebo rekurzívne implementácia. 57 00:03:09,940 --> 00:03:13,810 Tak to by bolo rekurzívne, ak ste volali vyhľadávacie funkcie v rámci hľadania 58 00:03:13,810 --> 00:03:17,350 fungovať na oboch polovici poľa. 59 00:03:17,350 --> 00:03:21,030 Budeme pokrývať rekurziu trochu neskôr Samozrejme, ale viem, že to je 60 00:03:21,030 --> 00:03:24,190 voľba, ak by ste chceli vyskúšať. 61 00:03:24,190 --> 00:03:26,030 >> Teraz sa poďme pozrieť na druhu. 62 00:03:26,030 --> 00:03:30,750 Zoradiť berie pole a číslo n, čo je veľkosť poľa. 63 00:03:30,750 --> 00:03:34,030 Teraz tam sú rôzne typy druhov, a môžete sa pozrieť na niektoré 64 00:03:34,030 --> 00:03:36,370 šortky pre ukážky a vysvetlenie. 65 00:03:36,370 --> 00:03:39,580 Návratový typ pre naše Funkcia triedenia je neplatné. 66 00:03:39,580 --> 00:03:43,580 Takže to znamená, že nejdeme vrátiť akúkoľvek ponuku od druhu. 67 00:03:43,580 --> 00:03:48,140 Sme skutočne zmení veľmi poľa, ktorý bol odovzdaný do nás. 68 00:03:48,140 --> 00:03:52,290 >> A to je možné, pretože pole sú prešiel odkazom v C. Teraz sa budeme 69 00:03:52,290 --> 00:03:55,290 pozri viac o tom neskôr, ale Podstatný rozdiel medzi prechádzanie 70 00:03:55,290 --> 00:03:59,340 niečo ako celé číslo a prechádzanie v poli, je, že keď 71 00:03:59,340 --> 00:04:03,490 odovzdať celé číslo, C je len tak vytvoriť kópiu tohto integer a prejsť 72 00:04:03,490 --> 00:04:04,450 že do funkcie. 73 00:04:04,450 --> 00:04:08,530 Pôvodné premenné sa nezmenia Akonáhle je funkcia dokončená. 74 00:04:08,530 --> 00:04:12,480 S pole, na druhej strane, to je nebudem robiť kópiu, a budete 75 00:04:12,480 --> 00:04:17,910 skutočne úpravách Veľmi pole sám. 76 00:04:17,910 --> 00:04:21,269 >> Takže jeden druh druhu je výber triedenia. 77 00:04:21,269 --> 00:04:24,750 Výber triediť funguje tak, že počnúc začiatok, a potom iterovat 78 00:04:24,750 --> 00:04:26,820 nad a nájsť najmenší prvok. 79 00:04:26,820 --> 00:04:30,710 A potom vymeniť, že najmenší prvok s prvým. 80 00:04:30,710 --> 00:04:34,360 A potom sa presunúť na druhý prvok , Nájdete ďalšie najmenší 81 00:04:34,360 --> 00:04:38,320 prvok, a potom vymeniť, že sa Druhým prvkom v poli, pretože 82 00:04:38,320 --> 00:04:41,100 Prvý element už je zoradený. 83 00:04:41,100 --> 00:04:45,370 A tak sa potom budete pokračovať za každú prvkom pri určovaní najmenšej 84 00:04:45,370 --> 00:04:47,690 hodnota a vymení ju. 85 00:04:47,690 --> 00:04:53,460 >> Veď ja sa rovná 0, úplne prvý prvok na n mínus 1, budete porovnávať 86 00:04:53,460 --> 00:04:57,820 každá ďalšia hodnota po tom a nájsť index minimálnej hodnoty. 87 00:04:57,820 --> 00:05:02,520 Akonáhle zistíte, index minimálne hodnoty, môžete prehodiť, že hodnota poľa 88 00:05:02,520 --> 00:05:05,930 minimálna a rad I. 89 00:05:05,930 --> 00:05:09,760 >> Ďalším typom druhu, ktorý môžete realizovať je bublina triedenie. 90 00:05:09,760 --> 00:05:14,380 Takže bubble sort cez zoznamu iterácie nákupný susedných prvkov a 91 00:05:14,380 --> 00:05:17,720 vymieňať prvky, ktoré sú v zlom poradí. 92 00:05:17,720 --> 00:05:22,380 A to spôsobom, najväčší prvok bude bubliny až do konca. 93 00:05:22,380 --> 00:05:28,070 A zoznam je usporiadaný raz viac prvky boli vymenené. 94 00:05:28,070 --> 00:05:31,920 >> Takže to sú dva príklady druhu algoritmy, ktoré môžete realizovať pre 95 00:05:31,920 --> 00:05:33,230 Program find. 96 00:05:33,230 --> 00:05:37,350 Akonáhle dokončíte triediť, a vy ste vykonané hľadanie, budete hotoví. 97 00:05:37,350 --> 00:05:39,720 Volám sa Zamyla, a to je CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUSIC PLAYBACK]