1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Oddelek 3 - Več Udobna] 2 00:00:02,570 --> 00:00:05,070 [Rob Bowden - Harvard University] 3 00:00:05,070 --> 00:00:07,310 >> [To je CS50. - CS50.TV] 4 00:00:07,310 --> 00:00:12,700 >> Zato je prvo vprašanje nenavadno oblikovan. 5 00:00:12,700 --> 00:00:17,480 GDB vam omogoča, da "debug" program, ampak, natančneje, kaj to kaj si naredil? 6 00:00:17,480 --> 00:00:22,590 Jaz bom odgovoril, da je eden, in ne vem, kaj točno pričakuje, 7 00:00:22,590 --> 00:00:27,910 tako da sem ugibati, da je nekaj po vzoru ji omogoča, da korak za korakom 8 00:00:27,910 --> 00:00:31,540 sprehod skozi program, delajo z njim, spreminjanje spremenljivke, vse te stvari - 9 00:00:31,540 --> 00:00:34,270 v bistvu popolnoma nadzoruje izvajanje programa 10 00:00:34,270 --> 00:00:38,410 in preglejte dane del izvajanja programa. 11 00:00:38,410 --> 00:00:43,030 Torej te funkcije vam debug stvari. 12 00:00:43,030 --> 00:00:44,830 Ok. 13 00:00:44,830 --> 00:00:50,520 Zakaj dvojiška iskalna zahteva, da se razvrstijo niz? 14 00:00:50,520 --> 00:00:53,360 Kdo želi odgovoriti na to? 15 00:00:56,120 --> 00:01:00,070 [Študent] Ker to ne deluje, če ni urejeno. >> Ja. [Smeh] 16 00:01:00,070 --> 00:01:04,910 Če ni urejen, potem je nemogoče, da ga razdelili na pol 17 00:01:04,910 --> 00:01:07,850 in vem, da je vse, kar je na levi strani je manjša in vse na desni 18 00:01:07,850 --> 00:01:10,490 večji od srednje vrednosti. 19 00:01:10,490 --> 00:01:12,790 Zato je treba sortirati. 20 00:01:12,790 --> 00:01:14,170 Ok. 21 00:01:14,170 --> 00:01:17,570 Zakaj je mehurček nekako v O n kvadrat? 22 00:01:17,570 --> 00:01:23,230 Ali kdo najprej želeli, da bi lahko zelo hitro na visoki ravni pregled, kaj mehurček vrste je? 23 00:01:25,950 --> 00:01:33,020 [Študent] Vanj gredo skozi vsak element in preverite prvih nekaj elementov. 24 00:01:33,020 --> 00:01:37,150 Če si od tam, kjer jih zamenjali, potem preverite naslednjih nekaj elementov, in tako naprej. 25 00:01:37,150 --> 00:01:40,770 Ko pridete do konca, potem veste, da je največji element postavi na koncu, 26 00:01:40,770 --> 00:01:42,750 tako da prezreti, da je eden potem naprej skozi, 27 00:01:42,750 --> 00:01:48,490 in vsakič, ko boste morali preveriti 1 manj element, dokler ne bo nobenih sprememb. >> Ja. 28 00:01:48,490 --> 00:01:58,470 To se imenuje bubble sort, ker če ste flip matriko na svoji strani, tako da je gor in dol, vertikalno, 29 00:01:58,470 --> 00:02:03,100 potem bodo velike vrednosti potopil na dno in majhne vrednosti, bo balon na vrh. 30 00:02:03,100 --> 00:02:05,210 To je, kako je dobil svoje ime. 31 00:02:05,210 --> 00:02:08,220 In ja, greš skozi. 32 00:02:08,220 --> 00:02:11,190 Kar naprej gre skozi niz, swapping večjo vrednost 33 00:02:11,190 --> 00:02:14,040 , da bi dobili največje vrednosti do dna. 34 00:02:14,040 --> 00:02:17,500 >> Zakaj je O n kvadrat? 35 00:02:18,690 --> 00:02:24,620 Prvič, ali ima kdo rad povedal, zakaj je to O n kvadrat? 36 00:02:24,620 --> 00:02:28,760 [Študent] Ker za vsako vožnjo gre n-krat. 37 00:02:28,760 --> 00:02:32,100 Lahko samo se prepričajte, da ste vzeli Največji element vso pot navzdol, 38 00:02:32,100 --> 00:02:35,230 potem boste morali ponoviti, da je za čim več elementov. >> Ja. 39 00:02:35,230 --> 00:02:41,800 Torej, ne pozabite, kaj velik O pomeni in kaj pomeni velike Omega. 40 00:02:41,800 --> 00:02:50,560 Veliki O je kot zgornja meja, kako počasi lahko dejansko deluje. 41 00:02:50,560 --> 00:02:58,990 Torej z besedami, svoj 'O, o n kvadrat, ni O n ali pa bi bilo lahko vozijo 42 00:02:58,990 --> 00:03:02,640 v linearnem času, vendar pa je O n kubikov 43 00:03:02,640 --> 00:03:06,390 ker je omejen z O n kubikov. 44 00:03:06,390 --> 00:03:12,300 Če je to, ki ga omejuje O n kvadrat, potem je omejena tudi n kubikov. 45 00:03:12,300 --> 00:03:20,280 Tako je n kvadrat, v najslabšem primeru pa absolutno ne more storiti bolje, kot n kvadrat, 46 00:03:20,280 --> 00:03:22,830 kar je razlog, zakaj je za n O kvadrat. 47 00:03:22,830 --> 00:03:31,200 Torej, da vidim nekoliko matematiko, kako se pride ven, da je n kvadrat, 48 00:03:31,200 --> 00:03:40,530 Če imamo pet stvari v našem seznamu, prvič, koliko zamenjav bi lahko potencialno potrebujete, da bi 49 00:03:40,530 --> 00:03:47,170 da bi to dobila? Kaj je dejansko le - 50 00:03:47,170 --> 00:03:52,040 Koliko zamenjave se bomo morali v prvi zavoj vrste mehurček skozi niz? 51 00:03:52,040 --> 00:03:53,540 [Študent] n - 1. >> Ja. 52 00:03:53,540 --> 00:03:58,340 >> Če so 5 elementov, bomo morali narediti n - 1. 53 00:03:58,340 --> 00:04:01,100 Nato na drugem pa, koliko zamenjav bomo morali narediti? 54 00:04:01,100 --> 00:04:03,440 [Študent] n - 2. >> Ja. 55 00:04:03,440 --> 00:04:11,640 In tretja bo n - 3, nato pa zaradi lažjega bom pisal v zadnjih dveh 56 00:04:11,640 --> 00:04:15,270 kot potem bomo morali narediti 2 zamenjavami in 1 zamenjave. 57 00:04:15,270 --> 00:04:19,899 Mislim, da je zadnja lahko ali pa ne, dejansko moralo zgoditi. 58 00:04:19,899 --> 00:04:22,820 Ali je zamenjava? Ne vem. 59 00:04:22,820 --> 00:04:26,490 Tako so skupni zneski za zamenjave ali vsaj primerjave, ki jih morate narediti. 60 00:04:26,490 --> 00:04:29,910 Tudi če ne boste zamenjali, še vedno je treba primerjati vrednosti. 61 00:04:29,910 --> 00:04:33,910 Torej, obstaja n - 1 primerjave v prvi vožnji skozi niz. 62 00:04:33,910 --> 00:04:42,050 Če želite preurediti te stvari, kaj je dejansko naredimo 6 stvari, tako da bi se zlagajo lepo, 63 00:04:42,050 --> 00:04:44,790 in potem bom naredil 3, 2, 1. 64 00:04:44,790 --> 00:04:49,910 Torej samo prerazporejanje teh zneskov, želimo, da bi videli, koliko naredimo primerjavo 65 00:04:49,910 --> 00:04:52,700 v celotnem algoritmu. 66 00:04:52,700 --> 00:04:56,550 Torej, če bi te ljudi tukaj, 67 00:04:56,550 --> 00:05:07,470 Nato smo še vedno le seštevek pa veliko primerjav ni bilo. 68 00:05:07,470 --> 00:05:13,280 Ampak, če povzamem to in povzamemo te in te povzamemo, 69 00:05:13,280 --> 00:05:18,130 je še vedno isti problem. Pravkar smo povzeli te posebne skupine. 70 00:05:18,130 --> 00:05:22,400 >> Torej, zdaj smo seštevek 3 n letih. To ni samo 3 n letih. 71 00:05:22,400 --> 00:05:27,650 Vedno bo n / 2 n letih. 72 00:05:27,650 --> 00:05:29,430 Torej, tukaj se zgodi, da imajo 6. 73 00:05:29,430 --> 00:05:34,830 Če bi imeli 10 stvari, potem lahko to storimo skupine za 5 različnih parov stvari 74 00:05:34,830 --> 00:05:37,180 in na koncu z n + n + n + n + n. 75 00:05:37,180 --> 00:05:45,840 Torej, ste vedno tekoč, da bi dobili n / 2 n-ih, zato bo to smo ga zapišete ven n kvadrat / 2. 76 00:05:45,840 --> 00:05:48,890 In tako, čeprav je to faktor polovico, ki se zgodi, da pridejo v 77 00:05:48,890 --> 00:05:54,190 zaradi dejstva, da se z vsako ponovitvijo čez niz primerjamo 1 manj 78 00:05:54,190 --> 00:05:58,040 tako, da je, kako smo dobili več kot 2, vendar je še vedno n kvadrat. 79 00:05:58,040 --> 00:06:01,650 Ne skrbi konstantni faktor za polovico. 80 00:06:01,650 --> 00:06:07,760 Torej, veliko velik stvari O, kot je ta odvisna le vrste početje to vrsto matematike, 81 00:06:07,760 --> 00:06:12,260 tem aritmetične vsote in geometrične serije stvari, 82 00:06:12,260 --> 00:06:17,750 vendar je večina od njih v tem času so zelo enostavna. 83 00:06:17,750 --> 00:06:19,290 Ok. 84 00:06:19,290 --> 00:06:24,430 Zakaj je vključitev neke Omega n? Kaj omega pomeni? 85 00:06:24,430 --> 00:06:27,730 [2 študentje govorijo naenkrat - nerazumljivi] >> Ja. 86 00:06:27,730 --> 00:06:30,630 Omega si lahko zamislite kot spodnja meja. 87 00:06:30,630 --> 00:06:36,550 >> Torej, ne glede na to, kako učinkovito je vaše vstavljanje sortiranje algoritem, 88 00:06:36,550 --> 00:06:41,810 glede na seznam, ki je bila izrečena v, ima vedno primerjati vsaj n stvari 89 00:06:41,810 --> 00:06:44,620 ali pa se mora ponoviti čez n stvari. 90 00:06:44,620 --> 00:06:47,280 Zakaj je tako? 91 00:06:47,280 --> 00:06:51,190 [Študent] Ker če je seznam že urejen, nato pa skozi prvo ponovitev 92 00:06:51,190 --> 00:06:54,080 lahko zagotavljajo le, da je prvi element je najmanj, 93 00:06:54,080 --> 00:06:56,490 in drugo ponovitev lahko jamčijo le za prva dva sta 94 00:06:56,490 --> 00:07:00,010 ker ne veste, da je razvrščena ostali na seznamu. >> Ja. 95 00:07:00,010 --> 00:07:08,910 Če se boste peljali v popolnoma izločen seznam, vsaj moraš iti čez vse elemente 96 00:07:08,910 --> 00:07:12,180 vidim, da ni treba ničesar okoli premakniti. 97 00:07:12,180 --> 00:07:14,720 Torej gre čez seznam in rekel: oh, to je že urejen, 98 00:07:14,720 --> 00:07:18,240 da je nemogoče, da veš, to je razvrščenih dokler se ne preveri vsak element 99 00:07:18,240 --> 00:07:20,660 videti, da so v urejenih redu. 100 00:07:20,660 --> 00:07:25,290 Tako je spodnja meja za razvrščanje vstavljanja je omega n. 101 00:07:25,290 --> 00:07:28,210 Kaj se v najslabšem primeru teče čas vrste spajanja, 102 00:07:28,210 --> 00:07:31,390 v najslabšem primeru pa veliki O.? 103 00:07:31,390 --> 00:07:37,660 Torej, v najslabšem primeru pa, kako zlivanjem deluje? 104 00:07:42,170 --> 00:07:43,690 [Študent] N log n. >> Ja. 105 00:07:43,690 --> 00:07:49,990 Najhitrejši splošna sortiranje algoritmi n log n. Ne moreš narediti bolje. 106 00:07:51,930 --> 00:07:55,130 >> Obstajajo posebni primeri, in če bomo imeli čas danes - ampak verjetno won't - 107 00:07:55,130 --> 00:07:59,330 smo lahko videli tisti, ki počne bolje kot n log n. 108 00:07:59,330 --> 00:08:04,050 Toda v splošnem primeru, da ne morete narediti bolje kot n log n. 109 00:08:04,050 --> 00:08:09,680 In nekako združiti zgodi, da se tisti, ki ga je treba vedeti, da je to seveda n log n. 110 00:08:09,680 --> 00:08:13,260 In tako bomo dejansko izvajanje, ki še danes. 111 00:08:13,260 --> 00:08:18,070 In končno, v največ treh stavkih, kako deluje izbirni vrstni? 112 00:08:18,070 --> 00:08:20,370 Ali kdo želi odgovoriti, pa bom prešteti svoje kazni 113 00:08:20,370 --> 00:08:22,390 ker če greš čez 3 - 114 00:08:25,530 --> 00:08:28,330 Ali kdo spomnite izbiro vrste? 115 00:08:31,280 --> 00:08:37,809 Izbor vrste je običajno precej težko zapomniti samo z imenom. 116 00:08:37,809 --> 00:08:45,350 Pravkar ste Ponovil čez polje, je bil ne glede na največjo vrednost ali najmanjšo - 117 00:08:45,350 --> 00:08:47,290 karkoli da ste noter razvrščanje 118 00:08:47,290 --> 00:08:50,750 Torej, recimo, da smo razvrščanje od najmanjšega do največjega. 119 00:08:50,750 --> 00:08:55,250 Vi izbirate čez polje, ki išče kar je minimalni element, 120 00:08:55,250 --> 00:08:59,750 ga izberete, nato pa samo zamenjal vse, kar je na prvem mestu. 121 00:08:59,750 --> 00:09:04,090 In nato na drugi prelaz čez polje, poiščite MIP znova 122 00:09:04,090 --> 00:09:07,490 ga izberete, nato pa ga zamenjajte s tistim, kar je na drugem mestu. 123 00:09:07,490 --> 00:09:10,650 Tako smo šele izbiranje najmanjše vrednosti 124 00:09:10,650 --> 00:09:16,050 in jih vstavite v sprednji del niza, dokler se razvrstijo to. 125 00:09:19,210 --> 00:09:21,560 Vprašanja o tem? 126 00:09:21,560 --> 00:09:25,710 >> To neizogibno pojavlja v oblikah, ki jih morate izpolniti, ko ste oddajo pset. 127 00:09:29,010 --> 00:09:32,360 Tisti, ki so v bistvu odgovore na njih. 128 00:09:32,360 --> 00:09:34,230 Ok, zdaj kodiranja težav. 129 00:09:34,230 --> 00:09:40,140 Sem že poslal po e-pošti - Ali je kdo ni dobil to e-pošto? Ok. 130 00:09:40,140 --> 00:09:46,630 Sem že poslala po elektronski pošti prostor, da bomo uporabljali, 131 00:09:46,630 --> 00:09:52,120 in če kliknete na moje ime - tako da mislim, da bom na dnu 132 00:09:52,120 --> 00:09:57,170 ker je zavoljo r - vendar, če kliknete na moje ime, boš videl 2 popravke. 133 00:09:57,170 --> 00:10:02,650 Revizija 1 se bo sem že kopirali in prilepili kodo v prostore 134 00:10:02,650 --> 00:10:06,900 Za iskalni stvar, ki jo boš moral izvajati. 135 00:10:06,900 --> 00:10:10,540 In Revizija 2 je neke vrste stvar, ki jo izvajajo po tem. 136 00:10:10,540 --> 00:10:15,770 Torej, lahko kliknete na mojem revizije 1 in delo od tam. 137 00:10:17,350 --> 00:10:22,060 In zdaj želimo izvajati binarno iskanje. 138 00:10:22,060 --> 00:10:26,470 >> Ali kdo želi samo dati psevdokod visoki ravni pojasnilo 139 00:10:26,470 --> 00:10:31,440 na kaj bomo morali storiti za iskanje? Ja. 140 00:10:31,440 --> 00:10:36,170 [Študent] Ti samo sredi polja, in videli, če kaj iščete 141 00:10:36,170 --> 00:10:38,650 je manjša kot ali več kot to. 142 00:10:38,650 --> 00:10:41,080 In če je to manj, greš do polovice, ki je manj, 143 00:10:41,080 --> 00:10:44,750 in če je več, pojdi na polovico, ki je več in to ponovite, dokler ne boste le dobili eno stvar. 144 00:10:44,750 --> 00:10:46,570 [Bowden] Ja. 145 00:10:46,570 --> 00:10:51,320 Obvestilo, da je naša številke matrika že urejen, 146 00:10:51,320 --> 00:10:57,190 in tako to pomeni, da bomo lahko to izkoristimo in smo lahko najprej preverite, 147 00:10:57,190 --> 00:11:00,390 ok, iščem številko 50. 148 00:11:00,390 --> 00:11:03,720 Lahko grem v sredini. 149 00:11:03,720 --> 00:11:07,380 Bližnji je težko določiti, kdaj je še veliko stvari, 150 00:11:07,380 --> 00:11:10,820 ampak recimo, da bomo vedno obrezovanje na sredini. 151 00:11:10,820 --> 00:11:14,420 Torej, tukaj imamo 8 stvari, tako da bi bila srednja 16. 152 00:11:14,420 --> 00:11:17,330 Iščem 50, tako da je 50 več kot 16. 153 00:11:17,330 --> 00:11:21,310 Sedaj lahko sem v bistvu, da mojo zbirko v teh elementih. 154 00:11:21,310 --> 00:11:23,450 Lahko mečejo vse od 16 več. 155 00:11:23,450 --> 00:11:27,440 Zdaj mi je matrika samo te 4 elemente, in ponavljam. 156 00:11:27,440 --> 00:11:31,910 Torej želim, da bi našli sredi znova, kar se bo 42. 157 00:11:31,910 --> 00:11:34,730 42 je manj kot 50, tako da sem lahko vrgel proč teh dveh elementov. 158 00:11:34,730 --> 00:11:36,890 To je moja preostala polja. 159 00:11:36,890 --> 00:11:38,430 Grem poiskati sredino znova. 160 00:11:38,430 --> 00:11:42,100 Mislim, da je bilo 50 slab zgled, ker sem bil vedno metali stran stvari v levo, 161 00:11:42,100 --> 00:11:48,280 vendar v istem ukrepu, če sem iskal nekaj 162 00:11:48,280 --> 00:11:52,100 in to je manj kot elementa sem trenutno iščejo, 163 00:11:52,100 --> 00:11:55,080 potem bom vrgel stran vse na desni. 164 00:11:55,080 --> 00:11:58,150 Torej, zdaj moramo izvajati to. 165 00:11:58,150 --> 00:12:02,310 Obvestilo, da moramo opraviti v velikosti. 166 00:12:02,310 --> 00:12:06,730 Prav tako ni mogoče morali trdo oznako velikosti. 167 00:12:06,730 --> 00:12:11,640 Torej, če se znebimo da # define - 168 00:12:19,630 --> 00:12:21,430 Ok. 169 00:12:21,430 --> 00:12:27,180 Kako lepo razbrati, kaj je velikost matrike številk je trenutno? 170 00:12:27,180 --> 00:12:30,950 >> Koliko elementi v matriki števil? 171 00:12:30,950 --> 00:12:33,630 [Študentske] Številke, držala,. Dolžina? 172 00:12:33,630 --> 00:12:36,600 [Bowden] To ne obstaja v C. 173 00:12:36,600 --> 00:12:38,580 Rabite. Dolžina. 174 00:12:38,580 --> 00:12:42,010 Polja nimajo lastnosti, tako da ni dolžina last nizi 175 00:12:42,010 --> 00:12:45,650 da bo samo dam pa dolgo se zgodi, da bo. 176 00:12:48,180 --> 00:12:51,620 [Študent] Glej koliko pomnilnika ima in razdeliti za koliko - >> Ja. 177 00:12:51,620 --> 00:12:55,810 Torej, kako smo lahko videli, koliko pomnilnika ima? >> [Študent] sizeof. >> Ja, sizeof. 178 00:12:55,810 --> 00:13:01,680 Sizeof je subjekt, ki se dogaja, da se vrnete na velikost matrike številk. 179 00:13:01,680 --> 00:13:10,060 In to bo pa veliko cela obstajajo krat večje celo število 180 00:13:10,060 --> 00:13:14,050 saj to je, koliko pomnilnika je dejansko prejemajo. 181 00:13:14,050 --> 00:13:17,630 Torej, če želim, da veliko stvari v matriki, 182 00:13:17,630 --> 00:13:20,560 potem bom želel deliti z velikostjo celo število. 183 00:13:22,820 --> 00:13:26,010 Ok. Tako, da mi omogoča prehod v velikosti tukaj. 184 00:13:26,010 --> 00:13:29,430 Zakaj moram prenesti v velikosti sploh? 185 00:13:29,430 --> 00:13:38,570 Zakaj ne morem storiti tukaj int velikost = sizeof (senu) / sizeof (int)? 186 00:13:38,570 --> 00:13:41,490 Zakaj se to ne dela? 187 00:13:41,490 --> 00:13:44,470 [Študent] To ni globalna spremenljivka. 188 00:13:44,470 --> 00:13:51,540 [Bowden] Haystack obstaja in da smo mimo v številu, senu, 189 00:13:51,540 --> 00:13:54,700 in to je nekako foreshadowing, kaj je, da pridejo. Ja. 190 00:13:54,700 --> 00:14:00,170 [Študent] Haystack je le sklicevanje na to, da bi se vrnil, kako velika je ta sklicevanja. 191 00:14:00,170 --> 00:14:02,150 Ja. 192 00:14:02,150 --> 00:14:09,000 Dvomim v predavanju, ki ste jih videli sveženj še res, kajne? 193 00:14:09,000 --> 00:14:11,270 Pravkar smo govorili o tem. 194 00:14:11,270 --> 00:14:16,090 Torej bo sveženj, kjer so vse vaše spremenljivk se bodo shranjeni. 195 00:14:16,090 --> 00:14:19,960 >> Vsak spomin, ki je namenjen za lokalne spremenljivke se dogaja v plasteh, 196 00:14:19,960 --> 00:14:24,790 vsaka funkcija dobi svoj prostor na sklad, sklad lastnih okvir je, kako se imenuje. 197 00:14:24,790 --> 00:14:31,590 Tako ima žetonov glavni okvir, znotraj njega se dogaja, da obstaja ta niz številk, 198 00:14:31,590 --> 00:14:34,270 in to se dogaja, da so velikosti (dolžina tipa številke). 199 00:14:34,270 --> 00:14:38,180 To se dogaja, da imajo velikosti številk, ločenih glede na velikost elementov, 200 00:14:38,180 --> 00:14:42,010 ampak, da so vsi živi znotraj okvirja dimnik je glavni. 201 00:14:42,010 --> 00:14:45,190 Ko pravimo iskanje, iskanje dobi svojo žetonov okvir, 202 00:14:45,190 --> 00:14:48,840 svoj prostor za shranjevanje vseh njenih lokalnih spremenljivk. 203 00:14:48,840 --> 00:14:56,420 Toda te trditve - tako senu ni kopija tega celotnega niza. 204 00:14:56,420 --> 00:15:00,990 Mi ne gre v celotnem matrike kot kopija v iskanju. 205 00:15:00,990 --> 00:15:04,030 Prav tako gre za sklicevanje na ta niz. 206 00:15:04,030 --> 00:15:11,470 Tako lahko dostop do teh številk iskanje prek te odločbe. 207 00:15:11,470 --> 00:15:17,100 Še vedno dostop do stvari, ki živijo znotraj okvirja dimnika je glavni, 208 00:15:17,100 --> 00:15:22,990 ampak v bistvu, ko smo dobili namig, ki bi morala biti kmalu 209 00:15:22,990 --> 00:15:24,980 To je tisto, kar kazalci. 210 00:15:24,980 --> 00:15:29,400 Kazalci za sklicevanje na stvari, in jih lahko uporabite namig za dostop do stvari 211 00:15:29,400 --> 00:15:32,030 da so druge stvari, "dimnika okvirjev. 212 00:15:32,030 --> 00:15:37,660 Torej, čeprav je število na lokalni, glavno, lahko še vedno dostopate prek tega kazalca. 213 00:15:37,660 --> 00:15:41,770 Ampak saj to je samo kazalec, in to je samo predlog, 214 00:15:41,770 --> 00:15:45,040 sizeof (senu), prav tako vrne velikost glede same. 215 00:15:45,040 --> 00:15:47,950 To ne vrne velikost stvar, ki jo kaže. 216 00:15:47,950 --> 00:15:51,110 To ne vrne dejansko velikost številk. 217 00:15:51,110 --> 00:15:55,660 In tako se to ne bo delovalo, kot smo želeli. 218 00:15:55,660 --> 00:15:57,320 >> Vprašanja o tem? 219 00:15:57,320 --> 00:16:03,250 Kazalci bodo šli v občutno bolj krvave podrobnosti v tednih, ki prihajajo. 220 00:16:06,750 --> 00:16:13,740 In to je razlog, zakaj veliko stvari, ki jih vidite, večina stvari iskanja ali razvrščanje stvari, 221 00:16:13,740 --> 00:16:16,990 oni so skoraj vse bo potrebno, da bi dejansko velikost matrike, 222 00:16:16,990 --> 00:16:20,440 ker je v C, nimamo pojma, kaj je velikost matrike je. 223 00:16:20,440 --> 00:16:22,720 Moraš ročno prenesti noter 224 00:16:22,720 --> 00:16:27,190 In ne morete ročno prenesti v celotnem polju, ker ste pravkar poteka v referenčnem 225 00:16:27,190 --> 00:16:30,390 in ga ni mogoče dobiti velikosti od referenčne. 226 00:16:30,390 --> 00:16:32,300 Ok. 227 00:16:32,300 --> 00:16:38,160 Torej, zdaj smo želeli izvesti, kar je bilo razloženo prej. 228 00:16:38,160 --> 00:16:41,530 Delate lahko na njem za minuto, 229 00:16:41,530 --> 00:16:45,250 in vam ni treba skrbeti, da bi vse popolnoma 100% deluje. 230 00:16:45,250 --> 00:16:51,410 Samo napisati polovico psevdokod, kako misliš, da bi moral delovati. 231 00:16:52,000 --> 00:16:53,630 Ok. 232 00:16:53,630 --> 00:16:56,350 Ni potrebe, da se v celoti narejena s tem. 233 00:16:56,350 --> 00:17:02,380 Ampak ne, kdo se počutijo udobno s tem, kar imajo sedaj, 234 00:17:02,380 --> 00:17:05,599 kot nekaj, kar lahko delamo skupaj? 235 00:17:05,599 --> 00:17:09,690 Ali kdo želel prostovoljno? Ali bom naključno izbral. 236 00:17:12,680 --> 00:17:18,599 Ni nujno, da je prav z vsakim ukrepom, temveč nekaj, kar lahko spremenijo v delujoče stanje. 237 00:17:18,599 --> 00:17:20,720 [Študent] Seveda. >> Redu. 238 00:17:20,720 --> 00:17:27,220 Torej si lahko shranite revizijo s klikom na malo ikono Save. 239 00:17:27,220 --> 00:17:29,950 Si Ramya, kajne? >> [Študent] Ja. >> [Bowden] Ok. 240 00:17:29,950 --> 00:17:35,140 Torej, zdaj lahko ogledate revizijo in vsakdo lahko potegnite do revizije. 241 00:17:35,140 --> 00:17:38,600 In tukaj imamo - V redu. 242 00:17:38,600 --> 00:17:43,160 Torej Ramya šel z rekurzivno rešitev, ki je zagotovo dobra rešitev. 243 00:17:43,160 --> 00:17:44,970 Obstajata dva načina, ki jih lahko storite to težavo. 244 00:17:44,970 --> 00:17:48,060 Lahko to iterativno ali rekurzivno. 245 00:17:48,060 --> 00:17:53,860 Največ težav boste naleteli, da je mogoče narediti rekurzivno mogoče doseči tudi iterativno. 246 00:17:53,860 --> 00:17:58,510 Torej, tukaj smo storili rekurzivno. 247 00:17:58,510 --> 00:18:03,730 >> Ali nekdo želi opredeliti, kaj pomeni, da se funkcija rekurzivna? 248 00:18:07,210 --> 00:18:08,920 [Študent] Če imate funkcijo se klic 249 00:18:08,920 --> 00:18:13,470 in potem se klic, dokler ne pride ven z res in resnično. >> Ja. 250 00:18:13,470 --> 00:18:17,680 Rekurzivna funkcija je samo funkcija, ki se imenuje. 251 00:18:17,680 --> 00:18:24,140 Obstajajo tri velike stvari, ki jih imajo rekurzivna funkcija. 252 00:18:24,140 --> 00:18:27,310 Prvo je seveda, da se pokliče. 253 00:18:27,310 --> 00:18:29,650 Drugi je osnova drži. 254 00:18:29,650 --> 00:18:33,390 Torej, na neki točki funkcija mora prenehati klical samega sebe, 255 00:18:33,390 --> 00:18:35,610 in to je tisto, kar je za osnovna. 256 00:18:35,610 --> 00:18:43,860 Torej, tukaj smo vedeli, da moramo ustaviti, moramo odreči pri iskanju 257 00:18:43,860 --> 00:18:48,150 Začetek konca, ko je enaka - in bomo šli nad tem, kaj to pomeni. 258 00:18:48,150 --> 00:18:52,130 Ampak na koncu, zadnja stvar, ki je pomembna za rekurzivne funkcije: 259 00:18:52,130 --> 00:18:59,250 naloge morajo nekako obrniti na osnovno zadevo. 260 00:18:59,250 --> 00:19:04,140 Všeč mi je, če ste dejansko ni ničesar posodobitev, ko bo drugi rekurzivni klic, 261 00:19:04,140 --> 00:19:07,880 če ste dobesedno le klicem funkcije spet z istimi argumenti 262 00:19:07,880 --> 00:19:10,130 in ni bilo nobenih globalne spremenljivke spremenijo ali karkoli, 263 00:19:10,130 --> 00:19:14,430 ne boste nikoli dosegli osnovni primer, v katerem velja, da je slabo. 264 00:19:14,430 --> 00:19:17,950 To bo neskončna rekurzija in kup overflow. 265 00:19:17,950 --> 00:19:24,330 Ampak tukaj vidimo, da je sprememba se dogaja, saj smo začeli posodabljanje + konec / 2, 266 00:19:24,330 --> 00:19:28,180 bomo posodobiti konec argument tukaj, bomo posodobiti začetni argument tukaj. 267 00:19:28,180 --> 00:19:32,860 Torej, v vseh rekurzivnih klicev smo nekaj posodobitev. Ok. 268 00:19:32,860 --> 00:19:38,110 Ali želite, da se nam sprehod skozi vaše rešitve? >> Seveda. 269 00:19:38,110 --> 00:19:44,270 Jaz sem z uporabo SearchHelp tako, da vsakič, ko sem ti to funkcijo klica 270 00:19:44,270 --> 00:19:47,910 Imam začetek, kjer sem iskal v polju in na koncu 271 00:19:47,910 --> 00:19:49,380 o tem, kje iščem matriko. 272 00:19:49,380 --> 00:19:55,330 >> Na vsakem koraku, kjer je rekel, da je srednji element, ki je začetek + konec / 2, 273 00:19:55,330 --> 00:19:58,850 je to enako, kaj iščemo? 274 00:19:58,850 --> 00:20:04,650 In če je, potem smo ga našli, in mislim, da dobi opravil do ravni rekurzije. 275 00:20:04,650 --> 00:20:12,540 In če to ni res, potem smo preveriti, ali je ta srednja vrednost matrike prevelik, 276 00:20:12,540 --> 00:20:19,320 v tem primeru gledamo na levi polovici niza, tako da greste od začetka na srednji indeks. 277 00:20:19,320 --> 00:20:22,710 In sicer bomo za konec polovico. 278 00:20:22,710 --> 00:20:24,740 [Bowden] Ok. 279 00:20:24,740 --> 00:20:27,730 Sliši se dobro. 280 00:20:27,730 --> 00:20:36,640 Ok, nekaj stvari, in dejansko je to zelo visoki ravni, kar 281 00:20:36,640 --> 00:20:41,270 da vam nikoli ne bo treba vedeti za to seveda, ampak je res. 282 00:20:41,270 --> 00:20:46,080 Rekurzivne funkcije, si vedno slišal, da si slab posel 283 00:20:46,080 --> 00:20:51,160 ker če rekurzivno se imaš preveč časa, vam Stack overflow 284 00:20:51,160 --> 00:20:54,990 saj, kot sem že rekel, vsak dobi svojo funkcijo dimnika okvirja. 285 00:20:54,990 --> 00:20:59,500 Torej, vsak poziv za rekurzivna funkcija dobi svojo dimnika okvirja. 286 00:20:59,500 --> 00:21:04,140 Torej, če bi rekurzivnih klicev 1000, dobiš 1000 dimnih okvirje, 287 00:21:04,140 --> 00:21:08,390 in hitro lahko povzroči, da imajo preveč okvirji odvodnikom in stvari le prekinil. 288 00:21:08,390 --> 00:21:13,480 Torej, to je, zakaj rekurzivne funkcije so na splošno slabo. 289 00:21:13,480 --> 00:21:19,370 Vendar pa je lepo podmnožica rekurzivne funkcije imenuje repa rekurzivne funkcije, 290 00:21:19,370 --> 00:21:26,120 in to se zgodi, da bo primer tista, v kateri, če je prevajalnik zazna to 291 00:21:26,120 --> 00:21:29,920 in bi ga, mislim, da - v Jek, če se boste peljali to the-O2 zastave 292 00:21:29,920 --> 00:21:33,250 potem bo to opazil, je to rep rekurzivni in da stvari dobro. 293 00:21:33,250 --> 00:21:40,050 >> To bo ponovno isti okvir snop in znova za vsako rekurzivni klic. 294 00:21:40,050 --> 00:21:47,010 In zato, ker si z isto žetonov okvir, vam ni treba skrbeti 295 00:21:47,010 --> 00:21:51,690 kdaj nakladanje prepolno, in ob istem času, kot si že rekel, 296 00:21:51,690 --> 00:21:56,380 kjer je nekoč vrnili ste res, potem mora vrniti do vseh teh odvodnikom okvirjev 297 00:21:56,380 --> 00:22:01,740 in 10. poziv SearchHelp mora vrniti v 9., je, da se vrnete na 8.. 298 00:22:01,740 --> 00:22:05,360 Tako, da ni potrebno, da se zgodi, ko so funkcije rep rekurzivno. 299 00:22:05,360 --> 00:22:13,740 In kaj je ta funkcija rep rekurzije je obvestilo, da je za vsakega razpisa do searchHelp 300 00:22:13,740 --> 00:22:18,470 rekurzivni klic, da je kar je tisto, kar se je vrnil. 301 00:22:18,470 --> 00:22:25,290 Tako je v prvem razpisu za SearchHelp, smo takoj vrne false, 302 00:22:25,290 --> 00:22:29,590 takoj vrne res, ali pa naredimo rekurzivni klic SearchHelp 303 00:22:29,590 --> 00:22:33,810 če kaj nam vrača tisto, kar je ta poziv se vrača. 304 00:22:33,810 --> 00:22:51,560 In ne moremo narediti, če smo storili kaj takega int x = SearchHelp, povratno x * 2, 305 00:22:51,560 --> 00:22:55,440 Samo nekaj naključno spremembe. 306 00:22:55,440 --> 00:23:01,470 >> Torej, zdaj je to rekurzivni klic, ta int x = SearchHelp rekurzivni klic, 307 00:23:01,470 --> 00:23:05,740 ni več rep rekurzivna, ker dejansko ne morali vrniti 308 00:23:05,740 --> 00:23:10,400 nazaj na prejšnjo okvir dimnik, tako da ta predhodni klic funkcije 309 00:23:10,400 --> 00:23:13,040 lahko naredite nekaj s povratno vrednost. 310 00:23:13,040 --> 00:23:22,190 Torej to ni rep rekurzivna, ampak tisto, kar smo imeli, preden je lepo rep rekurzivno. Ja. 311 00:23:22,190 --> 00:23:27,000 [Študent], ne bi bilo treba preverjati 2. osnovna 1. 312 00:23:27,000 --> 00:23:30,640 ker bi lahko prišlo do položaja, kjer ko dajati argument 313 00:23:30,640 --> 00:23:35,770 ste začetek = koncu, vendar so se igla vrednost. 314 00:23:35,770 --> 00:23:47,310 Vprašanje je bilo, ne moremo teči v primeru, ko je konec igle vrednost 315 00:23:47,310 --> 00:23:52,000 ali začetek = koncu, primerno, začetek = konec 316 00:23:52,000 --> 00:23:59,480 in si dejansko ne preverja, da posebno vrednost še ni, 317 00:23:59,480 --> 00:24:03,910 začnite + konec / 2 je le, da bo za enako vrednost. 318 00:24:03,910 --> 00:24:07,890 Vendar smo že vrnili napačen in smo dejansko nikoli ni preverila vrednost. 319 00:24:07,890 --> 00:24:14,240 Torej, vsaj v prvem razpisu, če znaša 0, potem želimo vrne false. 320 00:24:14,240 --> 00:24:17,710 Ampak, če je velikost 1, nato pa začetek ne bo enak namen, 321 00:24:17,710 --> 00:24:19,820 in bomo vsaj preveriti en element. 322 00:24:19,820 --> 00:24:26,750 Ampak mislim, da je prav, da se lahko znajdemo v primeru, ko začnete + konec / 2, 323 00:24:26,750 --> 00:24:31,190 Začetek konča pa enako kot začetek konca + / 2, 324 00:24:31,190 --> 00:24:35,350 vendar nikoli dejansko preveriti ta element. 325 00:24:35,350 --> 00:24:44,740 >> Torej, če smo najprej preveriti, je srednja vrednost del, ki ga iščemo, 326 00:24:44,740 --> 00:24:47,110 potem lahko takoj vrne res. 327 00:24:47,110 --> 00:24:50,740 Sicer če si ti enako, potem ni smisla še naprej 328 00:24:50,740 --> 00:24:58,440 saj smo le, da bo posodobitev na primer, ko smo na enega elementa matrike. 329 00:24:58,440 --> 00:25:01,110 Če je posamezen element ni tisti, ki ga iščemo, 330 00:25:01,110 --> 00:25:03,530 potem je vse narobe. Ja. 331 00:25:03,530 --> 00:25:08,900 [Študent] Stvar je v tem, da je od velikosti je večje, kot je število elementov v matriki, 332 00:25:08,900 --> 00:25:13,070 je že pobot - >> Tako bo velikost - 333 00:25:13,070 --> 00:25:19,380 [Študent] Recimo, če je matrika velikosti 0, potem bo dejansko SearchHelp preverite senu od 0 334 00:25:19,380 --> 00:25:21,490 na prvi poziv. 335 00:25:21,490 --> 00:25:25,300 Matrika ima velikost 0, tako da je 0 - >> Ja. 336 00:25:25,300 --> 00:25:30,750 Še ena stvar, ki - to bi bilo dobro. Pomislimo. 337 00:25:30,750 --> 00:25:40,120 Torej, če je niz 10 elementov in srednjo bomo preveriti, je indeks 5, 338 00:25:40,120 --> 00:25:45,700 tako da smo preverjanje 5, in recimo, da je vrednost manj. 339 00:25:45,700 --> 00:25:50,720 Torej smo metali vse, od 5 naprej. 340 00:25:50,720 --> 00:25:54,030 Torej začetek + konec / 2 se bo naša nova konec, 341 00:25:54,030 --> 00:25:57,450 Tako ja, to je vedno tekoč, da ostanejo tudi po koncu array. 342 00:25:57,450 --> 00:26:03,570 Če je tako, če je bilo celo ali sodo, potem bi morali preveriti, recimo, 4, 343 00:26:03,570 --> 00:26:05,770 vendar smo še vedno meče stran - 344 00:26:05,770 --> 00:26:13,500 Torej, ja, konec je vedno tekoč, da bo po dejanskem koncu niza. 345 00:26:13,500 --> 00:26:18,350 Torej elementov, smo se osredotočajo na, konec je vedno tekoč, da je tisti, po tem. 346 00:26:18,350 --> 00:26:24,270 In tako, če ne še enak začetek konca, smo v paleto velikosti 0. 347 00:26:24,270 --> 00:26:35,600 >> Druga stvar, ki sem mislil je, da smo se posodabljanje začetek za začetek + konec / 2, 348 00:26:35,600 --> 00:26:44,020 tako da je to res, da imam težave z, kjer je to začetek konca + / 2 349 00:26:44,020 --> 00:26:46,820 je element smo preveriti. 350 00:26:46,820 --> 00:26:58,150 Recimo, da smo imeli to 10-element array. Karkoli. 351 00:26:58,150 --> 00:27:03,250 Torej začetek + konec / 2 se bo nekaj takega kot je ta, 352 00:27:03,250 --> 00:27:07,060 in če to ni vrednost, torej želimo posodobiti. 353 00:27:07,060 --> 00:27:10,060 Vrednost je večja, zato smo želeli videti na tej polovici niza. 354 00:27:10,060 --> 00:27:15,910 Torej, kako bomo posodobiti začetek, bomo posodobiti začetek zdaj ta element. 355 00:27:15,910 --> 00:27:23,790 Vendar pa lahko to še vedno dela, ali pa vsaj, lahko to storite začetek + konec / 2 + 1. 356 00:27:23,790 --> 00:27:27,850 [Študent], vam ni treba začeti + konec [neslišno] >> Ja. 357 00:27:27,850 --> 00:27:33,240 Smo že preverili ta element, in vem, da to ni tisto, ki ga iščemo. 358 00:27:33,240 --> 00:27:36,800 Tako nam ni treba posodobiti začetek za ta element. 359 00:27:36,800 --> 00:27:39,560 Mi lahko samo preskočite in začnete posodobiti, da je ta element. 360 00:27:39,560 --> 00:27:46,060 In ni vedno tako, recimo, da je bil to namen, 361 00:27:46,060 --> 00:27:53,140 zato začnite bi bilo to, da začnete + konec / 2, bi bilo to, 362 00:27:53,140 --> 00:28:00,580 začetek + konec - Ja, mislim, da lahko končajo v neskončno rekurzije. 363 00:28:00,580 --> 00:28:12,690 Recimo, da je samo niz velikosti 2 ali množica velikosti 1. Mislim, da bo to delovalo. 364 00:28:12,690 --> 00:28:19,490 Torej sedaj, začetek je ta element in konec je 1 zunaj njega. 365 00:28:19,490 --> 00:28:24,110 Tako je element, ki ga bomo preveriti, je ta, 366 00:28:24,110 --> 00:28:29,400 in potem, ko smo posodobili začetek, bomo posodobiti začetek za 0 + 1/2, 367 00:28:29,400 --> 00:28:33,160 ki nas bo na koncu spet z začetka pa je ta element. 368 00:28:33,160 --> 00:28:36,210 >> Torej smo preverjanje isti element znova in znova. 369 00:28:36,210 --> 00:28:43,310 Torej, to je v primeru, ko mora vsak rekurzivni klic dejansko posodobiti nekaj. 370 00:28:43,310 --> 00:28:48,370 Torej moramo narediti konec, začetek + / 2 + 1, sicer pa je tako 371 00:28:48,370 --> 00:28:50,710 če ne bomo dejansko posodabljanje začetek. 372 00:28:50,710 --> 00:28:53,820 Vsi videl? 373 00:28:53,820 --> 00:28:56,310 Ok. 374 00:28:56,310 --> 00:29:03,860 Ima kdo kakšno vprašanje v zvezi s tem rešitve ali katere koli dodatnih komentarjev? 375 00:29:05,220 --> 00:29:10,280 Ok. Ali kdo se ponavlja rešitev, da bomo lahko vsi gledate? 376 00:29:17,400 --> 00:29:20,940 Ali smo vsi narediti rekurzivno? 377 00:29:20,940 --> 00:29:25,950 Ali pa tudi mislim, da če njeno pa je začela, potem ste morda prevlada prejšnjega. 378 00:29:25,950 --> 00:29:28,810 Ali samodejno shrani? Nisem pozitiven. 379 00:29:35,090 --> 00:29:39,130 Ali kdo so ponavlja? 380 00:29:39,130 --> 00:29:42,430 Mi lahko hodi skozi njo skupaj, če ne. 381 00:29:46,080 --> 00:29:48,100 Ideja se bo enako. 382 00:30:00,260 --> 00:30:02,830 Iterativni rešitev. 383 00:30:02,830 --> 00:30:07,140 Bomo želeli, da v bistvu storijo isto idejo 384 00:30:07,140 --> 00:30:16,530 če želimo slediti novim konca niza in nov začetek polja, 385 00:30:16,530 --> 00:30:18,510 in to, da znova in znova. 386 00:30:18,510 --> 00:30:22,430 In če kaj smo sledenja kot na začetku in na koncu vedno križajo, 387 00:30:22,430 --> 00:30:29,020 potem nismo našli in smo lahko vrne false. 388 00:30:29,020 --> 00:30:37,540 Torej, kako naj to naredim? Vsakdo ima predloge ali kodo za mene, da pull up? 389 00:30:42,190 --> 00:30:47,450 [Študent] Ali while zanko. >> Ja. 390 00:30:47,450 --> 00:30:49,450 Boste želeli narediti zanko. 391 00:30:49,450 --> 00:30:51,830 >> Ali imate kodo, da bi lahko potegnite navzgor, ali pa kaj si hotel predlagati? 392 00:30:51,830 --> 00:30:56,340 [Študent] jaz tako mislim. >> Redu. To naredi stvari lažje. Kako ti je ime? 393 00:30:56,340 --> 00:30:57,890 [Študent] Lucas. 394 00:31:00,140 --> 00:31:04,190 Revizija 1. Ok. 395 00:31:04,190 --> 00:31:13,200 Nizka je tisto, kar imenujemo začeti prej. 396 00:31:13,200 --> 00:31:17,080 Do ni ravno tisto, kar imenujemo konec prej. 397 00:31:17,080 --> 00:31:22,750 Pravzaprav, konec je zdaj v array. To je element, bi morali razmisliti. 398 00:31:22,750 --> 00:31:26,890 Tako nizka je 0, kar je velikost matrike - 1, 399 00:31:26,890 --> 00:31:34,780 in zdaj smo zanka, in smo preverjanje - 400 00:31:34,780 --> 00:31:37,340 Mislim, da lahko hodiš po njej. 401 00:31:37,340 --> 00:31:41,420 Kakšna je bila vaša razmišljanja skozi to? Nas Sprehod skozi svojo kodo. 402 00:31:41,420 --> 00:31:49,940 [Študent] Seveda. Pogled na senu vrednosti na sredini in ga primerjajte z iglo. 403 00:31:49,940 --> 00:31:58,520 Torej, če je višja od vaše igle, potem hočeš - oh, pravzaprav, da bi morala biti nazaj. 404 00:31:58,520 --> 00:32:05,180 Če boste želeli, da mečejo desno polovico, in tako ja, da bi moralo biti tako. 405 00:32:05,180 --> 00:32:08,830 [Bowden] Torej bi bilo to manj? Je to tisto, kar si rekel? >> [Študent] Ja. 406 00:32:08,830 --> 00:32:10,390 [Bowden] Ok. Manj. 407 00:32:10,390 --> 00:32:15,700 Torej, če kaj iščemo v manjši od tistega, kar smo želeli, 408 00:32:15,700 --> 00:32:19,410 potem ja, želimo, da mečejo v levi polovici, 409 00:32:19,410 --> 00:32:22,210 kar pomeni, da smo vse, kar smo posodabljanje razmišlja 410 00:32:22,210 --> 00:32:26,610 s premikanjem nizko na desni strani polja. 411 00:32:26,610 --> 00:32:30,130 To izgleda dobro. 412 00:32:30,130 --> 00:32:34,550 Mislim, da ima isti problem, da smo rekli na prejšnjega, 413 00:32:34,550 --> 00:32:49,760 kjer je nizka, če je 0 in se je 1, potem nizko + gor / 2 se bo ustanovila za isto stvar znova. 414 00:32:49,760 --> 00:32:53,860 >> In tudi če to ni tako, je to še vedno bolj učinkovito vsaj 415 00:32:53,860 --> 00:32:57,630 da samo mečejo element sva pogledala kar vemo, je narobe. 416 00:32:57,630 --> 00:33:03,240 Tako nizko do + / 2 + 1 - >> [Študent] To bi moralo biti drugače. 417 00:33:03,240 --> 00:33:05,900 [Bowden] Ali bi to morala biti - 1, drugo pa mora biti + 1. 418 00:33:05,900 --> 00:33:09,580 [Študent] In tam bi morala biti dvojna enačaj. >> [Bowden] Ja. 419 00:33:09,580 --> 00:33:11,340 [Študent] Ja. 420 00:33:14,540 --> 00:33:15,910 Ok. 421 00:33:15,910 --> 00:33:21,280 In končno, zdaj ko imamo to + 1 - 1 stvar, 422 00:33:21,280 --> 00:33:31,520 je - ne bi bilo - ali je to možno za nizko končati z večjo vrednostjo kot je? 423 00:33:35,710 --> 00:33:40,320 Mislim, da je edini način, da se lahko zgodi - je to mogoče? >> [Študent], ne vem. 424 00:33:40,320 --> 00:33:45,220 Ampak, če postane okrnjena in potem dobi minus, da je 1 in potem - >> Ja. 425 00:33:45,220 --> 00:33:47,480 [Študent] To bi lahko dobil zamočil. 426 00:33:49,700 --> 00:33:53,940 Mislim, da bi bilo dobro, samo zato, ker 427 00:33:53,940 --> 00:33:58,800 za to, da končajo nižje bi morala biti enaka, se mi zdi. 428 00:33:58,800 --> 00:34:03,070 Ampak, če so enaki, potem ne bi naredil while zanko, da začnete z 429 00:34:03,070 --> 00:34:06,670 in bi samo še vrnil vrednost. Zato mislim, da smo dobro zdaj. 430 00:34:06,670 --> 00:34:11,530 Vedite, da čeprav je ta problem ni več rekurzivni, 431 00:34:11,530 --> 00:34:17,400 iste ideje, uporabljajo, kjer bomo lahko videli, kako je to tako preprosto bi lahko bilo 432 00:34:17,400 --> 00:34:23,659 na rekurziven rešitve s tem, da smo pravkar posodablja indekse znova in znova, 433 00:34:23,659 --> 00:34:29,960 delamo problem manjši in manjši, smo se osredotočajo na podmnožico matrike. 434 00:34:29,960 --> 00:34:40,860 [Študent] Če je nizka, je 0 in se je 1, bi bila oba 0 + 1/2, ki bi šel na 0, 435 00:34:40,860 --> 00:34:44,429 in potem bi bilo + 1, bi lahko - 1. 436 00:34:47,000 --> 00:34:50,870 [Študent] Če smo preverjanje enakost? 437 00:34:50,870 --> 00:34:55,100 Všeč mi je, če sredinska dejansko igla? 438 00:34:55,100 --> 00:34:58,590 Ne bomo zdaj s tem? Oh! 439 00:35:00,610 --> 00:35:02,460 Če it's - 440 00:35:05,340 --> 00:35:13,740 Da. Ne moremo narediti test tukaj zato, ker recimo prvi sredini - 441 00:35:13,740 --> 00:35:16,430 [Študent] To je res všeč, ne zavrzite navezani. 442 00:35:16,430 --> 00:35:20,220 Torej, če si vrgel proč omejeni, ga morate najprej preveriti, ali karkoli. 443 00:35:20,220 --> 00:35:23,350 Ah. Ja. >> [Študent] Ja. 444 00:35:23,350 --> 00:35:29,650 Torej, zdaj smo zavrgli 1 trenutno pogledal, 445 00:35:29,650 --> 00:35:33,260 kar pomeni, da moramo zdaj tudi 446 00:35:33,260 --> 00:35:44,810 if (senu [(+ do nizka) / 2] == iglo), potem se lahko vrnemo res. 447 00:35:44,810 --> 00:35:52,070 In če dodam še, ali samo, če to pomeni dobesedno isto stvar 448 00:35:52,070 --> 00:35:57,110 ker bi to res vrnil. 449 00:35:57,110 --> 00:36:01,450 Tako da bom dal drugega, če pa to ni pomembno. 450 00:36:01,450 --> 00:36:10,440 >> Tako pa, če je to, pa to, in to je skupna stvar, ki mi 451 00:36:10,440 --> 00:36:14,340 če tudi če je v primeru, ko je vse dobro tukaj, 452 00:36:14,340 --> 00:36:22,780 kot nizko nikoli ne more biti večja od gor, to ni vredno razmišljanje o tem, ali je to res. 453 00:36:22,780 --> 00:36:28,010 Torej lahko tudi rekli, medtem ko je nizka ali manj enaka 454 00:36:28,010 --> 00:36:30,720 ali pa nizka, manj kot 455 00:36:30,720 --> 00:36:35,300 tako da, če so vse enako ali nizka zgodi, da bi šli gor, 456 00:36:35,300 --> 00:36:40,130 potem lahko iztrgajo iz te zanke. 457 00:36:41,410 --> 00:36:44,630 Vprašanja, vprašanja, komentarji? 458 00:36:47,080 --> 00:36:49,270 Ok. To izgleda dobro. 459 00:36:49,270 --> 00:36:52,230 Zdaj želimo narediti vrste. 460 00:36:52,230 --> 00:37:04,030 Če gremo v mojo drugo revizijo, vidimo te iste številke, 461 00:37:04,030 --> 00:37:07,550 zdaj pa niso več v urejenih redu. 462 00:37:07,550 --> 00:37:12,840 In želimo izvajati neke z uporabo katerega koli algoritma v O n log n. 463 00:37:12,840 --> 00:37:17,240 Torej, kateri algoritem misliš, da bi morali tu izvajati? >> [Študent] zlivanjem. 464 00:37:17,240 --> 00:37:23,810 [Bowden] Ja. Zlivanjem je O (n log n), tako da je tisto, kar smo naredili. 465 00:37:23,810 --> 00:37:26,680 In problem, se bo precej podoben, 466 00:37:26,680 --> 00:37:31,920 kjer lahko dovzetni za rekurziven rešitev. 467 00:37:31,920 --> 00:37:35,580 Prav tako lahko prišli do iterativno rešitev, če želimo, 468 00:37:35,580 --> 00:37:42,540 vendar bo rekurzija lažje tu in da bi morali storiti rekurzijo. 469 00:37:45,120 --> 00:37:49,530 Mislim, da se bomo sprehodili po datumu spajanja prvič, 470 00:37:49,530 --> 00:37:54,280 čeprav je lep video na vrste spajanja že. [Smeh] 471 00:37:54,280 --> 00:37:59,780 Torej zlivanjem obstajajo - jaz sem zapravljati toliko tega prispevka. 472 00:37:59,780 --> 00:38:02,080 Tam je ostal samo še eden. 473 00:38:02,080 --> 00:38:03,630 Torej združiti. 474 00:38:08,190 --> 00:38:12,470 Oh, 1, 3, 5. 475 00:38:26,090 --> 00:38:27,440 Ok. 476 00:38:29,910 --> 00:38:33,460 Merge traja dve ločeni nize. 477 00:38:33,460 --> 00:38:36,780 Posamično se ta dva nizi tako urejeno. 478 00:38:36,780 --> 00:38:40,970 Torej ta matrika, 1, 3, 5, razvrščeni. Ta matrika, 0, 2, 4, razvrščeni. 479 00:38:40,970 --> 00:38:46,710 Zdaj, kaj je treba storiti, je spajanje jih združiti v en sam niz, ki je sama razvrščena. 480 00:38:46,710 --> 00:38:57,130 Zato želimo matriko velikosti 6, ki se dogaja, da so ti elementi znotraj nje 481 00:38:57,130 --> 00:38:59,390 v urejenih vrstnem redu. 482 00:38:59,390 --> 00:39:03,390 >> In tako bomo lahko izkoristili dejstvo, da so razporejene ta dva nizi 483 00:39:03,390 --> 00:39:06,800 to storiti v linearnem času, 484 00:39:06,800 --> 00:39:13,510 Linearni časovno smisel, če je ta matrika velikosti x in to je velikost y, 485 00:39:13,510 --> 00:39:20,970 potem mora biti skupni algoritem O (x + y). Ok. 486 00:39:20,970 --> 00:39:23,150 Torej predlogi. 487 00:39:23,150 --> 00:39:26,030 [Študent] Lahko začnemo na levi? 488 00:39:26,030 --> 00:39:30,150 Torej boš dal dol 0 in šele nato 1, nato pa sem si na 2. 489 00:39:30,150 --> 00:39:33,320 Torej, to je nekako kot da imate kartico, ki se premika v desno. >> [Bowden] Ja. 490 00:39:33,320 --> 00:39:41,070 Za oba nizi, če bomo samo osredotočiti na skrajni levi element. 491 00:39:41,070 --> 00:39:43,530 Ker so razporejene tako nizi, vemo, da ti elementi 2 492 00:39:43,530 --> 00:39:46,920 so najmanjši elementi v obeh matrike. 493 00:39:46,920 --> 00:39:53,500 To pomeni, da mora 1 od teh 2 elementov je najmanjši element v našem novega niza. 494 00:39:53,500 --> 00:39:58,190 Samo tako se zgodi, da je najmanjša, je pa na desno tem času. 495 00:39:58,190 --> 00:40:02,580 Tako smo lahko 0, ga vstavite na levo, ker je 0 manj kot 1, 496 00:40:02,580 --> 00:40:08,210 tako da 0, ga vstavite v našem prvem mestu, nato pa smo posodobili to 497 00:40:08,210 --> 00:40:12,070 do zdaj osredotočiti na prvem elementu. 498 00:40:12,070 --> 00:40:14,570 In zdaj smo ponovili. 499 00:40:14,570 --> 00:40:20,670 Zdaj smo primerjali 2 in 1. 1 je manjši, tako da bomo vstavite 1. 500 00:40:20,670 --> 00:40:25,300 Mi posodobiti to kazalec, da kaže na tega tipa. 501 00:40:25,300 --> 00:40:33,160 Zdaj pa še enkrat, tako da 2. To bo posodobil, primerjati te 2, 3. 502 00:40:33,160 --> 00:40:37,770 To posodobitve, nato 4 in 5. 503 00:40:37,770 --> 00:40:42,110 Tako, da je spajanje. 504 00:40:42,110 --> 00:40:49,010 >> Treba je precej očitno, da je linearna časa, odkar sva šla čez vsak element enkrat. 505 00:40:49,010 --> 00:40:55,980 In to je največji korak k izvajanju zlivanjem to počne. 506 00:40:55,980 --> 00:40:59,330 In to ni tako težko. 507 00:40:59,330 --> 00:41:15,020 Nekaj ​​stvari za skrbeti je, recimo, smo združujejo 1, 2, 3, 4, 5, 6. 508 00:41:15,020 --> 00:41:30,930 V tem primeru se znajdemo v scenariju, kjer je to ena se dogaja, da so manjše, 509 00:41:30,930 --> 00:41:36,160 potem bomo posodobiti to kazalec, ta se bo manjši, posodablja, 510 00:41:36,160 --> 00:41:41,280 ta je manjši, zdaj pa moraš priznati 511 00:41:41,280 --> 00:41:44,220 ko ste dejansko zmanjka elementov primerjati s. 512 00:41:44,220 --> 00:41:49,400 Ker smo se že uporablja ta celoten niz, 513 00:41:49,400 --> 00:41:55,190 vse, kar je v tem polju je zdaj samo vstavite tukaj. 514 00:41:55,190 --> 00:42:02,040 Torej, če bomo kdaj naleteli na mestu, kjer je eden od naših polj popolnoma združila že, 515 00:42:02,040 --> 00:42:06,510 potem vzemite vse elemente drugega niza in jih vstavite v zaključku niza. 516 00:42:06,510 --> 00:42:13,630 Tako smo lahko samo vstavite 4, 5, 6. Ok. 517 00:42:13,630 --> 00:42:18,070 To je ena stvar, da pazi. 518 00:42:22,080 --> 00:42:26,120 Izvajanje da bi morala biti stopnja 1. 519 00:42:26,120 --> 00:42:32,600 Zlivanjem nato na podlagi tega, da je 2 koraka, 2 pisanih koraki. 520 00:42:38,800 --> 00:42:42,090 Reciva da ta niz. 521 00:42:57,920 --> 00:43:05,680 Torej zlivanjem, stopnja 1 je prekinil niz rekurzivno na polovici. 522 00:43:05,680 --> 00:43:09,350 Torej to vrsto razdeliti na polovici. 523 00:43:09,350 --> 00:43:22,920 Zdaj imamo 4, 15, 16, 50 in 8, 23, 42, 108. 524 00:43:22,920 --> 00:43:25,800 In zdaj smo še enkrat, in to bomo razdelili na pol. 525 00:43:25,800 --> 00:43:27,530 Pravkar sem ga bom na tej strani. 526 00:43:27,530 --> 00:43:34,790 Torej, 4, 15 in 16, 50. 527 00:43:34,790 --> 00:43:37,440 Mi bi naredil isto stvar tukaj. 528 00:43:37,440 --> 00:43:40,340 In zdaj smo ga razdelili na polovici znova. 529 00:43:40,340 --> 00:43:51,080 In imamo 4, 15, 16, 50. 530 00:43:51,080 --> 00:43:53,170 Tako, da je naša osnovna. 531 00:43:53,170 --> 00:44:00,540 Ko nizi so velikosti 1, potem prenehajte z delitvijo na polovici. 532 00:44:00,540 --> 00:44:03,190 >> Kaj pa naj naredimo s tem? 533 00:44:03,190 --> 00:44:15,730 Smo na koncu bo to tudi razčleniti v 8, 23, 42 in 108. 534 00:44:15,730 --> 00:44:24,000 Torej, zdaj, ko smo že pri tem, zdaj korak dve vrste spajanja je samo združitev para seznamov. 535 00:44:24,000 --> 00:44:27,610 Zato želimo, da združite. Mi samo pokličite dokumentov. 536 00:44:27,610 --> 00:44:31,410 Vemo, da se bo vrnil spajanje teh v urejenih redu. 537 00:44:31,410 --> 00:44:33,920 4, 15. 538 00:44:33,920 --> 00:44:41,440 Zdaj želimo, da združite in da se bo vrnil seznam s tistimi, ki v urejenih vrstnem redu, 539 00:44:41,440 --> 00:44:44,160 16, 50. 540 00:44:44,160 --> 00:44:57,380 Mi združiti tiste - ne morem napisati - 8, 23 in 42, 108. 541 00:44:57,380 --> 00:45:02,890 Tako smo združili parov naenkrat. 542 00:45:02,890 --> 00:45:05,140 Zdaj sva spet združita. 543 00:45:05,140 --> 00:45:10,130 Obvestilo, da je razvrščena vsako od teh seznamov v sebi, 544 00:45:10,130 --> 00:45:15,220 in potem bomo lahko samo združitev teh seznamov, da bi dobili seznam velikosti 4, ki je razvrščena 545 00:45:15,220 --> 00:45:19,990 in združitev teh dveh seznamov, da bi dobili seznam velikosti 4, ki je razporejen. 546 00:45:19,990 --> 00:45:25,710 In končno, lahko združitev teh dveh seznamov velikosti 4, da bi dobili en seznam velikosti 8, ki je razporejen. 547 00:45:25,710 --> 00:45:34,030 Tako je videti, da je to skupna n log n, smo že videli, da je spajanje linearna, 548 00:45:34,030 --> 00:45:40,390 tako da, ko imamo opravka z združitvijo teh, tako kot celotni stroški spajanje 549 00:45:40,390 --> 00:45:43,410 za ta dva seznama je samo 2, ker - 550 00:45:43,410 --> 00:45:49,610 Ali pa, da je O n, n pa tukaj je samo ta 2 elementa, tako da je 2. 551 00:45:49,610 --> 00:45:52,850 In to je 2 in 2 teh 2 bo 2 in teh 2 bo 2, 552 00:45:52,850 --> 00:45:58,820 Tako se je na vseh spajanja, ki jih moramo narediti, bomo na koncu delaš n. 553 00:45:58,820 --> 00:46:03,210 Kot 2 + 2 + 2 + 2 je 8, kar je za n, 554 00:46:03,210 --> 00:46:08,060 Tako je n stroški združitve v tem setu. 555 00:46:08,060 --> 00:46:10,810 In potem isto tukaj. 556 00:46:10,810 --> 00:46:16,980 Bomo združiti te 2, potem se ti 2 in posamično to merge traja štiri operacije, 557 00:46:16,980 --> 00:46:23,610 to merge bo štiri operacije, vendar še enkrat, med vsemi temi, 558 00:46:23,610 --> 00:46:29,030 smo na koncu združitev n skupne stvari, zato je ta korak se n. 559 00:46:29,030 --> 00:46:33,670 In tako se vsaka stopnja ima n elementov, ki se združijo. 560 00:46:33,670 --> 00:46:36,110 >> In koliko vrednosti so tam? 561 00:46:36,110 --> 00:46:40,160 Na vsaki ravni, naša polja raste z velikostjo 2. 562 00:46:40,160 --> 00:46:44,590 Tu so naši nizi so velikosti 1, tu oni velikosti 2, tu oni velikosti 4, 563 00:46:44,590 --> 00:46:46,470 in končno, oni so velikosti 8. 564 00:46:46,470 --> 00:46:56,450 Zato, ker je podvojila, pa se bodo skupaj log n teh ravneh. 565 00:46:56,450 --> 00:47:02,090 Torej, z log n ravni, pri čemer vsaka posamezna stopnja n skupne operacije, 566 00:47:02,090 --> 00:47:05,720 smo dobili dnevnik N algoritem. 567 00:47:05,720 --> 00:47:07,790 Vprašanja? 568 00:47:08,940 --> 00:47:13,320 So ljudje, ki že napredovala o tem, kako izvajati to? 569 00:47:13,320 --> 00:47:18,260 Je kdo že v stanju, ko sem lahko samo dvigni svojo kodo? 570 00:47:20,320 --> 00:47:22,260 Lahko vam dam malo. 571 00:47:24,770 --> 00:47:27,470 Ta se bo več. 572 00:47:27,470 --> 00:47:28,730 Toplo priporočam ponovil - 573 00:47:28,730 --> 00:47:30,510 Ni vam treba storiti rekurzijo za spajanje 574 00:47:30,510 --> 00:47:33,750 ker narediti rekurzijo za spajanje, boste morali opraviti kup različnih velikosti. 575 00:47:33,750 --> 00:47:37,150 Lahko, vendar je nadležno. 576 00:47:37,150 --> 00:47:43,720 Ampak rekurzija za razvrščanje sama je precej enostavno. 577 00:47:43,720 --> 00:47:49,190 Pravkar ste dobesedno poklical vrste na levi polovici, nekako na desni polovici. Ok. 578 00:47:51,770 --> 00:47:54,860 Vsakdo ima vse, kar sem lahko pull up yet? 579 00:47:54,860 --> 00:47:57,540 Ali pa bom dal malo. 580 00:47:58,210 --> 00:47:59,900 Ok. 581 00:47:59,900 --> 00:48:02,970 Vsakdo ima nekaj, kar lahko skupaj z? 582 00:48:05,450 --> 00:48:09,680 Ali pa bomo samo delo s tem in nato še od tam. 583 00:48:09,680 --> 00:48:14,050 >> Vsakdo ima več kot to, da sem lahko pull up? 584 00:48:14,050 --> 00:48:17,770 [Študent] Ja. Lahko potegnite navzgor rudnik. >> Redu. 585 00:48:17,770 --> 00:48:19,730 Da! 586 00:48:22,170 --> 00:48:25,280 [Študent] je bilo veliko pogojev. >> Oh, sranje. Ali lahko - 587 00:48:25,280 --> 00:48:28,110 [Študent], da moram to rešiti. >> Ja. 588 00:48:32,420 --> 00:48:35,730 Tako smo naredili spajanja ločeno. 589 00:48:35,730 --> 00:48:38,570 Oh, pa saj ni tako slabo. 590 00:48:39,790 --> 00:48:41,650 Ok. 591 00:48:41,650 --> 00:48:47,080 Tako nekako je tudi sama prav kliče mergeSortHelp. 592 00:48:47,080 --> 00:48:49,530 Razloži nam, kaj počne mergeSortHelp. 593 00:48:49,530 --> 00:48:55,700 [Študent] MergeSortHelp precej pa dva glavna koraka, 594 00:48:55,700 --> 00:49:01,270 ki je razvrstiti vsak polovico niz in nato združiti oba. 595 00:49:04,960 --> 00:49:08,050 [Bowden] Ok, daj mi sekundo. 596 00:49:10,850 --> 00:49:13,210 Mislim, da je to - >> [Študent], moram - 597 00:49:17,100 --> 00:49:19,400 Ja. Sem kaj spregledal. 598 00:49:19,400 --> 00:49:23,100 V spajanja, se zavedam, da moram ustvariti nov niz 599 00:49:23,100 --> 00:49:26,530 ker nisem mogel storiti v mestu. >> Da. Ne moreš. Popravite. 600 00:49:26,530 --> 00:49:28,170 [Študent] Tako sem ustvaril novo vrsto. 601 00:49:28,170 --> 00:49:31,510 Pozabil sem na koncu združita ponovno spremeniti. 602 00:49:31,510 --> 00:49:34,490 Ok. Potrebujemo nov niz. 603 00:49:34,490 --> 00:49:41,000 V vrste spajanja, to je skoraj vedno res. 604 00:49:41,000 --> 00:49:44,340 Del stroškov boljšega algoritma čas pametno 605 00:49:44,340 --> 00:49:47,310 se skoraj vedno morali uporabiti nekoliko več pomnilnika. 606 00:49:47,310 --> 00:49:51,570 Torej, tukaj, ne glede na to, kako boste to storili z zlivanjem, 607 00:49:51,570 --> 00:49:54,780 da bi nujno morali uporabiti nekaj dodatnega pomnilnika. 608 00:49:54,780 --> 00:49:58,240 On ali ona ustvarila nov niz. 609 00:49:58,240 --> 00:50:03,400 In potem rečeš na koncu smo morali kopirati nov niz v prvotni matriki. 610 00:50:03,400 --> 00:50:04,830 [Študent] Mislim, da ja. 611 00:50:04,830 --> 00:50:08,210 Ne vem, če deluje na področju štetja s sklicem ali karkoli - 612 00:50:08,210 --> 00:50:11,650 Ja, bo delovalo. >> [Študent] Ok. 613 00:50:20,620 --> 00:50:24,480 Ste poskusili vožnjo to? >> [Študent] No, ne še. >> Redu. 614 00:50:24,480 --> 00:50:28,880 Poskusite jo izvaja, in potem bom govoril o tem, za sekundo. 615 00:50:28,880 --> 00:50:35,200 [Študent], da moram imeti vse funkcije prototipov in vse, kajne? 616 00:50:37,640 --> 00:50:40,840 Funkcija prototipi. Oh, misliš kot - Ja. 617 00:50:40,840 --> 00:50:43,040 Razvrsti kliče mergeSortHelp. 618 00:50:43,040 --> 00:50:47,390 >> Torej, da bi nekako lahko pokličete mergeSortHelp mora mergeSortHelp bodisi so bili opredeljeni 619 00:50:47,390 --> 00:50:56,370 Pred vrste ali moramo samo prototip. Preprosto kopirajte in prilepite to. 620 00:50:56,370 --> 00:50:59,490 In podobno, mergeSortHelp kliče dokumentov, 621 00:50:59,490 --> 00:51:03,830 vendar je spajanje še ni določena, tako da bomo vedeli šele pustiti mergeSortHelp 622 00:51:03,830 --> 00:51:08,700 , da je tisto, kar se združita bo izgledal, in to je to. 623 00:51:09,950 --> 00:51:15,730 Torej mergeSortHelp. 624 00:51:22,770 --> 00:51:32,660 Imamo težavo tukaj, kjer nimamo osnovno zadevo. 625 00:51:32,660 --> 00:51:38,110 MergeSortHelp je rekurzivna, zato je vsaka rekurzivna funkcija 626 00:51:38,110 --> 00:51:42,610 se bo treba neke vrste primerjavi z osnovnim vedeti, kdaj prenehati rekurzivno klical samega sebe. 627 00:51:42,610 --> 00:51:45,590 Kaj je naša osnovna bo treba tukaj? Ja. 628 00:51:45,590 --> 00:51:49,110 [Študent] Če znaša 1? >> [Bowden] Da. 629 00:51:49,110 --> 00:51:56,220 Tako kot smo videli tam, sva se ustavila delitev nizi 630 00:51:56,220 --> 00:52:01,850 ko smo dobili v matrikah velikosti 1, ki so neizogibno sami izločeni. 631 00:52:01,850 --> 00:52:09,530 Torej, če velikost je enaka 1, vemo matrika je že urejen, 632 00:52:09,530 --> 00:52:12,970 tako da bomo lahko samo vrnitev. 633 00:52:12,970 --> 00:52:16,880 >> Obvestilo, da je ničen, zato ne vrne nič posebnega, samo vrniti. 634 00:52:16,880 --> 00:52:19,580 Ok. Torej, to je naša osnovna. 635 00:52:19,580 --> 00:52:27,440 Mislim, da naša osnovna lahko tudi, če se zgodi, da bo združitev paleto velikosti 0 636 00:52:27,440 --> 00:52:30,030 bomo verjetno želeli ustaviti na neki točki, 637 00:52:30,030 --> 00:52:33,610 tako da bomo lahko samo rečem velikosti manj kot 2 ali manj ali enako kot 1 638 00:52:33,610 --> 00:52:37,150 tako, da bo to delo za vsak niz zdaj. 639 00:52:37,150 --> 00:52:38,870 Ok. 640 00:52:38,870 --> 00:52:42,740 Torej, to je naša osnovna. 641 00:52:42,740 --> 00:52:45,950 Zdaj pa bi rad, da nas sprehod skozi spajanje? 642 00:52:45,950 --> 00:52:49,140 Kaj pomenijo vse te primere? 643 00:52:49,140 --> 00:52:54,480 Do tu smo šele počne isto idejo, - 644 00:52:56,970 --> 00:53:02,470 [Študent], da moram mimo velikosti z vsemi klici mergeSortHelp. 645 00:53:02,470 --> 00:53:10,080 Dodal sem velikosti kot dodatno primarnim in to ni tam, kot velikost / 2. 646 00:53:10,080 --> 00:53:16,210 [Bowden] Oh, velikost / 2, velikost / 2. >> [Študent] Ja, pa tudi v zgornji funkciji, kot tudi. 647 00:53:16,210 --> 00:53:21,320 [Bowden] Tukaj? >> [Študent] Samo velikost. >> [Bowden] Oh. Velikost velikost? >> [Študent] Ja. 648 00:53:21,320 --> 00:53:23,010 [Bowden] Ok. 649 00:53:23,010 --> 00:53:26,580 Naj pomislim za sekundo. 650 00:53:26,580 --> 00:53:28,780 Ali smo naleteli na težavo? 651 00:53:28,780 --> 00:53:33,690 Vedno smo zdravljenje levo kot 0. >> [Študent] No 652 00:53:33,690 --> 00:53:36,340 To je narobe preveč. Žal mi je. To bi morala biti začetek. Ja. 653 00:53:36,340 --> 00:53:39,230 [Bowden] Ok. Všeč mi je, da je bolje. 654 00:53:39,230 --> 00:53:43,880 In konec. Ok. 655 00:53:43,880 --> 00:53:47,200 Torej, zdaj bi radi, da nam sprehod skozi spajanje? >> [Študent] Ok. 656 00:53:47,200 --> 00:53:52,150 Jaz sem samo sprehod skozi ta novi niz, ki sem jih ustvaril. 657 00:53:52,150 --> 00:53:57,420 Njena velikost je obseg dela polja, ki jih želimo rešiti 658 00:53:57,420 --> 00:54:03,460 in poskuša najti element, ki naj ga v novem koraku polja. 659 00:54:03,460 --> 00:54:10,140 Torej za to, prvič sem preverjanje, če leva polovica matrike še vedno vse več elementov, 660 00:54:10,140 --> 00:54:14,260 in če se ne, potem greš v ta drug pogoj, ki je ravno pravi 661 00:54:14,260 --> 00:54:20,180 ok, mora biti na pravem array, in bomo napisali, da je v sedanji indeks newArray. 662 00:54:20,180 --> 00:54:27,620 >> In potem drugače, bom preverjanje, če je na desni strani polja, tudi končal, 663 00:54:27,620 --> 00:54:30,630 V tem primeru sem dal v levo. 664 00:54:30,630 --> 00:54:34,180 To ne bi dejansko potrebno. Nisem prepričan. 665 00:54:34,180 --> 00:54:40,970 Ampak vseeno, drugi dve preverjanje, kateri od obeh so manjši v levo ali desno. 666 00:54:40,970 --> 00:54:49,770 In prav v vsakem primeru, sem povečevanje kar sem ogrado prirastek. 667 00:54:49,770 --> 00:54:52,040 [Bowden] Ok. 668 00:54:52,040 --> 00:54:53,840 To izgleda dobro. 669 00:54:53,840 --> 00:54:58,800 Ali ima kdo pripombe ali pomisleke ali vprašanja? 670 00:55:00,660 --> 00:55:07,720 Torej tistih štirih primerih, ki jih imamo, da bi stvari v le da - ali je videti kot 5 - 671 00:55:07,720 --> 00:55:13,100 vendar pa moramo preučiti, ali je levo polje zmanjkalo stvari, ki jih moramo združiti, 672 00:55:13,100 --> 00:55:16,390 ali je pravica niz zmanjkalo stvari, ki jih moramo združiti - 673 00:55:16,390 --> 00:55:18,400 Jaz sem gledala nič. 674 00:55:18,400 --> 00:55:21,730 Torej, ali je levo polje zmanjkalo stvari ali pravice matrika je zmanjkalo stvari. 675 00:55:21,730 --> 00:55:24,320 Tisti, ki so v dveh primerih. 676 00:55:24,320 --> 00:55:30,920 Potrebujemo tudi trivialna primer, ali je leva, kar je manj kot prava stvar. 677 00:55:30,920 --> 00:55:33,910 Potem smo želeli izbrati levi stvar. 678 00:55:33,910 --> 00:55:37,630 To so primeri. 679 00:55:37,630 --> 00:55:40,990 Torej, to je prav, da to je to. 680 00:55:40,990 --> 00:55:46,760 Array levo. To je 1, 2, 3. Ok. Torej, ja, to so štiri stvari, ki jih lahko naredite. 681 00:55:50,350 --> 00:55:54,510 In mi ne bo šel čez iterativno rešitev. 682 00:55:54,510 --> 00:55:55,980 Jaz ne bi priporočal - 683 00:55:55,980 --> 00:56:03,070 Zlivanjem je primer funkcije, ki je tako ne repa rekurzivna, 684 00:56:03,070 --> 00:56:07,040 to ni enostavno, da bi bilo rekurzivni rep, 685 00:56:07,040 --> 00:56:13,450 vendar tudi to ni zelo enostavno, da bi se ponavlja. 686 00:56:13,450 --> 00:56:16,910 To je zelo enostavno. 687 00:56:16,910 --> 00:56:19,170 Ta izvedba vrste spajanja, 688 00:56:19,170 --> 00:56:22,140 združiti, ne glede na to, kaj počnete, boste graditi spajanje. 689 00:56:22,140 --> 00:56:29,170 >> Tako nekako združiti zgrajen na vrhu spajanja rekurzivno je samo te tri vrstice. 690 00:56:29,170 --> 00:56:34,700 Iterativno, je bolj siten in težje misliti. 691 00:56:34,700 --> 00:56:41,860 Toda opazil, da to ni rep rekurzivna, ker mergeSortHelp - ko sebe imenuje - 692 00:56:41,860 --> 00:56:46,590 mora še delati stvari po tem rekurzivni klic vrne. 693 00:56:46,590 --> 00:56:50,830 Zato mora ta sklad okvir še naprej obstaja tudi po tem kliče. 694 00:56:50,830 --> 00:56:54,170 In potem, ko pokličeš to mora sklad okvir še naprej obstaja 695 00:56:54,170 --> 00:56:57,780 ker je tudi po tem razpisu, bomo še vedno morali združiti. 696 00:56:57,780 --> 00:57:01,920 In to ni enostavna, da bi to rep rekurzivno. 697 00:57:04,070 --> 00:57:06,270 Vprašanja? 698 00:57:08,300 --> 00:57:09,860 V redu. 699 00:57:09,860 --> 00:57:13,400 Torej grem nazaj, da razvrstite - oh, tam je dve stvari, ki jih želim pokazati. Ok. 700 00:57:13,400 --> 00:57:17,840 Če se vrnemo k uredi, bomo to hitro. 701 00:57:17,840 --> 00:57:21,030 Ali iskanje. Razvrsti? Sortiraj. Ja. 702 00:57:21,030 --> 00:57:22,730 Če se vrnemo na začetke vrste. 703 00:57:22,730 --> 00:57:29,870 Želimo ustvariti algoritem, ki razvršča matrike z uporabo katerega koli algoritma 704 00:57:29,870 --> 00:57:33,660 V O n. 705 00:57:33,660 --> 00:57:40,860 Torej, kako je to mogoče? Ima kdo kakršno koli - 706 00:57:40,860 --> 00:57:44,300 Sem namignil prej - 707 00:57:44,300 --> 00:57:48,300 Če smo na tem, da izboljša od n log n do O n 708 00:57:48,300 --> 00:57:51,450 smo izboljšali naš algoritem čas pametno, 709 00:57:51,450 --> 00:57:55,250 kar pomeni, kaj bomo morali storiti, da bi za to? 710 00:57:55,250 --> 00:57:59,520 [Študent] Space. >> Ja. Bomo uporabljali več prostora. 711 00:57:59,520 --> 00:58:04,490 In niti ni tako več prostora, je eksponentno več prostora. 712 00:58:04,490 --> 00:58:14,320 Zato mislim, da je ta vrsta algoritma je psevdo nekaj, psevdo polynom - 713 00:58:14,320 --> 00:58:18,980 psevdo - Ne spomnim se. Lažni nekaj. 714 00:58:18,980 --> 00:58:22,210 Ampak to je zato, ker smo morali uporabiti toliko prostora 715 00:58:22,210 --> 00:58:28,610 da je to mogoče doseči, vendar ni realno. 716 00:58:28,610 --> 00:58:31,220 >> In kako to doseči? 717 00:58:31,220 --> 00:58:36,810 To dosežemo, če bomo zagotovili, da vsak element v matriki 718 00:58:36,810 --> 00:58:39,600 pod določeno velikost. 719 00:58:42,070 --> 00:58:44,500 Torej, kaj je pravkar rekel, da velikost je 200, 720 00:58:44,500 --> 00:58:48,130 vsak element v matriki je pod velikost 200. 721 00:58:48,130 --> 00:58:51,080 In to je pravzaprav zelo realno. 722 00:58:51,080 --> 00:58:58,660 Lahko zelo enostavno imeti niz, ki ga poznate vse kar je v njem 723 00:58:58,660 --> 00:59:00,570 se bo manj kot nekaj več. 724 00:59:00,570 --> 00:59:07,400 Všeč mi je, če imate nekaj povsem ogromen vektor ali kaj podobnega 725 00:59:07,400 --> 00:59:11,810 ampak veš vse, kar se dogaja, da je med 0 in 5, 726 00:59:11,810 --> 00:59:14,790 potem se bo bistveno hitreje, da to storijo. 727 00:59:14,790 --> 00:59:17,930 In vezana na katerikoli od elementov je 5, 728 00:59:17,930 --> 00:59:21,980 tako da je ta vezan, da je, koliko pomnilnika boste uporabili. 729 00:59:21,980 --> 00:59:26,300 Torej, vezan je 200. 730 00:59:26,300 --> 00:59:32,960 V teoriji je vedno vezan, saj lahko celo le do 4 milijarde, 731 00:59:32,960 --> 00:59:40,600 ampak to je nerealno, ker potem bi se z uporabo prostora 732 00:59:40,600 --> 00:59:44,400 o vrstnem redu v višini 4 milijarde EUR. Torej, to je nerealno. 733 00:59:44,400 --> 00:59:47,060 Ampak tukaj bomo rekli naši vezana je 200. 734 00:59:47,060 --> 00:59:59,570 Trik, da to počne v O n je naredimo še eno vrsto, imenovano grofje velikosti zavezuje. 735 00:59:59,570 --> 01:00:10,470 Torej, dejansko je to bližnjica za - Pravzaprav ne vem, če ima to Jek. 736 01:00:11,150 --> 01:00:15,330 Toda v Zalivu, da je vsaj - Jaz sem ob predpostavki, da to počne tudi Jek - 737 01:00:15,330 --> 01:00:18,180 To bo samo inicializacijo celotno paleto za 0s. 738 01:00:18,180 --> 01:00:25,320 Torej, če ne želite storiti, potem bi jaz naredil posebej for (int i = 0; 739 01:00:25,320 --> 01:00:31,500 i 01:00:35,260 Torej, zdaj je vse inicializira na 0. 741 01:00:35,260 --> 01:00:39,570 Ponovil sem nad mojo array, 742 01:00:39,570 --> 01:00:51,920 in kaj počnem jaz, je štetje števila vsak - Greva tukaj. 743 01:00:51,920 --> 01:00:55,480 Imamo 4, 15, 16, 50, 8, 23, 42, 108. 744 01:00:55,480 --> 01:01:00,010 Kaj sem štetja je število ponovitev vsakega od teh elementov. 745 01:01:00,010 --> 01:01:03,470 Naj dejansko dodali nekaj več tukaj z nekaj ponovitev. 746 01:01:03,470 --> 01:01:11,070 Torej vrednost imamo tukaj, je vrednost, ki se bo matrika [i]. 747 01:01:11,070 --> 01:01:14,850 Tako bi lahko val 4 ali 8 ali karkoli. 748 01:01:14,850 --> 01:01:18,870 In zdaj sem štetje, koliko od te vrednosti, kar sem videl, 749 01:01:18,870 --> 01:01:21,230 tako šteje [val] + +; 750 01:01:21,230 --> 01:01:29,430 Ko je to storjeno, pričakuje se bo izgledal nekako 0001. 751 01:01:29,430 --> 01:01:42,190 Naredimo šteje [val] - VEZANA + 1. 752 01:01:42,190 --> 01:01:48,230 >> No, to je samo, da se upoštevalo dejstvo, da smo z začetkom od 0. 753 01:01:48,230 --> 01:01:50,850 Torej, če 200 se bo naša največja številka, 754 01:01:50,850 --> 01:01:54,720 Nato 0-200 je 201 stvari. 755 01:01:54,720 --> 01:02:01,540 Torej točk, bo to videti kot 00.001, ker imamo eno 4. 756 01:02:01,540 --> 01:02:10,210 Potem bomo imeli 0001, kjer bomo imeli 1 v 8. indeks štetjem. 757 01:02:10,210 --> 01:02:14,560 Imeli bomo 2 v 23. indeksa štetjem. 758 01:02:14,560 --> 01:02:17,630 Imeli bomo 2 v indeksu 42. štetjem. 759 01:02:17,630 --> 01:02:21,670 Tako bomo lahko uporabite count. 760 01:02:34,270 --> 01:02:44,920 Torej num_of_item = število [i]. 761 01:02:44,920 --> 01:02:52,540 In tako, če num_of_item je 2, kar pomeni, da želimo vstaviti 2 od števila i 762 01:02:52,540 --> 01:02:55,290 v našem razvrščene matrike. 763 01:02:55,290 --> 01:03:02,000 Zato moramo slediti, kako daleč smo v matriki. 764 01:03:02,000 --> 01:03:05,470 Torej, indeks = 0. 765 01:03:05,470 --> 01:03:09,910 Array - bom napisal. 766 01:03:16,660 --> 01:03:18,020 Grofje - 767 01:03:19,990 --> 01:03:28,580 array [index + +] = i; 768 01:03:28,580 --> 01:03:32,490 Je to tisto, kar hočem? Mislim, da je tisto, kar hočem. 769 01:03:35,100 --> 01:03:38,290 Ja, to je v redu. Ok. 770 01:03:38,290 --> 01:03:43,050 Torej, to vsi razumejo, kaj je namen mojega niza grofje je? 771 01:03:43,050 --> 01:03:48,140 To je štetje število ponovitev za vsako od teh številk. 772 01:03:48,140 --> 01:03:51,780 Potem sem ponavljanjem, ki šteje več kot matriko, 773 01:03:51,780 --> 01:03:57,190 in i-položaj v matriki grofje 774 01:03:57,190 --> 01:04:01,930 je število i, da bi bilo videti v mojem razvrščene array. 775 01:04:01,930 --> 01:04:06,840 Zato se število 4 se bo 1 776 01:04:06,840 --> 01:04:11,840 in grofje 8 se bo 1, 23 točk pa se bo 2. 777 01:04:11,840 --> 01:04:16,900 Torej, to je, koliko jih želim vstaviti v mojo razvrščene matrike. 778 01:04:16,900 --> 01:04:19,200 Potem pa sem naredil. 779 01:04:19,200 --> 01:04:28,960 Jaz sem vstavljanje num_of_item i je v moji razvrščene matrike. 780 01:04:28,960 --> 01:04:31,670 >> Vprašanja? 781 01:04:32,460 --> 01:04:43,100 In tako spet, to je linearen čas, saj smo tik pred ponavljanjem tokrat, 782 01:04:43,100 --> 01:04:47,470 ampak to je tudi linearna, kaj to število zgodi, da se, 783 01:04:47,470 --> 01:04:50,730 in tako je močno odvisna od tega, kaj vam je vezan. 784 01:04:50,730 --> 01:04:53,290 Z vezan na 200, to ni tako slabo. 785 01:04:53,290 --> 01:04:58,330 Če je vaš veže se bo 10.000, potem je to malo slabše, 786 01:04:58,330 --> 01:05:01,360 če pa veže se bo 4 milijarde EUR, to je povsem nerealno 787 01:05:01,360 --> 01:05:07,720 in to polje bo morala biti velikost 4 milijarde EUR, kar je nerealno. 788 01:05:07,720 --> 01:05:10,860 Torej, to je to. Vprašanja? 789 01:05:10,860 --> 01:05:13,270 [Neslišno študentski odziv] >> Ok. 790 01:05:13,270 --> 01:05:15,710 Spoznal sem še eno stvar, ko smo šli skozi. 791 01:05:17,980 --> 01:05:23,720 Mislim, da je problem v Lucas je in verjetno vsak posameznik, ki smo jih videli. 792 01:05:23,720 --> 01:05:26,330 Čisto sem pozabil. 793 01:05:26,330 --> 01:05:31,040 Edina stvar, ki sem želel komentirati, je, da ko imate opravka s stvarmi, kot so indeksi, 794 01:05:31,040 --> 01:05:38,320 nikoli zares videti, ko pišeš za zanke, 795 01:05:38,320 --> 01:05:41,120 ampak tehnično, kadar imate opravka s temi indeksi, 796 01:05:41,120 --> 01:05:45,950 morate precej vedno ukvarjajo z nepodpisane celih števil. 797 01:05:45,950 --> 01:05:53,850 Razlog za to je, ko imate opravka s podpisanimi števil, 798 01:05:53,850 --> 01:05:56,090 tako da če imate 2 podpisane števil in jih dodate skupaj 799 01:05:56,090 --> 01:06:00,640 in se na koncu preveč, potem si na koncu z negativnim predznakom. 800 01:06:00,640 --> 01:06:03,410 Torej, to je tisto, kar je celo preliv. 801 01:06:03,410 --> 01:06:10,500 >> Če dodam 2000000000 in 1000000000, sem končal z negativnim 1 milijardo EUR. 802 01:06:10,500 --> 01:06:15,480 Tako je cela delo na računalnikih. 803 01:06:15,480 --> 01:06:17,510 Torej, problem pri uporabi - 804 01:06:17,510 --> 01:06:23,500 To je v redu, razen če se zgodi, da je nizka 2 milijardi in se zgodi, da bo 1 milijardo EUR, 805 01:06:23,500 --> 01:06:27,120 potem bo to negativno 1 milijarde EUR in potem bomo to delite z 2 806 01:06:27,120 --> 01:06:29,730 in na koncu z negativnim 500 milijonov EUR. 807 01:06:29,730 --> 01:06:33,760 Torej, to je samo vprašanje, če se zgodi, da bo iskanje po matriki 808 01:06:33,760 --> 01:06:38,070 milijard stvari. 809 01:06:38,070 --> 01:06:44,050 Ampak, če nizka do + zgodi overflow, potem je to problem. 810 01:06:44,050 --> 01:06:47,750 Takoj, ko smo jih podpisana, potem 2 milijard evrov 1000000000 znaša 3 milijarde EUR. 811 01:06:47,750 --> 01:06:51,960 3000000000 deljeno z 2 je 1,5 milijarde evrov. 812 01:06:51,960 --> 01:06:55,670 Torej, takoj, oni nepodpisana, je vse popolno. 813 01:06:55,670 --> 01:06:59,900 In tako je tudi problem, ko pišete for zanke, 814 01:06:59,900 --> 01:07:03,940 in dejansko je verjetno stori samodejno. 815 01:07:09,130 --> 01:07:12,330 To bo pravzaprav le kričati na vas. 816 01:07:12,330 --> 01:07:21,610 Torej, če je ta številka prevelika, da bi lahko v samo celo število, vendar bi ustrezal unsigned integer, 817 01:07:21,610 --> 01:07:24,970 bo kriči na vas, tako da je, zakaj ne boste nikoli zares teče v vprašanju. 818 01:07:29,150 --> 01:07:34,820 Vidite lahko, da je indeks nikoli ne bo negativna 819 01:07:34,820 --> 01:07:39,220 in tako, ko ste ponavljanjem v matriko, 820 01:07:39,220 --> 01:07:43,970 lahko skoraj vedno pravim unsigned int i, vendar ne boste res treba. 821 01:07:43,970 --> 01:07:47,110 Stvari gredo na delo precej preprosto, kot dobro. 822 01:07:48,740 --> 01:07:50,090 Ok. [Šepeta] Koliko je ura? 823 01:07:50,090 --> 01:07:54,020 Zadnja stvar, ki sem želel pokazati - in bom naredil res hitro. 824 01:07:54,020 --> 01:08:03,190 Saj veste, kako smo # define, da bomo lahko # define MAX kot 5 ali kaj podobnega? 825 01:08:03,190 --> 01:08:05,940 Ne smemo storiti MAX. # Define zavezana kot 200 ljudi. To je tisto, kar smo že naredili. 826 01:08:05,940 --> 01:08:10,380 Ta določa, da je konstanto, ki je pravkar dogaja, da se kopirali in prilepili 827 01:08:10,380 --> 01:08:13,010 kadar se zgodi, da napišete svoje obveze. 828 01:08:13,010 --> 01:08:18,189 >> Tako bomo lahko dejansko narediti več z # opredeljuje. 829 01:08:18,189 --> 01:08:21,170 Mi lahko # define funkcije. 830 01:08:21,170 --> 01:08:23,410 Oni niso zares deluje, vendar bomo jim pravimo funkcije. 831 01:08:23,410 --> 01:08:36,000 Primer bi lahko nekaj podobnega MAX (x, y) je opredeljena kot (x 01:08:40,660 Torej bi se navadiš na trikomponentnih operaterja sintakso, 833 01:08:40,660 --> 01:08:49,029 vendar je x manjši od y? Vrni y, drugače vrne x. 834 01:08:49,029 --> 01:08:54,390 Tako lahko vidite, lahko to posebno funkcijo, 835 01:08:54,390 --> 01:09:01,399 in bi se kot funkcija int MAX traja 2 argumente, vrnil. 836 01:09:01,399 --> 01:09:08,340 To je ena izmed najpogostejših vidim storili takole. Pravimo jim makrov. 837 01:09:08,340 --> 01:09:11,790 To je makro. 838 01:09:11,790 --> 01:09:15,859 To je samo sintaksa za to. 839 01:09:15,859 --> 01:09:18,740 Lahko napišete makro, ki naredi vse, kar si želite. 840 01:09:18,740 --> 01:09:22,649 Si pogosto videti makrov za razhroščevanje printfs in podobno. 841 01:09:22,649 --> 01:09:29,410 Torej, tip printf obstajajo posebni konstante v C, kot poudarjajo LINE poudarjajo, 842 01:09:29,410 --> 01:09:31,710 2 poudarja LINE poudarjajo, 843 01:09:31,710 --> 01:09:37,550 in tam je tudi mislim, da 2 poudarja FUNC. To bi lahko bilo. Nekaj ​​takega. 844 01:09:37,550 --> 01:09:40,880 Te stvari bo nadomeščen z imenom funkcije 845 01:09:40,880 --> 01:09:42,930 ali številko proge, ki ste na. 846 01:09:42,930 --> 01:09:48,630 Pogosto pa pišete Razhroščevalna printfs, da tukaj sem lahko potem samo napisati 847 01:09:48,630 --> 01:09:54,260 Odpravljati napake in se bo izpisal število vrstic in funkcijo, ki mi zgodi, da se v 848 01:09:54,260 --> 01:09:57,020 da bi naletela na to debug izjavo. 849 01:09:57,020 --> 01:09:59,550 In si lahko natisnete tudi druge stvari. 850 01:09:59,550 --> 01:10:05,990 Torej, ena stvar, ki jo je treba paziti jasno zakaj je, če sem se zgodi, da # define DOUBLE_MAX 851 01:10:05,990 --> 01:10:11,380 kot nekaj podobnega 2 * y in 2 * x. 852 01:10:11,380 --> 01:10:14,310 Torej, ne glede na razlog za, se zgodi, da to, da je veliko. 853 01:10:14,310 --> 01:10:16,650 Zato bi bilo makro. 854 01:10:16,650 --> 01:10:18,680 To je dejansko prekinjena. 855 01:10:18,680 --> 01:10:23,050 Jaz bi ga poklical s tem, kaj takega DOUBLE_MAX (3, 6). 856 01:10:23,050 --> 01:10:27,530 Torej, kaj bi bilo treba vrniti? 857 01:10:28,840 --> 01:10:30,580 [Študent] 12. 858 01:10:30,580 --> 01:10:34,800 Da bi bilo treba vrniti 12 in 12 se vrne. 859 01:10:34,800 --> 01:10:43,350 3 gets nadomestiti x, dobi 6 nadomesti za y in se vrnemo 2 * 6, ki je 12. 860 01:10:43,350 --> 01:10:47,710 Kaj je zdaj to? Kaj bi bilo treba vrniti? 861 01:10:47,710 --> 01:10:50,330 [Študent] 14. >> Idealno 14. 862 01:10:50,330 --> 01:10:55,290 Vprašanje je, kako hash opredeljuje delo, se spomnite, da je dobesedno kopiranje in lepljenje 863 01:10:55,290 --> 01:11:00,160 od zal veliko vse, kaj bo to treba razlagati tako, 864 01:11:00,160 --> 01:11:11,270 je 3 manj kot 1 plus 6, 2-krat 1 plus 6, 2-krat 3. 865 01:11:11,270 --> 01:11:19,780 >> Torej iz tega razloga skoraj vedno zaviti vse, kar je v oklepajih. 866 01:11:22,180 --> 01:11:25,050 Vsaka spremenljivka skoraj vedno zaviti v oklepajih. 867 01:11:25,050 --> 01:11:29,570 Obstajajo primeri, kjer ne bi bilo treba, kot vem, da mi ni treba storiti, da tukaj 868 01:11:29,570 --> 01:11:32,110 ker je manj kot je precej vedno le na delovno mesto, 869 01:11:32,110 --> 01:11:34,330 čeprav to morda sploh ne bi bilo res. 870 01:11:34,330 --> 01:11:41,870 Če je kaj smešno, kot DOUBLE_MAX (1 == 2), 871 01:11:41,870 --> 01:11:49,760 potem se dogaja, da se zamenja s 3 manj kot 1 enaka enaka 2, 872 01:11:49,760 --> 01:11:53,460 in tako potem bo naredil 3 manj kot 1, ne da enaka 2, 873 01:11:53,460 --> 01:11:55,620 ki ni tisto, kar si želimo. 874 01:11:55,620 --> 01:12:00,730 Torej, da bi preprečili operaterja izpiąemo težave, 875 01:12:00,730 --> 01:12:02,870 vedno zaviti v oklepajih. 876 01:12:03,290 --> 01:12:07,700 Ok. In to je to, 5:30. 877 01:12:08,140 --> 01:12:12,470 Če imate kakršna koli vprašanja v zvezi z pset, nam to sporočite. 878 01:12:12,470 --> 01:12:18,010 To bi bilo zabavno, in heker izdaja tudi veliko bolj realistična 879 01:12:18,010 --> 01:12:22,980 od hacker izdaji lani, zato upamo, da veliko od vas poskusiti. 880 01:12:22,980 --> 01:12:26,460 Lansko leto je bilo zelo veliko. 881 01:12:28,370 --> 01:12:30,000 >> [CS50.TV]