1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [§ 3] [menej komfortné] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [To je CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Dobre, poďme začať. 5 00:00:10,000 --> 00:00:13,000 Vitajte do týždňa 4 CS50. 6 00:00:13,000 --> 00:00:19,000 Ak ste otvoriť webový prehliadač a otvoriť PSet 3, 7 00:00:19,000 --> 00:00:23,000 Scramble s CS50, budeme začať chodiť 8 00:00:23,000 --> 00:00:26,000 prostredníctvom sekcie otázok tam. 9 00:00:26,000 --> 00:00:32,000 Rovnako ako minulý týždeň, budeme pracovať v CS50 Spaces, 10 00:00:32,000 --> 00:00:35,000 ak budete tiež vytiahnuť, že sa rovnako, 11 00:00:35,000 --> 00:00:43,000 a ak budete pokračovať a navštívte tento odkaz, na ktorý som dostal tu hore. 12 00:00:43,000 --> 00:00:45,000 Je čas začať. 13 00:00:45,000 --> 00:00:51,000 Máme našu malú hi programu tu. Nič blázon. 14 00:00:51,000 --> 00:00:55,000 Jedna z prvých vecí, ktoré chcem urobiť s vami dnes prebrať niekoľko riešení 15 00:00:55,000 --> 00:00:58,000 k problému Set 1, takým príkladom riešenia, 16 00:00:58,000 --> 00:01:03,000 len tak môžete získať pocit, pre to, čo druhy kódu zamestnancov je písanie, 17 00:01:03,000 --> 00:01:07,000 aké študentov kódu ostatných píšu, 18 00:01:07,000 --> 00:01:10,000 a máte sa na to pozrieť, pretože viem, že je to divné 19 00:01:10,000 --> 00:01:14,000 keď zadáte riešenie problému nastavenie a získať pripomienky 20 00:01:14,000 --> 00:01:18,000 na svoje vlastné verziu, ale niekedy je to užitočné vidieť, ako ostatní ľudia robili to, 21 00:01:18,000 --> 00:01:22,000 najmä tie, ktoré sú pekne vyzerajúce. 22 00:01:22,000 --> 00:01:27,000 Pre najviac sa rozdeliť, bol som naozaj ohromený s riešením, ktoré ste produkoval. 23 00:01:27,000 --> 00:01:31,000 Ešte som začal hľadať na zoznam 2s Problem Set, ale v prípade, že ste niečo ako prvý, 24 00:01:31,000 --> 00:01:34,000 Znamená to, že nič, ale dobré veci. 25 00:01:34,000 --> 00:01:40,000 >> Ak sa pozriete na mojej verzii, začnime celú cestu dole na revízie 1, 26 00:01:40,000 --> 00:01:47,000 a budeme sa rýchlo pozrieť na riešenie Mario. 27 00:01:47,000 --> 00:01:54,000 Ak budete ťahať doplnila, tieto programy, ktoré budeme prezentovať sú správne. 28 00:01:54,000 --> 00:01:56,000 Nebolo správnosť problémy s týmito problémami, ale skôr, 29 00:01:56,000 --> 00:01:59,000 chceme hovoriť trochu o rôznych konštrukčných problémov 30 00:01:59,000 --> 00:02:03,000 , Ktoré boli použité tu. 31 00:02:03,000 --> 00:02:08,000 Jedna z vecí, ktorá bola zaujímavá o riešení 32 00:02:08,000 --> 00:02:11,000 je to, že používa tento nový konštrukt s názvom libra definovať, 33 00:02:11,000 --> 00:02:15,000 niekedy tiež označovaná ako hash definovať. 34 00:02:15,000 --> 00:02:18,000 Dovoľte mi, aby som sa zamerať na to tu. 35 00:02:18,000 --> 00:02:24,000 # Define umožňuje dať mená týchto čísel v programe. 36 00:02:24,000 --> 00:02:28,000 V tomto prípade je maximálna výška pyramídy v Mario 37 00:02:28,000 --> 00:02:34,000 bol 23 a skôr než dávať 23 v mojom kóde, 38 00:02:34,000 --> 00:02:37,000 by sme odkazujú na to, ako pevný kódovanie 23 - 39 00:02:37,000 --> 00:02:43,000 Namiesto toho dáva názov MAX_HEIGHT na toto číslo, 40 00:02:43,000 --> 00:02:48,000 tak, aby sa tu v mojom do-while 41 00:02:48,000 --> 00:02:51,000 môžete vlastne sa odkazovať na MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 namiesto toho, aby počet 23 palcov 43 00:02:55,000 --> 00:02:57,000 [Študent] Aká je výhoda robiť, že? 44 00:02:57,000 --> 00:02:59,000 To je veľká otázka. 45 00:02:59,000 --> 00:03:03,000 Jedným z nich je čitateľnosť. 46 00:03:03,000 --> 00:03:08,000 Výhodou použitia tohto # define je čitateľnosť. 47 00:03:08,000 --> 00:03:11,000 Keď čítam tento kód, vidím, čo sa deje. 48 00:03:11,000 --> 00:03:15,000 >> Vidím v tomto stave tu testujeme 49 00:03:15,000 --> 00:03:19,000 pre výšku je <0, ktoré sme tiež mohol definované 50 00:03:19,000 --> 00:03:22,000 byť minimálna výška alebo min výška. 51 00:03:22,000 --> 00:03:25,000 Ďalšou výhodou je to, že som si potom prečítať zvyšok riadku vidieť 52 00:03:25,000 --> 00:03:30,000 že sme tiež kontrolu, aby sa ubezpečil, že výška nie je väčšia než výška max, 53 00:03:30,000 --> 00:03:35,000 pretože budeme pokračovať, zatiaľ čo výška je väčšia než výška max 54 00:03:35,000 --> 00:03:40,000 Ďalšou výhodou je, keď som vzdialite trochu sem- 55 00:03:40,000 --> 00:03:49,000 keď som spustiť tento program, a ja ho spustiť, povedzme, s 23 práve teraz, 56 00:03:49,000 --> 00:03:52,000 vám vypíše všetky riadky 23 len ako, že. 57 00:03:52,000 --> 00:03:54,000 Ale povedať, že som chcel zmeniť výšku max, 58 00:03:54,000 --> 00:03:57,000 a teraz chcem obmedziť maximálnu výšku pyramíd 59 00:03:57,000 --> 00:04:06,000 byť iba povedať-man, ktorý bol zdesený. 60 00:04:06,000 --> 00:04:14,000 # Include , # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 a povedzme, že sme chceli nastaviť výšku 10. 62 00:04:18,000 --> 00:04:22,000 V tomto okamihu, všetko, čo som musel urobiť, bolo zmeniť v tomto jednom mieste. 63 00:04:22,000 --> 00:04:27,000 Môžem prekompilovať kód, a teraz, keď sa snažím a zadajte 12, 64 00:04:27,000 --> 00:04:30,000 to bude výzva ma znovu. 65 00:04:30,000 --> 00:04:33,000 V tomto prípade, sme iba pomocou MAX_HEIGHT raz. 66 00:04:33,000 --> 00:04:37,000 Nie je to tak veľký problémov ísť 67 00:04:37,000 --> 00:04:40,000 a zmeniť ju v cykle while, ak potrebujete. 68 00:04:40,000 --> 00:04:44,000 Ale v programoch, kde ste odkazujúce na rovnakej magické číslo 69 00:04:44,000 --> 00:04:47,000 znovu a znovu, to # define mechanizmus je naozaj šikovný 70 00:04:47,000 --> 00:04:52,000 pretože stačí zmeniť to raz v hornej časti súboru je zvyčajne kam ste ich uložili, 71 00:04:52,000 --> 00:04:57,000 a zmena presakuje cez zvyšok súboru. 72 00:04:57,000 --> 00:05:02,000 >> Ďalšie veci, ktoré som chcel poznamenať, v tejto úlohe, že som si myslel, vyzeral naozaj pekné, 73 00:05:02,000 --> 00:05:05,000 jeden bol pomenovanie premenných. 74 00:05:05,000 --> 00:05:14,000 Vidíte tu, že máme celočíselné premenné s názvom riadku a tzv výšku. 75 00:05:14,000 --> 00:05:20,000 Priestory, krížiky, to pomáha, aby sa kód trochu čitateľnejšie, 76 00:05:20,000 --> 00:05:25,000 robí to trochu zrozumiteľnejšie, čo sa vlastne deje. 77 00:05:25,000 --> 00:05:31,000 Toto je v kontraste k používaniu, povedzme, náhodná písmená 78 00:05:31,000 --> 00:05:35,000 alebo len hatmatilka úplne. 79 00:05:35,000 --> 00:05:39,000 Posledná vec, ktorú som si zdôrazniť, je, že v pre slučky, 80 00:05:39,000 --> 00:05:45,000 často tieto Iterator premenné, tieto pulty, ktoré používate vo vašej pre slučky, 81 00:05:45,000 --> 00:05:51,000 je to štandardné a konvenčné štart je buď i a potom j a potom k 82 00:05:51,000 --> 00:05:54,000 a ísť na odtiaľ, ak potrebujete viac premenných, 83 00:05:54,000 --> 00:05:56,000 a to je len konvencie. 84 00:05:56,000 --> 00:05:58,000 Existuje veľa dohovorov. 85 00:05:58,000 --> 00:06:00,000 To závisí na programovacom jazyku, ktorý používate. 86 00:06:00,000 --> 00:06:04,000 Ale v C, sme zvyčajne začínajú s i 87 00:06:04,000 --> 00:06:08,000 To nedáva zmysel používať, povedzme, alebo b 88 00:06:08,000 --> 00:06:13,000 v závislosti na situácii. 89 00:06:13,000 --> 00:06:15,000 To je to pre tento jeden. 90 00:06:15,000 --> 00:06:25,000 Ak teraz vytiahnuť Revízia 2, uvidíte ďalšie Mario, 91 00:06:25,000 --> 00:06:29,000 a toto je podobná tej druhej, ktoré sme práve videli, 92 00:06:29,000 --> 00:06:32,000 ale to robí niečo celkom fajn. 93 00:06:32,000 --> 00:06:38,000 Ak sa pozrieme v tejto sekcii tu vnútri vnútornej slučky for, 94 00:06:38,000 --> 00:06:44,000 že používate nejaký šialený hľadáte syntaxe tu práve v tomto odbore. 95 00:06:44,000 --> 00:06:47,000 Toto sa nazýva ternárnu operátor. 96 00:06:47,000 --> 00:06:53,000 Ak je else zhustené do jedného riadku. 97 00:06:53,000 --> 00:06:57,000 Podmienkou je táto časť v zátvorkách. 98 00:06:57,000 --> 00:07:05,000 Je to ako tvrdiť, ak j 00:07:10,000 A čo potom obsah, že ak blok by byť so priestor 100 00:07:10,000 --> 00:07:16,000 a potom obsah toho, čo iného by sa táto #. 101 00:07:16,000 --> 00:07:20,000 Je to v podstate priradenie priestor do tejto premennej. 102 00:07:20,000 --> 00:07:24,000 Je to uvedenie priestorov v obsahu bloku premenné, 103 00:07:24,000 --> 00:07:29,000 Ak je táto podmienka splnená, a ak podmienka nie je splnená, 104 00:07:29,000 --> 00:07:32,000 potom blok premenná dostane to #. 105 00:07:32,000 --> 00:07:37,000 A potom, samozrejme, namiesto toho, aby budovanie celý reťazec 106 00:07:37,000 --> 00:07:43,000 a tlač všetko von na konci toto riešenie vytlačí to jeden znak v čase. 107 00:07:43,000 --> 00:07:48,000 Celkom v pohode. 108 00:07:48,000 --> 00:07:53,000 >> Ešte pár vecí, ktoré sa pozerajú na. Budeme prejsť na chamtivý. 109 00:07:53,000 --> 00:07:58,000 Teraz, keď sa pozrieme na chamtivý, to prvé riešenie 110 00:07:58,000 --> 00:08:00,000 používa tieto # definuje celkom dosť. 111 00:08:00,000 --> 00:08:06,000 Máme ešte jednu konštantu definovanú pre každý z rôznych čísel v tomto programe. 112 00:08:06,000 --> 00:08:12,000 Máme jednu pre centov za dolár, jeden pre štvrťrok, desaťhalierniky, Nickels, a haliere, 113 00:08:12,000 --> 00:08:15,000 a teraz, keď sme sa posunúť nadol a kód prečítať, 114 00:08:15,000 --> 00:08:22,000 môžeme vidieť štandardné do-while slučky tlač všetko von. 115 00:08:22,000 --> 00:08:25,000 Druh jadru tohto problému bolo si uvedomil, že 116 00:08:25,000 --> 00:08:29,000 ste potrebovali previesť plavák, ktorý budete čítať od užívateľa na celé číslo 117 00:08:29,000 --> 00:08:32,000 presne si to spočítajte, a to je preto, že 118 00:08:32,000 --> 00:08:36,000 s plávajúcou desatinnou čiarkou, ako by sme hovorili o v prednáške krátko, 119 00:08:36,000 --> 00:08:41,000 to nie je možné presne vyjadriť každý jednu hodnotu na číselnej osi 120 00:08:41,000 --> 00:08:47,000 pretože existuje nekonečne veľa hodnôt medzi 3 a, povedzme, 3,1 i 121 00:08:47,000 --> 00:08:54,000 Môžete mať 3,01 a 3,001 a 3,0001, a môžete ísť ďalej. 122 00:08:54,000 --> 00:09:00,000 Ukázalo sa, že vždy, keď pracujete s peniazmi, si často chcete previesť 123 00:09:00,000 --> 00:09:05,000 do formátu integer, takže nie ste straty haliere a také veci. 124 00:09:05,000 --> 00:09:09,000 Robiť, že a zaokrúhlenie bol kľúč. 125 00:09:09,000 --> 00:09:14,000 Toto riešenie používa dokonale jednoduchý, skvelý algoritmus, 126 00:09:14,000 --> 00:09:17,000 ktoré znížia počet zostávajúcich centov, najprv štvrtiny, 127 00:09:17,000 --> 00:09:19,000 potom desaťhalierniky, potom Nickels, potom mincí, 128 00:09:19,000 --> 00:09:24,000 a pridávať k počtu mincí každý čas. 129 00:09:24,000 --> 00:09:31,000 >> Ďalším riešením, ktoré uvidíme, ako som oddialiť a ísť k revízii 4, 130 00:09:31,000 --> 00:09:40,000 mal veľmi podobný začiatok, ale namiesto toho používa div a mod 131 00:09:40,000 --> 00:09:44,000 priamo tu pre výpočet počtu centov. 132 00:09:44,000 --> 00:09:50,000 Toto je počet štvrtiny sa rovná počtu centov delený 25, 133 00:09:50,000 --> 00:09:53,000 a dôvod, prečo to funguje, je preto, že robíme celočíselné delenie, 134 00:09:53,000 --> 00:09:58,000 tak je to vyradenie všetky zvyšky. 135 00:09:58,000 --> 00:10:02,000 [Študent] Musíme ju komentovať vyhľadávania? 136 00:10:02,000 --> 00:10:05,000 To naozaj záleží. 137 00:10:05,000 --> 00:10:08,000 [Študent] Si komentovať viac než kód tu. 138 00:10:08,000 --> 00:10:16,000 Jo, a tak, že sú banda rôzne filozofie na túto tému. 139 00:10:16,000 --> 00:10:21,000 Môj osobný filozofia je, že váš kód je naozaj pravda, 140 00:10:21,000 --> 00:10:24,000 ako váš kód je to, čo je skutočne vykonávajúci na počítači, 141 00:10:24,000 --> 00:10:29,000 a tak váš kód by mal byť čitateľné a čo najprehľadnejšie, že nebude vyžadovať toľko komentárov. 142 00:10:29,000 --> 00:10:33,000 To znamená, že keď robíte veci, ktoré sú trochu zložitejšie matematicky 143 00:10:33,000 --> 00:10:38,000 alebo algoritmické, je dobré, aby sa vyjadril ty, takže môžete 144 00:10:38,000 --> 00:10:43,000 pridať ďalší rozmer, ďalšiu vrstvu na toho, kto číta váš kód. 145 00:10:43,000 --> 00:10:49,000 V týchto riešení, často sú komentované viac ťažko len preto, že 146 00:10:49,000 --> 00:10:52,000 Chceme byť schopní distribuovať a ľudia vyzdvihnúť 147 00:10:52,000 --> 00:10:56,000 a čítať je celkom ľahko. 148 00:10:56,000 --> 00:11:05,000 Ale určite by som sa zhodujú, že je to ťažké. 149 00:11:05,000 --> 00:11:07,000 [Študent] Ale v prípade pochybností, ísť ťažšie? 150 00:11:07,000 --> 00:11:10,000 Ak ste na pochybách, choďte ťažšie. 151 00:11:10,000 --> 00:11:17,000 Niektorí ľudia budú niekedy hovoria vrátenie 0, alebo niečo také. 152 00:11:17,000 --> 00:11:20,000 Myslím, že je to smiešne komentár. 153 00:11:20,000 --> 00:11:22,000 Je zrejmé, že to, čo sa deje. 154 00:11:22,000 --> 00:11:25,000 Nepotrebujem English mi povedať, že. 155 00:11:25,000 --> 00:11:28,000 Niekedy ľudia budú písať veci ako "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 To je rozkošný, ale aj ne- 157 00:11:32,000 --> 00:11:35,000 že to nerobí rozdiel medzi komentovanie bodov, alebo nie. 158 00:11:35,000 --> 00:11:41,000 Tieto druhy komentáre sú len ha, ha. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> V tomto bode, poďme začať pracovať na probléme Nastaviť 3 časť otázok. 161 00:11:48,000 --> 00:11:52,000 Ak ste stlačil znova, 162 00:11:52,000 --> 00:11:55,000 rovnako ako u minulého týždňa, nebudeme sledovať šortky v tejto sekcii. 163 00:11:55,000 --> 00:12:00,000 Necháme vás chlapi, že vo svojom voľnom čase, a hovoriť o otázkach. 164 00:12:00,000 --> 00:12:05,000 Ale teraz v tejto sekcii sa budeme venovať trochu viac času 165 00:12:05,000 --> 00:12:11,000 hovorí o menej kódovacích základy 166 00:12:11,000 --> 00:12:15,000 ako sme to urobili minulý týždeň, a namiesto toho, budeme viac sústrediť na 167 00:12:15,000 --> 00:12:22,000 trochu viac teórie, tak hovorí o binárne vyhľadávanie a potom triedenie. 168 00:12:22,000 --> 00:12:27,000 Z tých z vás, ktorí boli po spolu s prednáškou, 169 00:12:27,000 --> 00:12:30,000 môže niekto dať mi rekapituláciu, aký je rozdiel 170 00:12:30,000 --> 00:12:35,000 medzi binárne vyhľadávanie a lineárne vyhľadávanie? 171 00:12:35,000 --> 00:12:37,000 Čo sa deje? Iste. 172 00:12:37,000 --> 00:12:42,000 Lineárne vyhľadávanie prehľadá každý prvok v triedenom zozname 173 00:12:42,000 --> 00:12:45,000 jeden po druhom po druhom jeden po druhom, 174 00:12:45,000 --> 00:12:50,000 a binárne vyhľadávacie rozdeľuje zoznam na 2 skupiny, 175 00:12:50,000 --> 00:12:57,000 kontroly, či klávesy hodnoty, ktoré hľadáte, je väčšia alebo menšia ako na stred hodnota 176 00:12:57,000 --> 00:13:00,000 že ste práve našli, a ak je to menej, ako to ide s nižším zoznamu 177 00:13:00,000 --> 00:13:03,000 a potom rozdelí to znovu, to isté funkcie 178 00:13:03,000 --> 00:13:07,000 celú cestu dole, kým sa nájde stred sa rovná hodnote samotného. 179 00:13:07,000 --> 00:13:10,000 Právo. 180 00:13:10,000 --> 00:13:12,000 >> Prečo nás zaujíma? 181 00:13:12,000 --> 00:13:20,000 Prečo hovoríme o binárne vyhľadávanie oproti lineárnej hľadanie? 182 00:13:20,000 --> 00:13:22,000 Jo. 183 00:13:22,000 --> 00:13:24,000 Binárne je oveľa rýchlejší, takže ak zdvojnásobíte veľkosť problému 184 00:13:24,000 --> 00:13:27,000 trvá ešte jeden krok, skôr než dvakrát toľko. 185 00:13:27,000 --> 00:13:29,000 Presne tak. 186 00:13:29,000 --> 00:13:31,000 To je skvelý odpoveď. 187 00:13:31,000 --> 00:13:36,000 Lineárne vyhľadávanie je veľmi kontrole jeden prvok v čase, 188 00:13:36,000 --> 00:13:39,000 a ako sme videli v prvý deň prednášky 189 00:13:39,000 --> 00:13:42,000 keď Dávid išiel cez jeho príklade telefónneho zoznamu 190 00:13:42,000 --> 00:13:45,000 a vytrhol jednu stránku z telefónneho zoznamu v čase 191 00:13:45,000 --> 00:13:47,000 a stále robí, že znovu a znovu a znovu, 192 00:13:47,000 --> 00:13:51,000 to bude trvať ho naozaj dlho nájsť nikoho v telefónnom zozname, 193 00:13:51,000 --> 00:13:55,000 ak, samozrejme, hľadal niekoho na samom začiatku abecedy. 194 00:13:55,000 --> 00:14:00,000 S binárne vyhľadávanie, môžete ísť oveľa rýchlejšie, 195 00:14:00,000 --> 00:14:05,000 a nie je to len dvakrát tak rýchlo alebo 3 krát tak rýchlo, alebo 4 krát tak rýchlo. 196 00:14:05,000 --> 00:14:13,000 Ale problém dostane menšie a menšie a menšie oveľa rýchlejšie. 197 00:14:13,000 --> 00:14:17,000 Pre ilustráciu, začneme hovoriť o tom, čo sa deje 198 00:14:17,000 --> 00:14:21,000 keď píšeme binárne vyhľadávanie. 199 00:14:21,000 --> 00:14:27,000 Problém po ruke, je, že keď mám rad čísel, 200 00:14:27,000 --> 00:14:40,000 hovoria, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 a potom 9 s tonou 0s po tom, 202 00:14:47,000 --> 00:14:52,000 chceme byť schopní zistiť, naozaj rýchlo, čo je v 203 00:14:52,000 --> 00:14:57,000 Toto pole čísel. 204 00:14:57,000 --> 00:15:00,000 Viem, že to vyzerá trochu hlúpo a trochu neprirodzený, 205 00:15:00,000 --> 00:15:02,000 pretože teraz je to. 206 00:15:02,000 --> 00:15:05,000 Máme pole, ktoré nemá veľmi veľa prvkov v ňom, 207 00:15:05,000 --> 00:15:08,000 a keď sa spýtam, jeden z vás prísť na to, či je alebo nie je 208 00:15:08,000 --> 00:15:11,000 23 je v poli, môže to urobiť celkom rýchlo 209 00:15:11,000 --> 00:15:16,000 len tým, že sa pozrel na to a hovoril mi áno alebo nie. 210 00:15:16,000 --> 00:15:20,000 Analógový, aby zvážila, predstavte si, že by tomu tak bolo, povedzme, 211 00:15:20,000 --> 00:15:27,000 tabuľkového procesora Excel s 10.000 riadkov, 20.000 riadky. 212 00:15:27,000 --> 00:15:31,000 Samozrejme, môžete to urobiť na príkazové F alebo ovládacie F a pozrite sa niečo vymyslieť. 213 00:15:31,000 --> 00:15:33,000 Môžete tiež použiť filtre a vyhľadávania ďalšie veci, 214 00:15:33,000 --> 00:15:37,000 ale ak ste mali pozerať cez ten súbor riadok po riadku po riadku, 215 00:15:37,000 --> 00:15:40,000 to bude trvať vám dlho nájsť. 216 00:15:40,000 --> 00:15:42,000 Je to niečo ako v príklade telefónneho zoznamu, aj tam, kde 217 00:15:42,000 --> 00:15:44,000 nikto sa pozerá cez jedno telefónne stránku knihy naraz. 218 00:15:44,000 --> 00:15:47,000 Typicky, oni otvoriť do stredu, 219 00:15:47,000 --> 00:15:50,000 alebo v prípade mnohých telefónnych zoznamov a slovníkov kde 220 00:15:50,000 --> 00:15:54,000 ste skutočne to nedočkavý na prvé písmeno, 221 00:15:54,000 --> 00:16:01,000 preklopeniu tohto prvého písmena a otvoriť a začať prechádzať tam. 222 00:16:01,000 --> 00:16:03,000 >> Pripomeňte mi svoje meno znovu. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Rovnako ako Sam povedal, že lineárny procesu hľadania bude naozaj pomalé, 225 00:16:11,000 --> 00:16:15,000 a namiesto toho s binárne vyhľadávanie, ako to funguje, je, že 226 00:16:15,000 --> 00:16:21,000 zakaždým, keď sme sa prejsť iterácie nášho hľadania algoritmu, 227 00:16:21,000 --> 00:16:27,000 budeme rozdeliť zoznam na polovicu, v podstate, 228 00:16:27,000 --> 00:16:33,000 do dvoch menších zoznamov. 229 00:16:33,000 --> 00:16:39,000 A potom na ďalší iterácii slučky, budeme rozdeľovať znova 230 00:16:39,000 --> 00:16:44,000 do iných menších zoznamov. 231 00:16:44,000 --> 00:16:48,000 Ako môžete vidieť, problém je čím ďalej menší a menší 232 00:16:48,000 --> 00:16:55,000 pretože zachovávame škrty polovicu zoznamu zakaždým. 233 00:16:55,000 --> 00:16:59,000 Ako to discard prácu? 234 00:16:59,000 --> 00:17:05,000 Rovnako ako pripomienka, čo budeme robiť, keď sme boli počítač 235 00:17:05,000 --> 00:17:11,000 a my sme boli, povedzme, vyhľadávame pre číslo 5 v tomto zozname 236 00:17:11,000 --> 00:17:15,000 je to, že by sme si vybrať číslo uprostred. 237 00:17:15,000 --> 00:17:26,000 V strede tohto zoznamu, pretože tam sú 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 čísel, 238 00:17:26,000 --> 00:17:32,000 by sme vybrať číslo buď na 4. mieste alebo na 5. pozícii, 239 00:17:32,000 --> 00:17:38,000 a my by sme zavolať, že uprostred nášho zoznamu. 240 00:17:38,000 --> 00:17:42,000 Vyberte číslo uprostred. 241 00:17:42,000 --> 00:17:51,000 Potom, rovnako ako Sam povedal, budeme testovať, či toto číslo sa rovná 242 00:17:51,000 --> 00:17:59,000 na číslo, ktoré chceme získať, alebo si požadované číslo. 243 00:17:59,000 --> 00:18:06,000 Ak je to rovnaké, potom sme ho našli. Vyhrali sme. 244 00:18:06,000 --> 00:18:12,000 Ak to nie je rovnaké, potom existuje pár prípadov. 245 00:18:12,000 --> 00:18:15,000 Tieto dva prípady sú buď číslo musí byť väčší ako počet tých, ktoré sa práve pozeráte, 246 00:18:15,000 --> 00:18:19,000 alebo je to menej než. 247 00:18:19,000 --> 00:18:25,000 Ak je to väčšia, sme sa presunúť doprava. 248 00:18:25,000 --> 00:18:33,000 A ak je to menej, sme sa presunúť doľava. 249 00:18:33,000 --> 00:18:41,000 A potom sme celý proces opakovať znovu 250 00:18:41,000 --> 00:18:48,000 buď na pravej, alebo na ľavej polovice polovice zoznamu. 251 00:18:48,000 --> 00:18:51,000 >> Prvý problém v dnešnom oddielu je zistiť, 252 00:18:51,000 --> 00:18:55,000 ako môžeme skutočne začať vyjadrovať toto v C kód. 253 00:18:55,000 --> 00:18:58,000 Máme pseudokódu tu. 254 00:18:58,000 --> 00:19:04,000 Čo budeme začať robiť je, že som si vytiahnuť úplne nový priestor, 255 00:19:04,000 --> 00:19:09,000 uložiť túto revíziu tak, že máme tieto poznámky na neskôr, 256 00:19:09,000 --> 00:19:20,000 budeme mazať, to všetko a potom skopírovať a vložiť z problémového súboru 257 00:19:20,000 --> 00:19:26,000 táto informácia do našich priestorov, a dúfajme, že to nepraskne. 258 00:19:26,000 --> 00:19:28,000 Perfect. 259 00:19:28,000 --> 00:19:33,000 Ak ste všetko robiť, skopírujte a vložte tento kód do nového priestoru, 260 00:19:33,000 --> 00:19:43,000 do prázdnu. 261 00:19:43,000 --> 00:19:47,000 Poďme skúsiť Daniel. Ak skompilovať a spustiť tento program, to funguje? 262 00:19:47,000 --> 00:19:49,000 Nie >> Čo to hovorí? 263 00:19:49,000 --> 00:19:53,000 To hovorí, že ovládanie dosiahne konca non-void funkcie. 264 00:19:53,000 --> 00:19:55,000 Jo, tak mi dovoľte skúste ju spustiť. 265 00:19:55,000 --> 00:19:59,000 Už ste videli toto? Viete, čo to znamená? 266 00:19:59,000 --> 00:20:01,000 Dobre, poďme rozobrať to trochu. 267 00:20:01,000 --> 00:20:10,000 Je to povedal na file.c na riadku 9, stĺpec 1 máme chybu, rovnako ako ste povedal, 268 00:20:10,000 --> 00:20:16,000 a hovorí, že je to vyplývajúce z chyby varovania a spiatočnej typu varovanie. 269 00:20:16,000 --> 00:20:18,000 Vyzerá to, že sa niečo deje s návratový typ, ktorý dáva zmysel. 270 00:20:18,000 --> 00:20:21,000 Máme non-void funkciu, čo znamená, že máme funkciu 271 00:20:21,000 --> 00:20:24,000 že nevracia neplatné. 272 00:20:24,000 --> 00:20:27,000 Void funkcia je ten, ktorý vyzerá takto: 273 00:20:27,000 --> 00:20:35,000 void foo (), a je to neplatná, pretože návratový typ je void, 274 00:20:35,000 --> 00:20:38,000 čo znamená, že ak by sme mali niečo tu 275 00:20:38,000 --> 00:20:45,000 ako návrat 1, mali by sme sa chyba kompilátora pre to. 276 00:20:45,000 --> 00:20:49,000 Avšak, máme non-void funkcie. 277 00:20:49,000 --> 00:20:51,000 Naše non-void funkcia v tomto prípade je naša vyhľadávacie funkcie 278 00:20:51,000 --> 00:20:56,000 pretože má návratový typ bool. 279 00:20:56,000 --> 00:20:59,000 Keď to hovorí, že kontrolné dosiahne koniec non-void funkcie, 280 00:20:59,000 --> 00:21:02,000 je to preto, že hľadanie nemá return. 281 00:21:02,000 --> 00:21:04,000 Nie je to vracia nič typu bool. 282 00:21:04,000 --> 00:21:09,000 >> Môžeme opraviť to, a čo vy na to 283 00:21:09,000 --> 00:21:13,000 vyhľadávanie by sa mal vrátiť v predvolenom nastavení? 284 00:21:13,000 --> 00:21:16,000 Aký by mal byť predvolený návratová hodnota hľadanie? 285 00:21:16,000 --> 00:21:19,000 Vzhľadom k tomu, že to, čo môžeme dať na koniec. 286 00:21:19,000 --> 00:21:21,000 Charlotte, máš nejaké-? 287 00:21:21,000 --> 00:21:23,000 Pravda alebo lož? >> Pravda alebo lož. 288 00:21:23,000 --> 00:21:26,000 Ktorý z nich? 289 00:21:26,000 --> 00:21:28,000 False. Neviem. 290 00:21:28,000 --> 00:21:30,000 False? Poďme to skúsiť. 291 00:21:30,000 --> 00:21:32,000 Prečo si to return false? To je skvelé intuíciu. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Neviem. 293 00:21:35,000 --> 00:21:39,000 Budeme sa vrátiť false v tomto prípade, pretože to bude náš východiskový 294 00:21:39,000 --> 00:21:44,000 ak z nejakého dôvodu je zoznam prázdny, alebo je ihla 295 00:21:44,000 --> 00:21:46,000 že sme hľadali neexistuje. 296 00:21:46,000 --> 00:21:50,000 Potom na samom konci, keď nemáme vráti true skôr v tejto funkcii, 297 00:21:50,000 --> 00:21:55,000 vždy vieme, že táto funkcia bude hovoriť Nie, to nie je v poli. 298 00:21:55,000 --> 00:21:58,000 Nie je to v kope sena. 299 00:21:58,000 --> 00:22:03,000 Teraz, keď sme sa zostaviť a spustiť to, dovoľte mi, aby som uložiť to tak môžeme vytiahnuť ho hore. 300 00:22:03,000 --> 00:22:08,000 Teraz, keď sme sa zostaviť a spustiť náš program, buduje. 301 00:22:08,000 --> 00:22:12,000 Dostaneme našu malú riadku. 302 00:22:12,000 --> 00:22:20,000 Ak som trafil 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Nebolo vytlačiť nič. Vyzerá to, že všetko skončilo dobre. 304 00:22:25,000 --> 00:22:35,000 Musíme vyplniť tento palcov 305 00:22:35,000 --> 00:22:39,000 Hovorili sme o tom algoritmu v pseudokódu trochu skôr. 306 00:22:39,000 --> 00:22:44,000 Ukážte, uložte tento, 307 00:22:44,000 --> 00:22:49,000 a ja vytiahnuť, že algoritmus opäť prebudí. 308 00:22:49,000 --> 00:22:51,000 Ideme toho chlapa. Nie. 309 00:22:51,000 --> 00:22:58,000 Tu to je. 310 00:22:58,000 --> 00:23:03,000 Ako to urobíme? 311 00:23:03,000 --> 00:23:11,000 Čo by byť dobrá stratégia pre rozjazd tento kód? 312 00:23:11,000 --> 00:23:16,000 Musíte vybrať číslo uprostred. 313 00:23:16,000 --> 00:23:23,000 Ako sme si vybrať číslo uprostred poľa? 314 00:23:23,000 --> 00:23:25,000 Nejaké návrhy? 315 00:23:25,000 --> 00:23:27,000 [Študent] strlen deleno 2. 316 00:23:27,000 --> 00:23:32,000 Strlen deleno 2. To je veľký. 317 00:23:32,000 --> 00:23:35,000 Strlen práce s špeciálnymi druhmi polí. 318 00:23:35,000 --> 00:23:38,000 Aké druhy polí? 319 00:23:38,000 --> 00:23:44,000 String pole, pole znakov. 320 00:23:44,000 --> 00:23:48,000 Je to ten istý druh konceptu, ktorý chceme použiť, 321 00:23:48,000 --> 00:23:52,000 ale nemôžeme použiť strlen, pretože nemáme pole znakov. 322 00:23:52,000 --> 00:23:55,000 Máme rad ints. 323 00:23:55,000 --> 00:23:58,000 Ale čo strlen si pre nás? 324 00:23:58,000 --> 00:24:01,000 Viete, čo to bude pre nás? 325 00:24:01,000 --> 00:24:03,000 [Študent] strlen získa nám dĺžku. 326 00:24:03,000 --> 00:24:05,000 Presne tak, to bude nám dĺžku. 327 00:24:05,000 --> 00:24:09,000 Strlen dostane dĺžku poľa pre nás. 328 00:24:09,000 --> 00:24:14,000 >> Ako sme sa dostali, že v našom programe binárne vyhľadávanie? 329 00:24:14,000 --> 00:24:18,000 Ako by ste si dĺžku poľa? 330 00:24:18,000 --> 00:24:20,000 [Študent] strlen? 331 00:24:20,000 --> 00:24:25,000 Môžete si dĺžku správne formátovaný poľa reťazca C s strlen. 332 00:24:25,000 --> 00:24:31,000 Problém však je, že nemáme pole reťazcov. 333 00:24:31,000 --> 00:24:36,000 Ak sa pozrieme späť na tento kód, máme túto integer poľa. 334 00:24:36,000 --> 00:24:38,000 Ako môžeme vedieť, ako dlho to je? 335 00:24:38,000 --> 00:24:44,000 [Študent] Je tam ekvivalent jeden pre koncový bod, ako je int l alebo tak niečo? 336 00:24:44,000 --> 00:24:49,000 Ukazuje sa, že v skutočnosti nie je, a tak v istom zmysle to je 337 00:24:49,000 --> 00:24:52,000 jedna z tých vecí, ktoré je len dobré vedieť o C, 338 00:24:52,000 --> 00:24:57,000 že neexistuje žiadny spôsob, ako dostať dĺžku poľa 339 00:24:57,000 --> 00:24:59,000 ak všetko, čo som vám je pole. 340 00:24:59,000 --> 00:25:02,000 Dôvod, prečo to funguje s reťazcami, dôvod strlen práce, 341 00:25:02,000 --> 00:25:06,000 Je tomu tak preto, ak reťazec je správny formát, 342 00:25:06,000 --> 00:25:12,000 bude mať zvláštne, že \ 0 znak na samom konci. 343 00:25:12,000 --> 00:25:16,000 >> Môžete si tiež predstaviť, ak máte nesprávne formátovaný reťazec 344 00:25:16,000 --> 00:25:20,000 a nie je tam žiadny \ 0 znak tam, potom celá vec nefunguje. 345 00:25:20,000 --> 00:25:22,000 [Študent] Môžete pridať \ 0? 346 00:25:22,000 --> 00:25:24,000 My by v tomto prípade. 347 00:25:24,000 --> 00:25:29,000 Mohli by sme pridať nejaký \ 0 348 00:25:29,000 --> 00:25:33,000 alebo nejaký znamenať charakter a potom ju využiť. 349 00:25:33,000 --> 00:25:36,000 Ale to nie je úplne to fungovať 350 00:25:36,000 --> 00:25:40,000 pretože \ 0 je pre char typu, 351 00:25:40,000 --> 00:25:43,000 a tu máme ints. 352 00:25:43,000 --> 00:25:46,000 Druhá vec je, ak by sme mali použiť špeciálne hodnotu 353 00:25:46,000 --> 00:25:49,000 ako -1 označiť koniec poľa 354 00:25:49,000 --> 00:25:54,000 potom by sme mohli po uložení -1 v našich celočíselných polí. 355 00:25:54,000 --> 00:25:56,000 Mali by sme byť prilepené. 356 00:25:56,000 --> 00:26:00,000 Ukazuje sa, že jediný spôsob, ako sa dostať dĺžku 357 00:26:00,000 --> 00:26:03,000 z poľa v C je skutočne pamätať 358 00:26:03,000 --> 00:26:08,000 keď ho nastaviť a potom prejsť okolo s poli 359 00:26:08,000 --> 00:26:14,000 tak, že kedykoľvek mám funkciu, ktorá to urobí nejakú prácu 360 00:26:14,000 --> 00:26:18,000 na pole celých čísel alebo plavákmi alebo štvorhra, alebo to, čo ste, 361 00:26:18,000 --> 00:26:22,000 Tiež som dať táto funkcia Array na dĺžku, 362 00:26:22,000 --> 00:26:26,000 a to je presne to, čo sme urobili tu v vyhľadávacie funkcie. 363 00:26:26,000 --> 00:26:30,000 Keď sa pozriete, čo sme urobili, keď sme sa prejsť v našom poli tu, 364 00:26:30,000 --> 00:26:36,000 sme tiež prejsť v dĺžke, veľkosti. 365 00:26:36,000 --> 00:26:41,000 Proste sa to stane, že sme nazvali túto premennú tu, 366 00:26:41,000 --> 00:26:43,000 tento parameter alebo argument. 367 00:26:43,000 --> 00:26:46,000 To sa nazýva funkcia, je zoznam argument alebo parameter zoznam, 368 00:26:46,000 --> 00:26:51,000 a títo sú tiež nazývaní argumenty alebo parametre. 369 00:26:51,000 --> 00:26:53,000 Ľudia používajú rôzne termíny v rôznych časoch. 370 00:26:53,000 --> 00:26:55,000 Niekedy striedať je sám. 371 00:26:55,000 --> 00:27:00,000 To len tak sa stane, že táto premenná je tu pomenované podobne 372 00:27:00,000 --> 00:27:03,000 k tomu # define tu. 373 00:27:03,000 --> 00:27:06,000 Ale nie sú to isté. 374 00:27:06,000 --> 00:27:11,000 Kapitalizácia záleží. 375 00:27:11,000 --> 00:27:14,000 >> Ak sa pozriete na to, čo sa tu deje, prehlasujeme 376 00:27:14,000 --> 00:27:18,000 naše int pole, ktoré sme len čísla. 377 00:27:18,000 --> 00:27:23,000 Dali sme to na našu veľkosť, ktorá zodpovedá nášmu # definovať až na vrchole. 378 00:27:23,000 --> 00:27:27,000 Bude to byť 8. 379 00:27:27,000 --> 00:27:35,000 A potom, keď sme sa potom zavolať na našu funkciu vyhľadávania dole, 380 00:27:35,000 --> 00:27:40,000 sme sa prejsť v počte chceme hľadať, ktoré sme vyzvaní, 381 00:27:40,000 --> 00:27:43,000 dostal od užívateľa. 382 00:27:43,000 --> 00:27:46,000 Míňame v poli, tento čísla, 383 00:27:46,000 --> 00:27:51,000 a potom tiež musíme prejsť vo veľkosti poľa, 384 00:27:51,000 --> 00:27:57,000 a potom je hodnota veľkosti 8 je uložená 385 00:27:57,000 --> 00:28:01,000 alebo odovzdané k tejto celočíselné premenné nazvanej veľkosti. 386 00:28:01,000 --> 00:28:08,000 Máme veľkosť poľa. 387 00:28:08,000 --> 00:28:11,000 Teraz, keď sa vrátime k tomu, čo hovorili predtým, 388 00:28:11,000 --> 00:28:14,000 Myslím, že Missy vychovaný myšlienku, že to, čo sme potrebovali urobiť, je dostať dĺžku poľa 389 00:28:14,000 --> 00:28:20,000 a rozdeliť ju 2, a že nám dá polovicu. 390 00:28:20,000 --> 00:28:22,000 Poďme sa pozrieť,. 391 00:28:22,000 --> 00:28:25,000 Môžem mať niekto napísať, a uložte ho vo svojom vesmíre? 392 00:28:25,000 --> 00:28:27,000 Ako o Leila? 393 00:28:27,000 --> 00:28:31,000 Môžem mať píšete to v? 394 00:28:31,000 --> 00:28:35,000 Napíšte prvý riadok, kde budete mať dĺžku poľa a získať polovicu 395 00:28:35,000 --> 00:28:41,000 a uložiť ho do novej premennej. 396 00:28:41,000 --> 00:28:44,000 Dám vám pár sekúnd. Ste pripravení? 397 00:28:44,000 --> 00:28:46,000 [Študent nepočuteľný] 398 00:28:46,000 --> 00:28:50,000 Iste, mohol som ťa vypočítať stred 399 00:28:50,000 --> 00:28:55,000 z Haystack poľa vnútri vyhľadávacie funkcie 400 00:28:55,000 --> 00:29:03,000 pomocou dĺžku Haystack poľa, čo je veľkosť variabilný? 401 00:29:03,000 --> 00:29:08,000 Nič zložité tu. 402 00:29:08,000 --> 00:29:12,000 [Leila] Len veľkosť / 2 a just- 403 00:29:12,000 --> 00:29:17,000 A uložiť ho, a stlačte tlačidlo Uložiť tu hore, 404 00:29:17,000 --> 00:29:19,000 a my vytiahnite ju. 405 00:29:19,000 --> 00:29:22,000 Perfect. 406 00:29:22,000 --> 00:29:28,000 Tam ideme. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Ako je, že sa to zostaviť? 408 00:29:30,000 --> 00:29:32,000 [Leila] No, to musí byť vyššia. 409 00:29:32,000 --> 00:29:34,000 [Nate] Jo, tak čo budeme robiť? 410 00:29:34,000 --> 00:29:36,000 [Leila] Ako int stred, alebo tak niečo. 411 00:29:36,000 --> 00:29:41,000 Awesome. Jo, poďme to urobiť, int midpoint = veľkosť. 412 00:29:41,000 --> 00:29:44,000 Bude to zostaviť? 413 00:29:44,000 --> 00:29:47,000 Poďme zmazať tento komentár a dostať ju z cesty. 414 00:29:47,000 --> 00:29:50,000 Čo sa to skompilovať o tom? 415 00:29:50,000 --> 00:29:52,000 Nerobíme nič s integer, 416 00:29:52,000 --> 00:29:55,000 takže musíme ju vytlačiť, alebo niečo také. 417 00:29:55,000 --> 00:29:58,000 Jo, presne tak. 418 00:29:58,000 --> 00:30:00,000 Dostaneme nepoužívané premenné. 419 00:30:00,000 --> 00:30:02,000 Čo iného sa nebude pracovať o to? 420 00:30:02,000 --> 00:30:06,000 Myslím, že si hovoril niečo, Sam. Bodkočiarkou. 421 00:30:06,000 --> 00:30:08,000 Jo, som tu chýbajú tie bodkočiarkami. 422 00:30:08,000 --> 00:30:14,000 Je to bude konštantná vec v celom priebehu funkčného obdobia. 423 00:30:14,000 --> 00:30:17,000 Posledná vec urobím je, že som si dal nejaký biely priestor na oboch stranách 424 00:30:17,000 --> 00:30:23,000 tohto operátora tu, pretože to je zvyčajne, ako to robíme 425 00:30:23,000 --> 00:30:26,000 podľa nášho štýlu sprievodcu. 426 00:30:26,000 --> 00:30:29,000 Máme polovicu nášho poľa. 427 00:30:29,000 --> 00:30:32,000 Teraz, keď si spomenieme späť do nášho algoritmu, 428 00:30:32,000 --> 00:30:37,000 čo bol druhý krok, ktorý sme museli robiť, keď máme stred? 429 00:30:37,000 --> 00:30:42,000 [Študent] Ak to je väčší [nepočuteľné]. 430 00:30:42,000 --> 00:30:48,000 Jo, takže musíme urobiť nejaký porovnanie, a to, čo sme porovnaním tu? 431 00:30:48,000 --> 00:30:53,000 Hovoril ste, že ak je väčší ako. Čo je v tejto vete na mysli? 432 00:30:53,000 --> 00:30:57,000 Počet, že príde, ak je to väčšie ako stredu, potom sa do poľa? 433 00:30:57,000 --> 00:31:05,000 Presne, tak číslo, ktoré prichádza, keď sme- 434 00:31:05,000 --> 00:31:10,000 Ihla, takže sme v porovnaní s ihlou, 435 00:31:10,000 --> 00:31:12,000 a čo sme porovnaním proti ihly? 436 00:31:12,000 --> 00:31:15,000 Vzhľadom k tomu, ihla je to, čo sme hľadali. 437 00:31:15,000 --> 00:31:18,000 Sme porovnaní sa dostať do stredu. 438 00:31:18,000 --> 00:31:21,000 >> Ale to zmysel skontrolovať, 439 00:31:21,000 --> 00:31:27,000 Ak needle = stred? 440 00:31:27,000 --> 00:31:32,000 Dáva to zmysel? 441 00:31:32,000 --> 00:31:35,000 Má niekto nesúhlasí? 442 00:31:35,000 --> 00:31:40,000 Poďme to skúsiť, ak (ihla == stred). 443 00:31:40,000 --> 00:31:42,000 [Študent] Páči printf ste ju našli. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Našli sme ju \ n!"); 445 00:31:51,000 --> 00:31:56,000 Inak-Idem začať robiť niečo iné tu. 446 00:31:56,000 --> 00:32:00,000 Chystám sa začať dávať rovnátka okolo if celú dobu 447 00:32:00,000 --> 00:32:05,000 len preto, že keď pridáme ďalšie veci, potom 448 00:32:05,000 --> 00:32:07,000 nemáme sa kompilátory. 449 00:32:07,000 --> 00:32:09,000 Jo, Sam. Máš pravdu. 450 00:32:09,000 --> 00:32:12,000 Problém je, že stred predstavuje pozíciu v poli, 451 00:32:12,000 --> 00:32:15,000 ale môžete dostať ktorá predstavuje hodnotu v tejto polohe v poli. 452 00:32:15,000 --> 00:32:17,000 To je skvelé miesto. 453 00:32:17,000 --> 00:32:19,000 Bolo všetci počuli, čo povedal Sam? 454 00:32:19,000 --> 00:32:22,000 On hovoril, že stred, ako je 455 00:32:22,000 --> 00:32:28,000 predstavuje len miesto v poli, ale nie je to skutočný prvok poľa. 456 00:32:28,000 --> 00:32:30,000 Ak si myslíte, že informácie o kóde, ako písomné teraz, 457 00:32:30,000 --> 00:32:35,000 Ak sa pozrieme na tomto poli sa sem, ktorý má 8 elementy v tom, 458 00:32:35,000 --> 00:32:39,000 čo je hodnota stred bude v tejto funkcii? 459 00:32:39,000 --> 00:32:41,000 [Študent] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Ak sa pozrieme na čísla 4 - 462 00:32:51,000 --> 00:32:54,000 a my môžeme len spustiť tento kód a dať trochu smutný tvár v tú 463 00:32:54,000 --> 00:32:58,000 pretože sme nenašli to, keď narazíme tento kód 464 00:32:58,000 --> 00:33:04,000 ako je teraz, nahrať, stavebniny, dovoľte mi, aby som prejdite nadol, 465 00:33:04,000 --> 00:33:09,000 a keď sa pozrieme na čísla 4, 466 00:33:09,000 --> 00:33:18,000 sme ho našli, ale my sme nedostali to printf áno. 467 00:33:18,000 --> 00:33:23,000 Jedným z dôvodov je to, že sme nemali vrátiť true, 468 00:33:23,000 --> 00:33:26,000 ale sme naozaj nájsť číslo 4? 469 00:33:26,000 --> 00:33:28,000 A Sam sa hovoriť nie. 470 00:33:28,000 --> 00:33:31,000 Čo sme zistili? 471 00:33:31,000 --> 00:33:35,000 Sme naozaj našli stred, ktorý, ak sa pozeráme na pole tu dole, 472 00:33:35,000 --> 00:33:38,000 to bude prvok na indexe 4, že sa pozeráme na, 473 00:33:38,000 --> 00:33:42,000 ktorá je 23. 474 00:33:42,000 --> 00:33:46,000 >> Ako sa vlastne dostať, že prvok v stredu 475 00:33:46,000 --> 00:33:48,000 a nie len stred sám? 476 00:33:48,000 --> 00:33:52,000 [Študent] Radi by sme zadať char, alebo tak niečo? 477 00:33:52,000 --> 00:33:55,000 Čo by to bolo, len zo zvedavosti? 478 00:33:55,000 --> 00:33:57,000 Môžete upresniť, trochu viac? 479 00:33:57,000 --> 00:34:02,000 Musíte zmeniť pozíciu v počte, 480 00:34:02,000 --> 00:34:05,000 takže musíš robiť niektoré pripojenie Myslím, že je to char, ale to nemusí byť. 481 00:34:05,000 --> 00:34:07,000 Jo, to je dobrá pripomienka. 482 00:34:07,000 --> 00:34:12,000 Robili sme veľa tohto konvertujúceho pozícií do znakov, tieto znaky, 483 00:34:12,000 --> 00:34:14,000 v prvých dvoch problémových súborov. 484 00:34:14,000 --> 00:34:18,000 Ukazuje sa, že tu je to takmer podobné 485 00:34:18,000 --> 00:34:24,000 prístup k Ith znak v reťazci, ak to dáva zmysel. 486 00:34:24,000 --> 00:34:30,000 Tu chceme získať prístup k midpoint prvok. 487 00:34:30,000 --> 00:34:34,000 Ako to urobíme? 488 00:34:34,000 --> 00:34:39,000 Kevin, máte nejaké návrhy, ako by sme mohli urobiť, že? 489 00:34:39,000 --> 00:34:44,000 Dalo by sa to kôpka sena, otvorený držiak, stredná, uzavretá držiak. 490 00:34:44,000 --> 00:34:46,000 Môžete napísať, že pre nás? 491 00:34:46,000 --> 00:34:51,000 Uložte ho tu, a my vytiahnuť, že až. 492 00:34:51,000 --> 00:34:56,000 Pozeráme sa na tomto riadku 9, 493 00:34:56,000 --> 00:34:59,000 a my sme si uvedomili, že nechceme porovnávať ihlu do stredu, 494 00:34:59,000 --> 00:35:03,000 ale namiesto toho, chceme porovnať ihlu 495 00:35:03,000 --> 00:35:07,000 k prvku v polohe stredu v našej Haystack poľa. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Tam ideme. 498 00:35:12,000 --> 00:35:15,000 Jo, to vyzerá celkom dobre, ak (ihla == Haystack [midpoint]). 499 00:35:15,000 --> 00:35:18,000 Našli sme ho. 500 00:35:18,000 --> 00:35:22,000 Teraz, keď sme sa spustiť na code-Dáme späť do trochu- 501 00:35:22,000 --> 00:35:26,000 zostavuje, beží, a teraz keď sa pozrieme na 4, 502 00:35:26,000 --> 00:35:30,000 nenašli sme ho, pretože teraz sme vlastne stále číslo 23. 503 00:35:30,000 --> 00:35:33,000 Sme získanie hodnoty 23, a to je to, čo sme v porovnaní s našou ihly. 504 00:35:33,000 --> 00:35:35,000 Ale to je dobre. To je krok správnym smerom. 505 00:35:35,000 --> 00:35:37,000 >> To je to, čo sa snažíme robiť. 506 00:35:37,000 --> 00:35:40,000 Nesnažíme sa tieto ihlu proti pozícií v poli 507 00:35:40,000 --> 00:35:44,000 ale proti skutočných prvkov v poli. 508 00:35:44,000 --> 00:35:49,000 Ak sa pozrieme späť hneď na ďalší krok v našom algoritmu, 509 00:35:49,000 --> 00:35:51,000 aký je ďalší krok? 510 00:35:51,000 --> 00:35:57,000 Leila už spomenul krátko. 511 00:35:57,000 --> 00:36:00,000 [Študent] Skontrolujte, či je to väčšie alebo menšie ako a potom sa rozhodnúť, akým spôsobom sa pohybovať. 512 00:36:00,000 --> 00:36:03,000 [Nate] Jo, to by tak ako to urobíme? 513 00:36:03,000 --> 00:36:07,000 Môžete dať do nejakej-Ja zachrániť túto revíziu, 514 00:36:07,000 --> 00:36:13,000 a potom, keď dáte v niektorých liniek, ktoré budú robiť, že. 515 00:36:13,000 --> 00:36:15,000 Jo, Charlotte. >> Mám dotaz. 516 00:36:15,000 --> 00:36:19,000 Nemal by to byť stred - 1, pretože prvá vec, ktorú je 517 00:36:19,000 --> 00:36:26,000 je to 0 indexované, takže keď dáme 4, že to nie je v skutočnosti charakter sme hľadali? 518 00:36:26,000 --> 00:36:30,000 Áno, a ďalší problém s tým je- 519 00:36:30,000 --> 00:36:35,000 to je skvelý úlovok, pretože to, čo sa chystá skončiť sa deje možná 520 00:36:35,000 --> 00:36:42,000 ak budeme ďalej a my už nikdy nastaviť pôvodne? 521 00:36:42,000 --> 00:36:46,000 Myslím, že to, čo by sme mohli skončiť robiť sa pokúša získať prístup 522 00:36:46,000 --> 00:36:49,000 prvok na 8. pozícii poľa, 523 00:36:49,000 --> 00:36:53,000 ktorý je v tomto prípade neexistuje. 524 00:36:53,000 --> 00:36:56,000 Budeme chcieť urobiť nejaké účtovníctva za to, 525 00:36:56,000 --> 00:36:59,000 že máme nejakú nulovú indexovanie. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Ospravedlňujem sa, myslel som polovicu - 1 v hranatých zátvorkách. 527 00:37:05,000 --> 00:37:08,000 Môžeme to urobiť, že. 528 00:37:08,000 --> 00:37:10,000 Vrátime sa k tejto otázke v len trochu. 529 00:37:10,000 --> 00:37:13,000 Akonáhle začneme sa dostať do skutočnej slučky, 530 00:37:13,000 --> 00:37:16,000 to je, keď budeme naozaj vidieť vstupujú do hry. 531 00:37:16,000 --> 00:37:21,000 V súčasnej dobe, môžeme to urobiť, ale ty si úplnú pravdu. 532 00:37:21,000 --> 00:37:28,000 To nula indexovanie bude mať vplyv, že musíme robiť. 533 00:37:28,000 --> 00:37:30,000 Poďme sa pozrieť,. 534 00:37:30,000 --> 00:37:34,000 >> Ako je väčší ako a menšie ako-? 535 00:37:34,000 --> 00:37:36,000 [Študent] som si, ako to urobiť väčšie ako a menšie ako druhé. 536 00:37:36,000 --> 00:37:41,000 Len som si nebol istý, čo tlačiť, ak zistíte, že je to menej ako Haystack stredu alebo väčšia ako. 537 00:37:41,000 --> 00:37:43,000 Tu môžem zachrániť, čo I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Jo, ak si zachrániť to, čo máte, a my vytiahnite ju. 539 00:37:47,000 --> 00:37:49,000 Tam ideme. 540 00:37:49,000 --> 00:37:51,000 [Študent] A dal som otázniky, čo som nevedel. 541 00:37:51,000 --> 00:37:54,000 [Nate] To vyzerá skvele. 542 00:37:54,000 --> 00:37:58,000 Tu máme otázniky, pretože stále nevieme 543 00:37:58,000 --> 00:38:06,000 čo budeme robiť docela ešte. 544 00:38:06,000 --> 00:38:12,000 Čo by sme chceli robiť, pardon, máme nejaké zátvorky všetci funky na nás. 545 00:38:12,000 --> 00:38:15,000 Budeme opraviť tieto rovnátka. 546 00:38:15,000 --> 00:38:19,000 Tam ideme. 547 00:38:19,000 --> 00:38:22,000 A tak to, čo chceme robiť, podľa nášho algoritmu, 548 00:38:22,000 --> 00:38:27,000 ak nebudeme nájsť ihlu? 549 00:38:27,000 --> 00:38:32,000 Povedzme, že v prípade, že ihla je menšia ako to, čo sme pri pohľade na. Kevin. 550 00:38:32,000 --> 00:38:34,000 Len sa pozrieť na ľavej polovici. 551 00:38:34,000 --> 00:38:40,000 Dobre, takže budeme dať komentár tu hovorí "pozri sa na ľavej polovici." 552 00:38:40,000 --> 00:38:46,000 A v prípade, že ihla je väčšia ako kope sena na stredu, čo chceme robiť? 553 00:38:46,000 --> 00:38:48,000 [Študent] Potom sa pozriete na pravej polovici. 554 00:38:48,000 --> 00:38:53,000 Pozrite sa na pravej polovici, "pozri sa na pravej polovice." 555 00:38:53,000 --> 00:38:58,000 Nie je tak zlý. 556 00:38:58,000 --> 00:39:05,000 Dobre, takže v tomto bode, čo hľadáte celkom dobre. 557 00:39:05,000 --> 00:39:13,000 Problém s kódom písaným je to, čo? 558 00:39:13,000 --> 00:39:15,000 [Študent] Nemáte koncové body pre polovíc. 559 00:39:15,000 --> 00:39:18,000 Dobre, nemáme koncové body pre polovíc. 560 00:39:18,000 --> 00:39:20,000 Tiež sme sa len ísť cez to raz. 561 00:39:20,000 --> 00:39:23,000 Sme ešte len vo chvíli, sa pozrieť na jeden stred. 562 00:39:23,000 --> 00:39:27,000 Buď prvok je tam, alebo to nie je. 563 00:39:27,000 --> 00:39:34,000 V záujme dokončenia tohto, budeme musieť urobiť nejaké opakovanie. 564 00:39:34,000 --> 00:39:39,000 Musíme neustále opakujú, kým nezistíme, že 565 00:39:39,000 --> 00:39:43,000 buď element je tam preto, že sme zúžil a nakoniec zistil, že je, 566 00:39:43,000 --> 00:39:46,000 alebo je to tam nie je, pretože sme sa pozrel cez všetky veci, 567 00:39:46,000 --> 00:39:52,000 v príslušných polovíc pole a zistil, že nič je tam. 568 00:39:52,000 --> 00:39:56,000 >> Kedykoľvek sme dostali toto opakovanie deje, čo budeme používať? 569 00:39:56,000 --> 00:39:58,000 [Študent] slučka. 570 00:39:58,000 --> 00:40:00,000 Nejaký slučky. Áno. 571 00:40:00,000 --> 00:40:03,000 [Študent] Môžeme urobiť do-while, a mať to robiť, a potom pri 572 00:40:03,000 --> 00:40:10,000 ihla nie je rovné-nie som istý, kde som išiel s tým. 573 00:40:10,000 --> 00:40:18,000 Ale niečo ako to, že tak dlho, ako to robí nie rovnaká hodnota, ktorú užívateľ vstup. 574 00:40:18,000 --> 00:40:21,000 Jo, tak sa poďme pozrieť, ako to môže písať sám? 575 00:40:21,000 --> 00:40:23,000 Povedal si, že ideme použiť do-while. 576 00:40:23,000 --> 00:40:26,000 Kde sa to začalo? 577 00:40:26,000 --> 00:40:33,000 [Študent] Hneď po veľkosť / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Dobre, a čo budeme robiť? 579 00:40:42,000 --> 00:40:44,000 Budeme vyplniť chvíľu neskôr. 580 00:40:44,000 --> 00:40:46,000 Čo budeme robiť? 581 00:40:46,000 --> 00:40:49,000 [Študent] Vari chceme robiť všetky tie veci, ktoré máme v prípade časti? 582 00:40:49,000 --> 00:40:52,000 [Nate] Do všetky tie veci, skvelé. 583 00:40:52,000 --> 00:40:55,000 Kopírovanie a vkladanie. 584 00:40:55,000 --> 00:40:59,000 Oh, človeče. 585 00:40:59,000 --> 00:41:03,000 Uvidíme, či to funguje, či to pôjde karta to znova. 586 00:41:03,000 --> 00:41:08,000 Krásne. 587 00:41:08,000 --> 00:41:16,000 Dobre, a šetríme to tak vy si to. 588 00:41:16,000 --> 00:41:21,000 Dobre, a my sa chystáme urobiť to pri- 589 00:41:21,000 --> 00:41:25,000 čo bolo, keď podmienka, že si po? 590 00:41:25,000 --> 00:41:31,000 [Študent] Kým sa ihla nie je rovné, tak ako výkričník. 591 00:41:31,000 --> 00:41:37,000 Ale nie som si istý, čo presne to je ešte. 592 00:41:37,000 --> 00:41:39,000 [Nate] Jo, to je jeden spôsob, ako to urobiť. 593 00:41:39,000 --> 00:41:41,000 Sam, máte napísať komentár? 594 00:41:41,000 --> 00:41:43,000 [Sam] som si spomenul, keď som sa pozrela na videá, 595 00:41:43,000 --> 00:41:48,000 Vzal som si screenshot z jedného z-ako keď sme robili pseudokódu pre to, 596 00:41:48,000 --> 00:41:52,000 tam bol nejaký vzťah medzi max a min. 597 00:41:52,000 --> 00:41:58,000 Myslím, že to bolo niečo ako keď max je stále menej ako min. 598 00:41:58,000 --> 00:42:00,000 Mám to. 599 00:42:00,000 --> 00:42:04,000 [Sam] Alebo ako keď max nie je menšia ako min alebo niečo také, 600 00:42:04,000 --> 00:42:06,000 pretože to by znamenalo, že ste hľadali všetko. 601 00:42:06,000 --> 00:42:13,000 >> Jo, tak čo to znieť ako max a min boli na mysli? 602 00:42:13,000 --> 00:42:16,000 [Sam] Hodnoty že-celé čísla, ktoré sa chystáte zmeniť 603 00:42:16,000 --> 00:42:18,000 vzhľadom k miestu, kde sme dali polovicu. 604 00:42:18,000 --> 00:42:20,000 Presne tak. 605 00:42:20,000 --> 00:42:24,000 [Sam] V tomto bode, bude to [nepočuteľné] výpočet max a min. 606 00:42:24,000 --> 00:42:29,000 Stred je to max a min nápad. 607 00:42:29,000 --> 00:42:35,000 Dáva to zmysel, aby ľudí? 608 00:42:35,000 --> 00:42:39,000 Ak by sme mali začať uvažovať o tom, ako budeme robiť túto iterácii, 609 00:42:39,000 --> 00:42:43,000 máš úplnú pravdu, že chceme použiť nejaký do-while. 610 00:42:43,000 --> 00:42:49,000 Ale myslím, že ak by sme si spomenúť, čo sa deje na mieste tohto poľa 611 00:42:49,000 --> 00:42:53,000 a čo sa vlastne deje, ja sa chystám napísať sem- 612 00:42:53,000 --> 00:42:58,000 pri prvom opakovaní binárneho vyhľadávania, máme- 613 00:42:58,000 --> 00:43:05,000 Budem používať B a E na označenie začiatku. 614 00:43:05,000 --> 00:43:10,000 A potom koniec nášho poľa. 615 00:43:10,000 --> 00:43:14,000 Vieme, že začiatok je na 4 tamto, 616 00:43:14,000 --> 00:43:18,000 a vieme, že koniec je na 108. 617 00:43:18,000 --> 00:43:23,000 Povedzme, že hľadáte pre číslo 15. 618 00:43:23,000 --> 00:43:27,000 Prvýkrát sme to, ako sme videli skôr, 619 00:43:27,000 --> 00:43:30,000 stred je buď bude 16 alebo 23 620 00:43:30,000 --> 00:43:34,000 v závislosti na tom, ako vypočítať veci. 621 00:43:34,000 --> 00:43:37,000 Vzhľadom k tomu, rovnomerne rozdeliť v polovici by nám tento priestor 622 00:43:37,000 --> 00:43:42,000 medzi 16 a 23, nemôžeme rovnomerne rozdeliť 623 00:43:42,000 --> 00:43:47,000 alebo rozdeliť a dostať na pravej stredu. 624 00:43:47,000 --> 00:43:49,000 My sa pozrieme na 16. 625 00:43:49,000 --> 00:43:55,000 Budeme si uvedomiť, "Hey, 16> 15, ktoré sme hľadali." 626 00:43:55,000 --> 00:43:59,000 Potom pohľad na ľavej polovici poľa 627 00:43:59,000 --> 00:44:03,000 čo skončíme robí, je odhadzovať 628 00:44:03,000 --> 00:44:07,000 celý tento horná časť 629 00:44:07,000 --> 00:44:16,000 a povedal: "Dobre, teraz naše koncový bod bude tu." 630 00:44:16,000 --> 00:44:22,000 Ďalšie iterácie nášho slučky, sme teraz pozrieme na tomto poli, 631 00:44:22,000 --> 00:44:25,000 efektívne, čo ste vylúčili túto časť, pretože teraz 632 00:44:25,000 --> 00:44:30,000 ak budeme brať polovicu byť rozdiel medzi začiatkom a koncom, 633 00:44:30,000 --> 00:44:34,000 nájdeme naše stred na 8, 634 00:44:34,000 --> 00:44:40,000 ktoré potom môžeme otestovať 8 vidieť, kde je vo vzťahu k počtu sme hľadali, 635 00:44:40,000 --> 00:44:44,000 15, zistíme, že 15 je väčšia, 636 00:44:44,000 --> 00:44:49,000 takže sa musíme presunúť do pravej časti zoznamu, 637 00:44:49,000 --> 00:44:51,000 ktoré poznáme, pretože sme ľudia, a my môžeme vidieť to. 638 00:44:51,000 --> 00:44:54,000 Vieme, že pravá časť bude tam, kde sme ho nájsť, 639 00:44:54,000 --> 00:45:01,000 ale počítač nevie, že, takže to, čo budeme robiť, je my budeme skutočne 640 00:45:01,000 --> 00:45:04,000 sa to ísť hore, a teraz na začiatku a na konci 641 00:45:04,000 --> 00:45:11,000 sú rovnaké miesto, takže stred sa stáva iba číslo v zozname v tomto bode, 642 00:45:11,000 --> 00:45:16,000 ktorý je o 15, a našli sme ho. 643 00:45:16,000 --> 00:45:21,000 Znamená to, že vrhnúť nejaké svetlo na tom, kde to celé max a min zápis sa deje, 644 00:45:21,000 --> 00:45:24,000 sledovanie koncových bodov pole, aby sa zistiť 645 00:45:24,000 --> 00:45:35,000 ako zúžiť veci dole? 646 00:45:35,000 --> 00:45:42,000 >> Čo by sa stalo, keby to nebolo rovné 15 teraz? 647 00:45:42,000 --> 00:45:52,000 Čo keď sme hľadali 15, a namiesto toho, toto číslo bolo tiež 16? 648 00:45:52,000 --> 00:45:54,000 Radi by sme povedať: "Ach, to je väčšia. 649 00:45:54,000 --> 00:45:57,000 Chceme sa vrátiť doľava. " 650 00:45:57,000 --> 00:46:01,000 A my by sme presunúť náš e doprava, 651 00:46:01,000 --> 00:46:06,000 na ktorom mieste máme koncový bod, ktorý by bol konfliktný. 652 00:46:06,000 --> 00:46:09,000 To by nebolo možné vyhľadať akékoľvek ďalšie prvky 653 00:46:09,000 --> 00:46:13,000 pretože teraz máme koncový bod a naše počiatočný bod, 654 00:46:13,000 --> 00:46:16,000 naša max a naše min, sú teraz prevrátený. 655 00:46:16,000 --> 00:46:23,000 Hľadáme cez celé pole. Nemôžeme nič nájsť. 656 00:46:23,000 --> 00:46:27,000 To je bod, v ktorom by sme chceli povedať, "Dobre, budeme zastaviť tento algoritmus. 657 00:46:27,000 --> 00:46:34,000 Nenašli sme nič. My vieme, že to tu nie je. " 658 00:46:34,000 --> 00:46:36,000 Ako sa to deje? 659 00:46:36,000 --> 00:46:40,000 [Študent] Ako presne sa počítač prepne do konca? 660 00:46:40,000 --> 00:46:45,000 Ako koniec skončiť pred začiatkom? 661 00:46:45,000 --> 00:46:48,000 Koniec skončí pred začiatkom 662 00:46:48,000 --> 00:46:54,000 pretože matematiky, že budeme robiť zakaždým, keď sme sa to urobiť. 663 00:46:54,000 --> 00:47:00,000 Spôsob, akým sme sa vymeniť, je, keď sa pozriete na prvýkrát sme urobiť swapu 664 00:47:00,000 --> 00:47:03,000 kde máme začiatok na 4 a koniec 665 00:47:03,000 --> 00:47:13,000 celú cestu dole na 108 a naše stred, povedzme, na 16 - 666 00:47:13,000 --> 00:47:20,000 Chystám sa obnoviť túto späť do 15 Ak hľadáme pre 15, 667 00:47:20,000 --> 00:47:25,000 vedeli sme, že to, čo sme urobili, keď sme skontrolovali 16 a videl, že to bolo väčšie 668 00:47:25,000 --> 00:47:28,000 a chcel odhodiť celú pravú časť zoznamu, 669 00:47:28,000 --> 00:47:36,000 sme videli, že to, čo sme chceli urobiť, je presunúť tento e tu. 670 00:47:36,000 --> 00:47:44,000 Účinne, dostal e dojatá k jednému pred stredom. 671 00:47:44,000 --> 00:47:48,000 Podobne, keď sme robili túto iteráciu algoritmu 672 00:47:48,000 --> 00:47:51,000 a stred bol v 8, 673 00:47:51,000 --> 00:47:55,000 Zistili sme, že 8 <15, a tak sme chceli presunúť b 674 00:47:55,000 --> 00:48:00,000 jedna minulosť stredu. 675 00:48:00,000 --> 00:48:07,000 Teraz, na začiatku a na konci sú obaja spoločne v tomto 15. 676 00:48:07,000 --> 00:48:10,000 >> Ak by sme sa deje sa pozrieť na inú hodnotu, nie 15, 677 00:48:10,000 --> 00:48:14,000 alebo ak je to 15 miesto toho bol 16, 678 00:48:14,000 --> 00:48:20,000 by sme zistili, že e chceme presunúť jeden pred stredom. 679 00:48:20,000 --> 00:48:33,000 Teraz e by sa tam hodil menej ako b 680 00:48:33,000 --> 00:48:39,000 Prejdime ako sme vlastne skončili kódovanie tohto algoritmu. 681 00:48:39,000 --> 00:48:44,000 Vieme, že chceme mať túto midpoint výpočet. 682 00:48:44,000 --> 00:48:48,000 Vieme tiež, že chceme sledovať začiatok a koniec poľa 683 00:48:48,000 --> 00:48:51,000 z nášho aktuálneho poľa, takže môžeme zistiť 684 00:48:51,000 --> 00:48:56,000 kde tento ľavá polovica zoznamu a kde pravá polovica zoznamu je. 685 00:48:56,000 --> 00:49:03,000 Robíme, že sa buď začína a končí, 686 00:49:03,000 --> 00:49:07,000 alebo môžeme im hovoriť min a max 687 00:49:07,000 --> 00:49:10,000 Budem používať začínať a končiť tentoraz. 688 00:49:10,000 --> 00:49:15,000 Keď začneme, ak sa pozrieme späť na náš príklad tu dole, 689 00:49:15,000 --> 00:49:20,000 náš začiatok bol nastavený na samom začiatku poľa, ako prírodné. 690 00:49:20,000 --> 00:49:25,000 Čo index to bolo? Čo by naše začať byť? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Jo, takže sme mohli nastaviť rovná kope sena [0]. 694 00:49:37,000 --> 00:49:40,000 Problém však je, že tento nám nie pozíciu prvého prvku. 695 00:49:40,000 --> 00:49:45,000 To nám dáva index prvého prvku alebo skutočnou hodnotou v tejto prvej pozícii. 696 00:49:45,000 --> 00:49:47,000 [Študent] To bude konvertovať na 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Čo to bude robiť, je-dobre, nebude to robiť žiadne konverzie. 698 00:49:52,000 --> 00:49:56,000 Čo to bude robiť, je to uloží 4 v začatí, 699 00:49:56,000 --> 00:49:59,000 a potom to bude veľmi ťažké, aby sa porovnanie proti začatiu 700 00:49:59,000 --> 00:50:03,000 pretože begin usporiada hodnotu 4, 701 00:50:03,000 --> 00:50:06,000 čo je začiatok nášho poľa, 702 00:50:06,000 --> 00:50:08,000 ale chceme sledovať indexy v poli 703 00:50:08,000 --> 00:50:11,000 oproti hodnotám. 704 00:50:11,000 --> 00:50:17,000 Budeme vlastne používať 0, takhle. 705 00:50:17,000 --> 00:50:20,000 Pre ukončenie pole-Charlotte priniesla to až o niečo skôr. 706 00:50:20,000 --> 00:50:23,000 To je miesto, kde sa budeme brať do úvahy nulovú indexovanie. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, čo je koniec poľa? 708 00:50:25,000 --> 00:50:28,000 Čo je index na konci? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Veľkosť - 1. 710 00:50:30,000 --> 00:50:32,000 Jo, a akú veľkosť by sme mali používať? 711 00:50:32,000 --> 00:50:35,000 Mali by sme použiť kapitálu veľkosti alebo malými písmenami veľkosť? 712 00:50:35,000 --> 00:50:37,000 Capital veľkosť. 713 00:50:37,000 --> 00:50:42,000 V tomto prípade môže byť použitie kapitálové veľkosti. 714 00:50:42,000 --> 00:50:45,000 Ak by sme chceli túto funkciu je prenosný 715 00:50:45,000 --> 00:50:48,000 a používajte túto funkciu v iných programoch, 716 00:50:48,000 --> 00:50:50,000 môžeme skutočne využiť malé písmená veľkosti. 717 00:50:50,000 --> 00:50:52,000 Je to taky v pohode. 718 00:50:52,000 --> 00:51:01,000 Ale Charlotte je úplne správne, že chceme mať veľkosť - 1. 719 00:51:01,000 --> 00:51:03,000 V tomto bode, 720 00:51:03,000 --> 00:51:05,000 [Študent] Ako je to, že môžete použiť veľká veľkosť? 721 00:51:05,000 --> 00:51:07,000 Ako je možné, že by sme mohli použiť veľká veľkosť? 722 00:51:07,000 --> 00:51:13,000 Ukazuje sa, že tieto # definuje sú naozaj, 723 00:51:13,000 --> 00:51:19,000 pod kapotou, text ako nájsť a nahradiť, ak to dáva zmysel. 724 00:51:19,000 --> 00:51:24,000 Pri kompilácii kódu, predspracovanie fázy 725 00:51:24,000 --> 00:51:27,000 prekladača prechádza súboru, 726 00:51:27,000 --> 00:51:31,000 a vyzerá to všade možne, že ste napísali kapitálu veľkosti, 727 00:51:31,000 --> 00:51:39,000 a nahrádza tento text doslova s ​​8, rovnako ako to. 728 00:51:39,000 --> 00:51:42,000 V tomto zmysle je veľmi odlišné od premennej. 729 00:51:42,000 --> 00:51:45,000 Neznamená to však trvať nejaké miesto v pamäti. 730 00:51:45,000 --> 00:51:52,000 Je to jednoduchý textový nahradiť trik. 731 00:51:52,000 --> 00:51:57,000 V tomto prípade, budeme používať veľkosť. 732 00:51:57,000 --> 00:52:01,000 Odtiaľ sme chceš robiť nejaké opakovanie, 733 00:52:01,000 --> 00:52:03,000 a my sme na správnej ceste s našou do-while. 734 00:52:03,000 --> 00:52:08,000 Chceme urobiť niečo, kým podmienka neplatí už, 735 00:52:08,000 --> 00:52:12,000 a ako sme videli skôr, videli sme, že táto podmienka 736 00:52:12,000 --> 00:52:19,000 bol naozaj, že nechceme koniec 737 00:52:19,000 --> 00:52:24,000 byť menšia než začne. 738 00:52:24,000 --> 00:52:26,000 >> To je naše zastavenie stav. 739 00:52:26,000 --> 00:52:35,000 Ak k tomu dôjde, chceme zastaviť a vyhlásiť ako, "Hele, my sme nič nenašli." 740 00:52:35,000 --> 00:52:43,000 Ak chcete vyjadriť, my chceme použiť nejaký slučky. 741 00:52:43,000 --> 00:52:49,000 V tomto prípade, že by bolo do-while, pre slučky, zatiaľ čo slučka? 742 00:52:49,000 --> 00:52:51,000 Máme do-while tu. 743 00:52:51,000 --> 00:52:53,000 Páči sa vám chalani páči tohto prístupu? 744 00:52:53,000 --> 00:52:59,000 Myslíte si, že by sme mali skúsiť iný prístup? 745 00:52:59,000 --> 00:53:01,000 Kevin, nejaké myšlienky? 746 00:53:01,000 --> 00:53:06,000 Mohli by sme mať while, pretože vieme, že maximálna 747 00:53:06,000 --> 00:53:11,000 by boli vyššie ako min na začiatku tak ako tak. 748 00:53:11,000 --> 00:53:14,000 Jo, takže to nie je inicializácia, ktorá sa musí stať. 749 00:53:14,000 --> 00:53:17,000 Tieto do-while slučky sú skvelé, keď máte inicializovať 750 00:53:17,000 --> 00:53:21,000 predtým skúšanie, vzhľadom k tomu, tu 751 00:53:21,000 --> 00:53:26,000 vieme, že nebudeme mať reinitializing ako začať a skončiť 752 00:53:26,000 --> 00:53:28,000 každé kolo zo slučky. 753 00:53:28,000 --> 00:53:32,000 Vieme, že chceme inicializovať, potom navštívte naše podmienky. 754 00:53:32,000 --> 00:53:38,000 V tomto prípade, to som vlastne ísť s jednoduchým slučke while. 755 00:53:38,000 --> 00:53:44,000 Ukazuje sa, že do-while slučky sú používané docela zriedka. 756 00:53:44,000 --> 00:53:49,000 Mnoho miest ani učiť sa while. 757 00:53:49,000 --> 00:53:53,000 Sú dobré pre spracovanie vstupov užívateľa, takže sme videli veľa z nich tak ďaleko. 758 00:53:53,000 --> 00:53:59,000 Ale normálne a while sú oveľa častejšie. 759 00:53:59,000 --> 00:54:03,000 Ukazuje sa, že táto podmienka, ako sú písané 760 00:54:03,000 --> 00:54:09,000 nebude naozaj nám veľmi dobre, a prečo je to? 761 00:54:09,000 --> 00:54:11,000 Je mi ľúto, ja neviem, ako sa voláš. 762 00:54:11,000 --> 00:54:13,000 Som Jerry. >> Ľúto? 763 00:54:13,000 --> 00:54:15,000 Je to B-O-R-U-I. 764 00:54:15,000 --> 00:54:18,000 Oh, dobre. 765 00:54:18,000 --> 00:54:23,000 Nevidím ťa na mojom zozname. 766 00:54:23,000 --> 00:54:26,000 Oh, je to preto, že-oh, to dáva zmysel. 767 00:54:26,000 --> 00:54:31,000 Máte predstavu o tom, prečo táto while nemusí fungovať, ako bolo zamýšľané, 768 00:54:31,000 --> 00:54:38,000 ako je napísané s podmienkou? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Myslíš ako chcete všetky tie veci po ňom do-? 770 00:54:43,000 --> 00:54:46,000 Jo, takže to je jedna. 771 00:54:46,000 --> 00:54:49,000 Mohli by sme dať všetky tieto veci do slučky while, čo je úplne pravdivé. 772 00:54:49,000 --> 00:54:55,000 Ďalšia vec, ktorá je trochu problematickejšie, aj keď, je to, že táto podmienka nebude fungovať. 773 00:54:55,000 --> 00:54:57,000 [Študent] Musíte odhodiť. 774 00:54:57,000 --> 00:55:04,000 Správne, takže táto podmienka nebude nikdy platiť spočiatku ako sme o tom hovorili. 775 00:55:04,000 --> 00:55:08,000 Chceme urobiť niečo do konca 00:55:13,000 ale chceme niečo urobiť, zatiaľ čo 777 00:55:13,000 --> 00:55:21,000 začať ≤ koniec. 778 00:55:21,000 --> 00:55:24,000 >> Tam je to obrátenie logiky tam. 779 00:55:24,000 --> 00:55:27,000 Som vinný robiť tie chyby stále. 780 00:55:27,000 --> 00:55:31,000 [Študent] Prečo to musí byť menšie alebo rovné? 781 00:55:31,000 --> 00:55:33,000 Vzhľadom k tomu, Spomínate si na prípad, že sme sa dostali do 782 00:55:33,000 --> 00:55:36,000 tam, kde bol len jeden prvok, a my sme boli dole, 783 00:55:36,000 --> 00:55:43,000 a my sme boli pri pohľade na len 15 v našom poli? 784 00:55:43,000 --> 00:55:47,000 A naše začiatok a náš koniec bol rovnaký prvok. 785 00:55:47,000 --> 00:55:50,000 Chceme, aby sa ubezpečil, že s nimi budeme nakladať ten prípad. 786 00:55:50,000 --> 00:55:54,000 Ak sme rovno menší než, 787 00:55:54,000 --> 00:55:58,000 by sme iba možnosť, aby sa dostal na 2-elementu poľa. 788 00:55:58,000 --> 00:56:06,000 Akonáhle sme sa dostali až do toho posledného prvku, keby tomu tak bolo naše prvok, by sme nikdy nájsť. 789 00:56:06,000 --> 00:56:10,000 Teraz tu môžeme urobiť presne tak, ako si hovoril. 790 00:56:10,000 --> 00:56:15,000 Môžeme začať plopping veci priamo do stredu našej slučke while. 791 00:56:15,000 --> 00:56:20,000 Môžeme PLOP v našom strede. 792 00:56:20,000 --> 00:56:24,000 Môžeme si vziať všetky tieto if, 793 00:56:24,000 --> 00:56:30,000 vytiahnite ich z tohto do-while, 794 00:56:30,000 --> 00:56:34,000 PLOP je v, 795 00:56:34,000 --> 00:56:39,000 čisté veci sa trochu, 796 00:56:39,000 --> 00:56:48,000 a ja pôjdem napred a ušetrite túto revíziu. 797 00:56:48,000 --> 00:56:53,000 A v tomto bode, dostávame veľmi blízko. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Myslím si, že tiež mať INT midpoint = veľkosť - 1/2. 800 00:56:58,000 --> 00:57:01,000 Mám to, veľkosť - 1/2. 801 00:57:01,000 --> 00:57:05,000 Je ešte niečo, čo musíme zmeniť na tejto linke? 802 00:57:05,000 --> 00:57:10,000 To bol dobrý úlovok. 803 00:57:10,000 --> 00:57:14,000 >> Čo robiť veľkosť? Sme neustále sa meniace veľkosť? 804 00:57:14,000 --> 00:57:17,000 V záujme zachovania riadok podobný tomuto, musíme zmeniť veľkosť. 805 00:57:17,000 --> 00:57:21,000 Ak máme zmeniť veľkosť zakaždým, keď sme ísť okolo slučky for. 806 00:57:21,000 --> 00:57:25,000 Ale pamätajte si, keď sme išli cez našom príklade len trochu skôr, 807 00:57:25,000 --> 00:57:30,000 a mali sme na začiatku na 4 808 00:57:30,000 --> 00:57:33,000 a koniec celú cestu na 108? 809 00:57:33,000 --> 00:57:35,000 Ako sme vypočítať stred? 810 00:57:35,000 --> 00:57:38,000 Boli sme s použitím veľkosť? 811 00:57:38,000 --> 00:57:40,000 Alebo sme používali začať a skončiť miesto? 812 00:57:40,000 --> 00:57:42,000 To je rozdiel medzi koncom a začiatkom. 813 00:57:42,000 --> 00:57:50,000 Presne, a ako presne by som mal napísať, že, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Len koniec - začína. 815 00:57:52,000 --> 00:57:55,000 Tie nebudú musieť robiť - 1 816 00:57:55,000 --> 00:57:58,000 pretože - 1 bol zahrnutý do konca a začne už. 817 00:57:58,000 --> 00:58:00,000 [Nate] Skvelé, máš úplnú pravdu. 818 00:58:00,000 --> 00:58:03,000 Nemáme robiť - 1, pretože to - 1 bola zahrnutá 819 00:58:03,000 --> 00:58:08,000 a vyúčtované, budú pri inicializuje Koniec premennej. 820 00:58:08,000 --> 00:58:11,000 >> Je ešte niečo, čo musím urobiť, syntakticky, aby táto položka zmysel? 821 00:58:11,000 --> 00:58:13,000 [Študent] Plus začať. >> Plus začať? 822 00:58:13,000 --> 00:58:15,000 [Študent] Na konci. 823 00:58:15,000 --> 00:58:20,000 Vzhľadom k tomu, je to len počíta polovica dĺžky. 824 00:58:20,000 --> 00:58:26,000 Musíte pridať začať. 825 00:58:26,000 --> 00:58:31,000 [Nate] Čo by to spočítať pre nás? 826 00:58:31,000 --> 00:58:35,000 Ak budeme uvažovať o konci tejto úplne prvej iterácii slučky, 827 00:58:35,000 --> 00:58:40,000 end bude v polohe indexe 7. 828 00:58:40,000 --> 00:58:43,000 Začnite v pozícii 0. 829 00:58:43,000 --> 00:58:47,000 Pamätajte si, že my hľadáme buď 830 00:58:47,000 --> 00:58:52,000 pozícia 3 alebo 4 pozíciu. 831 00:58:52,000 --> 00:58:56,000 Ak sa pozrieme na tento matematike, len aby to trochu viac konkrétne, 832 00:58:56,000 --> 00:59:02,000 dať nejaká čísla tu, máme 7, 0, 833 00:59:02,000 --> 00:59:10,000 tak 7-0, a potom / 2 834 00:59:10,000 --> 00:59:19,000 je 3 v celé číslo, ktoré je. 835 00:59:19,000 --> 00:59:26,000 Potom si musíme potom pridať späť naše začať? 836 00:59:26,000 --> 00:59:28,000 Nevieme v tomto prípade. 837 00:59:28,000 --> 00:59:31,000 Na prvom iterácii, bude to v poriadku, pretože end je 0. 838 00:59:31,000 --> 00:59:36,000 Ale ako sme pokrok, robíme naozaj všetko stačí 839 00:59:36,000 --> 00:59:42,000 end - začať / 2. 840 00:59:42,000 --> 00:59:46,000 Je tu ešte jedna Trik je tu, a to je práve jedna z priorít. 841 00:59:46,000 --> 00:59:49,000 [Študent] Potrebujeme zátvorky? 842 00:59:49,000 --> 00:59:53,000 [Nate] Presne tak, a to preto, že ak sa nám nepodarí dať tieto zátvorky, 843 00:59:53,000 --> 00:59:58,000 potom táto linka bude vykladať miesto 844 00:59:58,000 --> 01:00:09,000 ako (koniec) - (začiatok / 2), ktorý sa rozhodne nechceme. 845 01:00:09,000 --> 01:00:11,000 Dajte si pozor na tie pravidlá prednosť. 846 01:00:11,000 --> 01:00:15,000 [Študent] Prečo nie je koniec + začať? 847 01:00:15,000 --> 01:00:17,000 Prečo nie je koniec + začať? 848 01:00:17,000 --> 01:00:19,000 [Študent] Prečo je to tak, že? 849 01:00:19,000 --> 01:00:24,000 Prečo by to bolo +? 850 01:00:24,000 --> 01:00:26,000 Myslím, že máš pravdu. 851 01:00:26,000 --> 01:00:28,000 [Študent] Vzhľadom k tomu, že je to priemer? 852 01:00:28,000 --> 01:00:31,000 [Nate] End + začatí, máš úplnú pravdu. 853 01:00:31,000 --> 01:00:34,000 Wow, som totálne podelal. Máš pravdu. 854 01:00:34,000 --> 01:00:39,000 Ak by sme robili mínus, by sme chceli pridať začať znovu prihlásiť 855 01:00:39,000 --> 01:00:43,000 V tomto prípade ste veľmi správne, že chceme, aby sa priemer dvoch, 856 01:00:43,000 --> 01:00:45,000 tak sme si chceš pridať, ako protichodný k odpočítať je. 857 01:00:45,000 --> 01:00:49,000 [Študent] To by tiež fungovať, ak ste koniec - začať / 2 + začať. 858 01:00:49,000 --> 01:00:55,000 To by, keby sa do-myslím, že áno. 859 01:00:55,000 --> 01:01:00,000 >> Napríklad, ak sme sa pozerali na začiatok, 860 01:01:00,000 --> 01:01:04,000 a my posunul ho sem 861 01:01:04,000 --> 01:01:08,000 na 15. 862 01:01:08,000 --> 01:01:12,000 Teraz môžete začať na pozíciu 2. 863 01:01:12,000 --> 01:01:15,000 Koniec je na pozíciu 7. 864 01:01:15,000 --> 01:01:21,000 Ak odpočítame je, dostaneme 5. 865 01:01:21,000 --> 01:01:24,000 Rozdeľte že 2, dostaneme 2. 866 01:01:24,000 --> 01:01:27,000 A potom pridáme 2 späť, 867 01:01:27,000 --> 01:01:30,000 a že nás dostane na 4. pozíciu, 868 01:01:30,000 --> 01:01:33,000 ktorá je práve tu, čo je na stred. 869 01:01:33,000 --> 01:01:36,000 [Študent] Páči sa musíme postarať o balení? 870 01:01:36,000 --> 01:01:39,000 V akom zmysle sa musíme postarať o balení? 871 01:01:39,000 --> 01:01:43,000 Ak súčet alebo rozdiel medzi 872 01:01:43,000 --> 01:01:45,000 v závislosti na tom, ako to urobiť, je to párne číslo. 873 01:01:45,000 --> 01:01:49,000 Potom počítač dostane zmätený, či je to 2,5; 874 01:01:49,000 --> 01:01:52,000 sa presuniete vľavo alebo vpravo určiť, ktoré je na stred? 875 01:01:52,000 --> 01:01:54,000 Mám to. 876 01:01:54,000 --> 01:01:56,000 Ukazuje sa, že s delení, 877 01:01:56,000 --> 01:01:59,000 nemáme vôbec dostať tieto plávajúcou desatinnou čiarkou čísla. 878 01:01:59,000 --> 01:02:01,000 Nikdy sme sa desatinu. 879 01:02:01,000 --> 01:02:04,000 Je to úplne zlikvidovať. 880 01:02:04,000 --> 01:02:08,000 Ak máte počítač delenie dvoch int premenné, 881 01:02:08,000 --> 01:02:11,000 a jeden je 7, a druhý je 2, 882 01:02:11,000 --> 01:02:13,000 nezískate 3,5 ako výsledok. 883 01:02:13,000 --> 01:02:16,000 Bude sa 3. 884 01:02:16,000 --> 01:02:19,000 Zvyšok budú zahodené, tak je to skutočne zaokrúhlenie 885 01:02:19,000 --> 01:02:24,000 nie je bicykel, ale podlaha, ak ste oboznámení s tým v matematike, 886 01:02:24,000 --> 01:02:27,000 kde ste úplne zbaviť desatinné, 887 01:02:27,000 --> 01:02:31,000 a tak ste v podstate skracovať ju nadol na najbližšiu 888 01:02:31,000 --> 01:02:33,000 Vcelku pozície, na najbližšie celé číslo. 889 01:02:33,000 --> 01:02:38,000 [Študent] Ale potom je to problematické, pretože ak máte pole 7 prvkov 890 01:02:38,000 --> 01:02:43,000 potom to automaticky berie tretí prvok z stredu miesto 4.. 891 01:02:43,000 --> 01:02:46,000 Ako sa s tým vysporiadať? 892 01:02:46,000 --> 01:02:49,000 Je to problematické, pretože ak sme mali rad 7, 893 01:02:49,000 --> 01:02:54,000 to by som vyzdvihnúť 3. miesto 4.. 894 01:02:54,000 --> 01:02:56,000 Mohli by ste vysvetliť trochu viac? 895 01:02:56,000 --> 01:02:59,000 [Študent] Pretože ak máte 7 prvkov potom 4. prvok 896 01:02:59,000 --> 01:03:04,000 by byť stredom, nie? 897 01:03:04,000 --> 01:03:07,000 Nezabudnite svoj komentár o tom, že nula indexované, hoci. 898 01:03:07,000 --> 01:03:10,000 [Študent] Jo, tak v polohe 3. To by bolo na stred. 899 01:03:10,000 --> 01:03:12,000 Jo. 900 01:03:12,000 --> 01:03:16,000 Oh, dobre. Chápem, čo máte na mysli. 901 01:03:16,000 --> 01:03:19,000 Je to trochu divné, ako sme si zvyknúť na celej tejto predstave 902 01:03:19,000 --> 01:03:22,000 ako sa zbaviť desatinných miest. 903 01:03:22,000 --> 01:03:26,000 To je skvelé miesto. 904 01:03:26,000 --> 01:03:30,000 Poďme dokončiť túto hore. 905 01:03:30,000 --> 01:03:32,000 Sme počíta náš stred. 906 01:03:32,000 --> 01:03:37,000 >> Testujeme, či naše ihla rovná strednej hodnote. 907 01:03:37,000 --> 01:03:41,000 Sme tlač, že sme ho našli, ale naozaj, čo chceme robiť v tejto situácii? 908 01:03:41,000 --> 01:03:46,000 Našli sme to, a tak chceme, aby volajúci, že sme ho našli. 909 01:03:46,000 --> 01:03:49,000 Máme funkciu, ktorá je boolean zadaný funkcie. 910 01:03:49,000 --> 01:03:54,000 Ako sme signál k volajúcemu našej funkcie, ktoré sme pripravení ísť 911 01:03:54,000 --> 01:03:58,000 je povieme, "Hele, to je pravda." 912 01:03:58,000 --> 01:04:00,000 Ako by sme to robili, Kevin? 913 01:04:00,000 --> 01:04:02,000 Ste kývol hlavou. >> [Kevin] Pridať return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Presne tak, vráti true. 915 01:04:06,000 --> 01:04:12,000 Teraz, ak to nie je rovnaké, ako by sa pozrieme na ľavej polovici? 916 01:04:12,000 --> 01:04:16,000 Nejaké nápady? 917 01:04:16,000 --> 01:04:18,000 Stella, nejaké nápady? 918 01:04:18,000 --> 01:04:21,000 Musíte nastaviť novú pozíciu pre koniec. 919 01:04:21,000 --> 01:04:23,000 Jo. 920 01:04:23,000 --> 01:04:29,000 Takže musíme urobiť pozície stredu - koniec. 921 01:04:29,000 --> 01:04:33,000 Great. 922 01:04:33,000 --> 01:04:36,000 Musíme nastaviť novú pozíciu na konci 923 01:04:36,000 --> 01:04:38,000 pozrieť sa na ľavej polovici. 924 01:04:38,000 --> 01:04:41,000 To bolo to, čo sme o tom hovorili pred, kde 925 01:04:41,000 --> 01:04:44,000 Stále sa vracia k tomuto príkladu. 926 01:04:44,000 --> 01:04:50,000 Mám začať tu, a potom som sa nakoniec všetci cestu cez tú. 927 01:04:50,000 --> 01:04:53,000 >> Opäť platí, že ak sme hľadali 15, a náš stred je 16, 928 01:04:53,000 --> 01:04:56,000 a my si uvedomiť, "Oops, 16 je väčší. 929 01:04:56,000 --> 01:04:59,000 Chceme presunúť na ľavú polovicu. " 930 01:04:59,000 --> 01:05:02,000 Potom by sme presunúť koniec 15, 931 01:05:02,000 --> 01:05:06,000 a my, že tým, že jeden od stredu 932 01:05:06,000 --> 01:05:09,000 a nastavení, ktoré ako náš nový konci. 933 01:05:09,000 --> 01:05:12,000 Podobne, ak sa chcete pozrieť na pravú polovicu, ako by to robili? 934 01:05:12,000 --> 01:05:14,000 Máte nejaký nápad? 935 01:05:14,000 --> 01:05:22,000 [Študent] Stačí nastaviť začať midpoint + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Great. 937 01:05:24,000 --> 01:05:29,000 A teraz v prípade, že sme nič nenájdeme, 938 01:05:29,000 --> 01:05:32,000 to, že sa postaral o pre nás? 939 01:05:32,000 --> 01:05:36,000 Daniel, to, že si postarané o nás? 940 01:05:36,000 --> 01:05:38,000 [Daniel] č 941 01:05:38,000 --> 01:05:40,000 [Nate] Ak by sme robiť to cez celé pole a my nič nenájdeme, 942 01:05:40,000 --> 01:05:42,000 kde by to byť postarané, alebo by sme mali postarať sa o to? 943 01:05:42,000 --> 01:05:44,000 [Daniel], kým podmienka. 944 01:05:44,000 --> 01:05:48,000 [Nate] Jo, a zároveň podmienka, presne. 945 01:05:48,000 --> 01:05:51,000 To sa bude starať o prechádza celé pole, ak nenájdeme nič. 946 01:05:51,000 --> 01:05:53,000 Tento cyklus while skončí. 947 01:05:53,000 --> 01:05:56,000 Nikdy nebudeme sa stretli túto podmienku, 948 01:05:56,000 --> 01:06:03,000 a môžeme sa vrátiť false. 949 01:06:03,000 --> 01:06:10,000 Môžeme tiež nechať túto možnosť, ak tu takto 950 01:06:10,000 --> 01:06:14,000 pretože ak túto možnosť, ak tvrdenie je pravdivé, 951 01:06:14,000 --> 01:06:16,000 a naša funkcia vráti, 952 01:06:16,000 --> 01:06:21,000 a tak budeme podstate preruší táto funkcia v tomto bode 953 01:06:21,000 --> 01:06:24,000 keď sa vrátime true. 954 01:06:24,000 --> 01:06:28,000 Ale čo sa stane s touto štruktúrou tu? 955 01:06:28,000 --> 01:06:34,000 Bude to fungovať úplne, alebo je tam nejaký logický chyba tam? 956 01:06:34,000 --> 01:06:37,000 >> Tam je nejaký logický chyba tam, s tým, ako to nastaviť. 957 01:06:37,000 --> 01:06:40,000 Čo by mohlo byť? 958 01:06:40,000 --> 01:06:43,000 [Študent] Prečo potrebujete - a + 1s? 959 01:06:43,000 --> 01:06:47,000 , Ktorá stanovuje našu ponuku tak, aby boli naše nová ľavá polovica a pravá polovica. 960 01:06:47,000 --> 01:06:51,000 [Študent] Ale prečo by nemohla to urobiť bez toho, aby - 1s a + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Dalo by sa nastaviť rovná stredu? 962 01:06:53,000 --> 01:07:04,000 Čo by mohlo byť problematické, že? 963 01:07:04,000 --> 01:07:08,000 [Študent] Myslím, že je to neefektívne, pretože máte kontrolu hodnotu, ktorá je už skontrolovať. 964 01:07:08,000 --> 01:07:11,000 [Nate] Presne tak, Sam je úplne pravdu. 965 01:07:11,000 --> 01:07:15,000 Ak sa nastaviť koniec a začne sa rovná stredu 966 01:07:15,000 --> 01:07:18,000 miesto - 1 a + 1 zamyslene, 967 01:07:18,000 --> 01:07:22,000 v určitom okamihu v budúcnosti budeme nakoniec kontrolu stred znova. 968 01:07:22,000 --> 01:07:26,000 [Študent] Začal som PSet, a potom som mal niečo také 969 01:07:26,000 --> 01:07:30,000 kde som zabudol + 1, a to uviazol v nekonečnej slučke. 970 01:07:30,000 --> 01:07:34,000 Jasne, pretože v určitom okamihu budete nikdy dostať začať a skončiť 971 01:07:34,000 --> 01:07:39,000 skutočne prekrývajú. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Je tu ešte jedna logická chyba, a to je, že by to malo byť určite 974 01:07:44,000 --> 01:07:48,000 else if. 975 01:07:48,000 --> 01:07:55,000 Prečo by to mohlo byť? 976 01:07:55,000 --> 01:07:59,000 >> Dôvodom je, pokiaľ to nie je inak, ak-si videl, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Jo, pretože meníte koncový bod. 978 01:08:02,000 --> 01:08:05,000 [Nate] Presne tak. 979 01:08:05,000 --> 01:08:07,000 Meníme koncový bod, 980 01:08:07,000 --> 01:08:12,000 a ak je to napísané takto-Dáme aby medzery medzi- 981 01:08:12,000 --> 01:08:14,000 bude kontrolovať tento prípad. 982 01:08:14,000 --> 01:08:18,000 Tento prípad, ak sa podarí, zmizne, z funkcie. 983 01:08:18,000 --> 01:08:21,000 Potom to bude kontrolovať túto ďalší prípad, 984 01:08:21,000 --> 01:08:24,000 a ak je to podarí, upraví na koncový bod, 985 01:08:24,000 --> 01:08:28,000 a potom to bude pokračovať a zistiť tento prípad. 986 01:08:28,000 --> 01:08:31,000 Ale v tomto bode, nechceme, aby aj naďalej kontrolu. 987 01:08:31,000 --> 01:08:35,000 Našťastie, sme sa obnoviť polovicu tu, 988 01:08:35,000 --> 01:08:39,000 a vieme, že tento prípad nebude úspešná. 989 01:08:39,000 --> 01:08:44,000 Ale my určite chceme dať else, ak tam 990 01:08:44,000 --> 01:08:48,000 aj napriek tomu, že by mohol v tomto prípade 991 01:08:48,000 --> 01:08:52,000 pretože nie sme nastavenie stredového bodu, by to robiť rozdiel? 992 01:08:52,000 --> 01:08:54,000 Nie, pretože tieto prípady sú exkluzívne. 993 01:08:54,000 --> 01:08:58,000 Opäť, môj zlý. 994 01:08:58,000 --> 01:09:01,000 Nechceme, myslím, je potrebné túto else if. 995 01:09:01,000 --> 01:09:05,000 Môžeme to skúsiť a spustiť ho a uvidíte, čo sa stane. 996 01:09:05,000 --> 01:09:08,000 Budova, došlo k chybe. 997 01:09:08,000 --> 01:09:12,000 Je to pravdepodobne preto, že som opustil to b je a ŽP tu. 998 01:09:12,000 --> 01:09:14,000 Mám viac tých, ktorí sa na vrchole? 999 01:09:14,000 --> 01:09:16,000 To nevyzerá to. 1000 01:09:16,000 --> 01:09:20,000 My oddialiť, vybudovať, 1001 01:09:20,000 --> 01:09:24,000 tam to ide, takže teraz, keď hľadáme 15, 1002 01:09:24,000 --> 01:09:28,000 Áno. 1003 01:09:28,000 --> 01:09:30,000 Dovoľte mi, aby som Zoom 1004 01:09:30,000 --> 01:09:33,000 15, áno. Môžeme spustiť znova. 1005 01:09:33,000 --> 01:09:36,000 Nahranie zdrojový kód, stavebné, beh. 1006 01:09:36,000 --> 01:09:41,000 Môžeme hľadať niečo ako 13, 1007 01:09:41,000 --> 01:09:45,000 a nemáme dostať niečo vytlačiť, tak to nie je zistenie, že pre nás. 1008 01:09:45,000 --> 01:09:51,000 To je skvelé, pretože to nie je v našom zozname. 1009 01:09:51,000 --> 01:09:53,000 >> Sme teraz oneskorene. 1010 01:09:53,000 --> 01:09:55,000 To bude mať to pre tento týždeň. 1011 01:09:55,000 --> 01:10:00,000 Vďaka za vstup, a uvidíme sa neskôr. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]