1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 David MALAN: Lahat ng karapatan. 3 00:00:11,940 --> 00:00:16,470 Kaya ito ay CS50, at ito ay ngayon ang simula ng linggo tatlo. 4 00:00:16,470 --> 00:00:19,960 >> Kaya hanggang ngayon, hindi namin nagsusulat mga programa sa C 5 00:00:19,960 --> 00:00:23,210 na mukhang ng kaunti isang bagay na tulad nito dito. 6 00:00:23,210 --> 00:00:25,470 Kaya Nakakuha kami ng ilang mga matalim Kabilang sa tuktok. 7 00:00:25,470 --> 00:00:28,490 Mayroon kaming int, pangunahing, walang bisa, at pagkatapos ng isang bagay na gawin sa gitna, 8 00:00:28,490 --> 00:00:30,590 ilang sandali ng code sa loob ng ng na function. 9 00:00:30,590 --> 00:00:34,170 Ngunit key ay ang katotohanan na Na-sinasabi namin walang bisa dito. 10 00:00:34,170 --> 00:00:39,320 Kaya walang silbi, ang lahat ng mga oras na ito, tinutukoy ang programang ito, kapag tumakbo, 11 00:00:39,320 --> 00:00:41,300 Maaari lamang tumakbo sa pamamagitan ng pangalan nito. 12 00:00:41,300 --> 00:00:46,330 Hindi mo maaaring i-type ang anumang iba pang mga salita o mga numero pagkatapos ng pangalan ng program kapag 13 00:00:46,330 --> 00:00:46,830 tumatakbo ito. 14 00:00:46,830 --> 00:00:51,200 Kaya, halimbawa, kung ang programa ay pinagsama-sama sa isang file na tinatawag na kumusta, 15 00:00:51,200 --> 00:00:53,480 maaari mong gawin ./hello, ngunit na ito. 16 00:00:53,480 --> 00:00:56,750 >> Ang tanging paraan na maaari mong magbigay ng pag-input sa program na ito 17 00:00:56,750 --> 00:00:57,960 ay sa pamamagitan ng pagtawag ng isang function. 18 00:00:57,960 --> 00:00:59,790 Halimbawa, kung ano ang function na nakagawa kami ng gamit kaya malayo 19 00:00:59,790 --> 00:01:00,950 upang makakuha ng input mula sa user? 20 00:01:00,950 --> 00:01:02,117 >> Madla: Kumuha ng string. 21 00:01:02,117 --> 00:01:04,700 David MALAN: Upang makakuha ng mga string, o makakuha ng int, o na iyong nakita sa iba, 22 00:01:04,700 --> 00:01:07,630 kahit na hindi ka pa ginamit ang mga ito, tulad makakuha ng mahaba, mahaba at mga katulad. 23 00:01:07,630 --> 00:01:09,380 Ngunit ipagpalagay na kami talagang gusto mong simulan ang 24 00:01:09,380 --> 00:01:12,760 mga programa ng pagsulat na ang kaunti pa versatile, at, tapat, ng kaunti pa 25 00:01:12,760 --> 00:01:15,090 tulad ng mga utos na hindi mo Na-pagkuha, sana, 26 00:01:15,090 --> 00:01:16,550 Medyo Nakasanayan na. 27 00:01:16,550 --> 00:01:18,560 Tulad ng cd espasyo Dropbox. 28 00:01:18,560 --> 00:01:20,800 Ito, siyempre, ang mga pagbabago iyong direktoryo, ipagpalagay 29 00:01:20,800 --> 00:01:23,590 ikaw ay nasa bahay John Harvard ni direktoryo, upang ang iyong mga folder Dropbox. 30 00:01:23,590 --> 00:01:27,380 Samantala, isang command na tulad nito ay lumikha ng isang bagong direktoryo na tinatawag na pset2, 31 00:01:27,380 --> 00:01:30,290 bilang na maaaring mayroon ka na o ay lalong madaling panahon para sa problema magtakda ng dalawang. 32 00:01:30,290 --> 00:01:33,970 Gawing Kamusta, siyempre, ay isang command na na Bumubuo ang isang programa na tinatawag na kumusta 33 00:01:33,970 --> 00:01:35,770 mula sa isang file na tinatawag na kumusta na tuldok c. 34 00:01:35,770 --> 00:01:39,140 At sa bawat isa sa mga kaso, ngayon, mayroon kaming 35 00:01:39,140 --> 00:01:43,620 magbigay ng isang argumento sa tinatawag na command line, ang mga kumikislap na prompt, 36 00:01:43,620 --> 00:01:48,540 kaya na alam ng make na ano upang bumuo, at sa gayon alam na kung ano mkdir folder upang lumikha, 37 00:01:48,540 --> 00:01:51,110 at nang sa gayon ay alam na cd kung saan mo gustong pumunta. 38 00:01:51,110 --> 00:01:54,720 Pero hanggang ngayon, panatilihin namin sinasabi na pangunahing, ang iyong default na function, 39 00:01:54,720 --> 00:01:58,500 May bisa expression sa loob ng mga panaklong, 40 00:01:58,500 --> 00:02:01,250 na nangangahulugan na ito hindi maaaring gumawa ng anumang mga argumento. 41 00:02:01,250 --> 00:02:03,240 >> Kaya simula ngayon, kung ano ang namin ang pagpunta sa gawin 42 00:02:03,240 --> 00:02:06,270 ay, kami ay pagpunta sa simulan pagsuporta sa mga bagay na tulad nito kahit. 43 00:02:06,270 --> 00:02:08,990 Sa katunayan, sa kasong ito, kung saan mo Hindi ko karaniwang sa mano-manong i-type, 44 00:02:08,990 --> 00:02:11,130 Gawing ay ginagawa ito para sa atin, wala 45 00:02:11,130 --> 00:02:15,840 isa maliban sa isa, dalawa, tatlo karagdagang mga string pagkatapos ng program na may pangalang 46 00:02:15,840 --> 00:02:16,850 clang. 47 00:02:16,850 --> 00:02:18,240 Kaya paano ko namin makamit ito? 48 00:02:18,240 --> 00:02:20,260 >> Well, simula ngayon, sa mga kaso kung saan kami gusto 49 00:02:20,260 --> 00:02:22,855 upang magbigay ng input sa pamamagitan ng tinatawag na command line, 50 00:02:22,855 --> 00:02:24,980 kami ay pagpunta upang magsimulang magdagdag ng dito kung ano ang sa yellow-- 51 00:02:24,980 --> 00:02:30,520 pinapalitan walang bisa sa int argc kuwit string argv bukas bracket malapit bracket. 52 00:02:30,520 --> 00:02:32,520 Ngayon ito ay kawili-wiling para sa ilang mga kadahilanan. 53 00:02:32,520 --> 00:02:35,690 Isa na itong ibang mapupuntahan upang ipaalam sa amin sumulat mga programa na mas dynamic ang kaunti. 54 00:02:35,690 --> 00:02:37,570 Ngunit, higit compellingly, ito ang nangyayari upang buksan ang 55 00:02:37,570 --> 00:02:40,340 ngayon ng isang pag-uusap bilang sa kung ano ang array maaari talaga 56 00:02:40,340 --> 00:02:43,300 gagamitin, para sa kung ano ang isang string ay tunay na sa ilalim ng hood, 57 00:02:43,300 --> 00:02:47,320 hanggang sa susunod na linggo kung kailan sisimulan namin ang diving sa kahit na mas malalim na bilang sa kung paano ang mga machine ay 58 00:02:47,320 --> 00:02:48,590 paggawa ng lahat ng ito bagay-bagay sa trabaho. 59 00:02:48,590 --> 00:02:51,920 Ngunit sa ngayon, gumuhit ng ipaalam, marahil, ang isang litrato. 60 00:02:51,920 --> 00:02:54,950 >> Kapag sumulat ka ng isang programa may pangunahing ipinahayag 61 00:02:54,950 --> 00:02:58,810 sa ganitong paraan, katulad na pangunahing tumatagal ng dalawang argumento, isang int 62 00:02:58,810 --> 00:03:03,233 and-- kung anong uri ng data ay ang pangalawang argumento? 63 00:03:03,233 --> 00:03:04,529 >> Madla: Ang array. 64 00:03:04,529 --> 00:03:05,320 David MALAN: Ang array. 65 00:03:05,320 --> 00:03:09,170 Kaya tinitingnan nito unang sulyap tulad ng ito ay isang string, ngunit mapansin ang mga square bracket. 66 00:03:09,170 --> 00:03:12,760 Isipin ang huling beses na ipinakilala namin ang paniwala ng isang array. 67 00:03:12,760 --> 00:03:16,210 At array gamitin ang square bracket sa loob ng ilang konteksto. 68 00:03:16,210 --> 00:03:19,160 Maaari mong gamitin ang square bracket upang pumunta sa isang array 69 00:03:19,160 --> 00:03:22,710 at kumuha ng isang partikular na elemento, gaya ng bracket 0 o bracket 1 o 2 bracket. 70 00:03:22,710 --> 00:03:25,500 Ngunit nakita namin, kung panandalian, noong nakaraang linggo na rin 71 00:03:25,500 --> 00:03:28,790 gamitin ang mga square bracket upang ipinahahayag ang laki ng isang array, 72 00:03:28,790 --> 00:03:31,790 kung alam mo nang maaga kung gaano karaming mga ints o kung gaano karaming mga string o kahit anong ka 73 00:03:31,790 --> 00:03:32,630 talaga gusto. 74 00:03:32,630 --> 00:03:34,790 Kaya ito ay lumiliko out doon ni isang third konteksto dito 75 00:03:34,790 --> 00:03:37,890 na may loob walang numero ng mga square bracket. 76 00:03:37,890 --> 00:03:41,920 Kapag tinukoy mo, pati na mayroon akong dito, ang pangalan ng isang bagay tulad ng argv, 77 00:03:41,920 --> 00:03:44,550 na kung saan ay lamang ng isang magarbong paraan ng sinasabi ng argumento ng vector, na 78 00:03:44,550 --> 00:03:47,750 ay isa pang magarbong paraan ng sinasabi ng isang array ng mga argument, 79 00:03:47,750 --> 00:03:50,870 bukas bracket malapit bracket lamang ay nangangahulugan na gawin mo ay hindi kinakailangang 80 00:03:50,870 --> 00:03:52,960 alam nang maaga kung gaano kalaki ang array ay magiging, 81 00:03:52,960 --> 00:03:55,070 ngunit alam mo ito ay pagpunta sa isang array. 82 00:03:55,070 --> 00:03:57,320 Kaya kung hindi mo alam ang numero huwag ilagay ito sa doon, 83 00:03:57,320 --> 00:04:01,160 para bukas bracket malapit bracket ay nangangahulugan na ang argv ay hindi isang string, 84 00:04:01,160 --> 00:04:03,124 ngunit isang array ng mga string. 85 00:04:03,124 --> 00:04:05,040 Kaya syntactically, kung ikaw sa tingin bumalik noong nakaraang linggo, 86 00:04:05,040 --> 00:04:09,460 ito ay halos kapareho sa sinasabi isang bagay tulad ng int edad bukas bracket, 87 00:04:09,460 --> 00:04:10,984 at pagkatapos ay isang bagay pagkatapos. 88 00:04:10,984 --> 00:04:12,150 Kaya kung ano ang ibig ito hitsura? 89 00:04:12,150 --> 00:04:13,399 Aktwal na gumuhit ng larawan Hayaang. 90 00:04:13,399 --> 00:04:18,756 Kaya kapag nagpatakbo ka ng programa na ito sa Main pagkakaroon ng dalawang argumento ng nilinaw sa loob 91 00:04:18,756 --> 00:04:21,339 ng mga panaklong, mo mahalagang magkaroon ng hindi bababa sa dalawang chunks 92 00:04:21,339 --> 00:04:23,560 ng memorya ipinasa sa iyo sa ilalim ng hood. 93 00:04:23,560 --> 00:04:26,550 Ang isa, pati na idedetalye ko at kumukuha ng mga ito na parihaba, Pupunta na tinatawag na argc. 94 00:04:26,550 --> 00:04:30,645 At tulad ng isang mabilis na pagbabalik-tanaw, kung ano ang uri ng data ng argc? 95 00:04:30,645 --> 00:04:31,270 Kaya ito ay isang int. 96 00:04:31,270 --> 00:04:33,480 Kaya isang numero ay pagpunta upang pumunta sa argc-- mga liko 97 00:04:33,480 --> 00:04:35,660 out na ang ibig sabihin ay ang bilang argumento. 98 00:04:35,660 --> 00:04:38,887 Samantala, iginuhit ko ang argv bilang isang array. 99 00:04:38,887 --> 00:04:40,970 At hindi ko talaga alam kung gaano katagal ito ay magiging, 100 00:04:40,970 --> 00:04:42,470 kaya para sa mga layuning ngayong araw na tuldok tuldok tuldok. 101 00:04:42,470 --> 00:04:43,636 Maaaring makakuha ng ilang haba. 102 00:04:43,636 --> 00:04:45,640 Ngunit na nakalarawan ko dito hindi bababa sa apat na mga parihaba. 103 00:04:45,640 --> 00:04:50,970 Kaya argv isang chunk ng memorya na tindahan string string string tuldok tuldok tuldok, 104 00:04:50,970 --> 00:04:53,950 at argc ay isa lamang chunk ng memory para sa isang integer. 105 00:04:53,950 --> 00:04:55,710 >> Kaya ngayon, maging higit pa ng kaunti tumpak na ipaalam. 106 00:04:55,710 --> 00:04:59,200 Kung, kapag mayroon akong mga string sa array na ito, na tinatawag na 107 00:04:59,200 --> 00:05:03,290 argv, gusto kong makakuha sa kanila nang paisa-isa, tulad ng nakaraang linggo, 108 00:05:03,290 --> 00:05:05,670 kami ay pagpunta sa gumamit ng pagtatanda tulad ng argv bracket 0 109 00:05:05,670 --> 00:05:07,650 upang makuha ang unang bagay na isang array. 110 00:05:07,650 --> 00:05:10,440 Argv bracket 1 upang makuha ang ikalawang bagay, at iba pa. 111 00:05:10,440 --> 00:05:14,597 Ang susi dito pagiging handa pa rin namin 0 indexed-- namin ang pagbibilang pa rin mula sa 0. 112 00:05:14,597 --> 00:05:16,430 Kaya ngayon sabihin aktwal maglagay ng isang bagay sa ito. 113 00:05:16,430 --> 00:05:21,670 Kung ako ay upang makatipon ng isang programa na tinatawag na kumusta mula sa isang file na tinatawag na kumusta na tuldok c, 114 00:05:21,670 --> 00:05:24,340 at pagkatapos ay ba akong magpatakbo ng programa na may tuldok iwa kumusta, 115 00:05:24,340 --> 00:05:28,380 ano ang ginagawa sa aking computer, ang aking laptop, mukhang sa ilalim ng hood 116 00:05:28,380 --> 00:05:31,300 sa sandaling ito ba akong magpatakbo ng tuldok iwa kumusta at pindutin ang Enter? 117 00:05:31,300 --> 00:05:33,500 Well, ito ay marahil ano ang maaari naming ilarawan 118 00:05:33,500 --> 00:05:37,010 bilang ang nilalaman ng iyong computer memorya, o RAM-- Random Access Memory. 119 00:05:37,010 --> 00:05:40,330 Sa ibang salita, ang computer, kahit papaano para sa iyo magically, 120 00:05:40,330 --> 00:05:45,360 Inilalagay ang numero 1 sa argc, aka argcount, at ito ay nilalagay sa literal na string 121 00:05:45,360 --> 00:05:48,200 ./hello sa argv bracket 0. 122 00:05:48,200 --> 00:05:51,750 Wala akong mga ideya, tapat, kung ano ang sa argv bracket 1 o 2 o 3, 123 00:05:51,750 --> 00:05:55,550 dahil kung ang gumagamit ay hindi nai-type ng kahit ano bukod sa ./hello, 124 00:05:55,550 --> 00:05:58,550 kami ay pagpunta sa ipagpalagay na ang mga ay pinaka-malamang na basura mga halaga, 125 00:05:58,550 --> 00:05:59,700 kaya upang makipag-usap. 126 00:05:59,700 --> 00:06:02,650 Yaong chunks ng memory umiiral, ngunit ito ay hindi hanggang sa amin 127 00:06:02,650 --> 00:06:05,710 upang tumingin sa kanila, dahil ang argcount ay isa lamang. 128 00:06:05,710 --> 00:06:07,870 >> Ngayon, samantala, kung ako sumulat makapagpatakbo ng isa pang programa, 129 00:06:07,870 --> 00:06:12,250 cd, na kung saan ay mas maayos ang isang command, sa iyong mga kumikislap prompt-- espasyo cd 130 00:06:12,250 --> 00:06:17,200 Dropbox-- kapag tumatakbo ko na, mabisa, kapag ang cd programa ay tatakbo, argc, 131 00:06:17,200 --> 00:06:22,270 sa loob ng memorya aking computer, ay para sa mga ang pinaka-briefest ikalawang ang bilang 2. 132 00:06:22,270 --> 00:06:25,936 At pagkatapos ay argv bracket o may cd, argv bracket 1 ay may Dropbox, 133 00:06:25,936 --> 00:06:28,560 at pagkatapos ng kurso ang command na makumpleto, kaya ang lahat ng ito memory 134 00:06:28,560 --> 00:06:30,420 lubos na mawala at ay ginagamit para sa ibang bagay. 135 00:06:30,420 --> 00:06:32,270 At iyon ang dahilan kung bakit sinasabi ko may split lamang segundo. 136 00:06:32,270 --> 00:06:35,720 >> Samantala, kung gagawin namin mkdir pset2, ang larawan ay mukhang parehong halos, 137 00:06:35,720 --> 00:06:37,900 subalit may ibang mga string sa loob argv. 138 00:06:37,900 --> 00:06:42,570 Kung gagawin ko clang gitling kumusta kumusta na tuldok c, parehong ideya. 139 00:06:42,570 --> 00:06:47,060 Higit pang mga bagay-bagay ay napunan na para sa argv, argc at, siyempre, ay 4. 140 00:06:47,060 --> 00:06:49,150 Kaya sa ibang salita, kahit na ito array 141 00:06:49,150 --> 00:06:52,950 Maaaring tuldok tuldok tuldok, ng ilang variable na haba, kaya upang makipag-usap, 142 00:06:52,950 --> 00:06:56,720 palagi mong alam kung saan ang dulo ng ito , dahil ang argc ay pagpunta sa sabihin sa iyo 143 00:06:56,720 --> 00:07:00,120 sa kung ano ang punto mayroon kang upang ihinto ang pagtingin sa mga elemento sa argv. 144 00:07:00,120 --> 00:07:03,660 Maaari mo lamang tumingin sa apat sa kabuuang sa kasong ito. 145 00:07:03,660 --> 00:07:06,600 >> Kaya sabihin ngayon tumingin sa, di kaya, isang simpleng programa. 146 00:07:06,600 --> 00:07:09,070 Isa na lamang sabi kumusta sa isang tao na tulad ng Zamyla. 147 00:07:09,070 --> 00:07:12,620 Kaya inaangkin ko ang pupuntahan ko magsulat ng isang programa sa sandali lamang sa pamamagitan ng kung saan maaaring kong gawin 148 00:07:12,620 --> 00:07:16,670 ./hello espasyo Zamyla, at pagkatapos ay nais ko ang aking mga programa upang i-print ang isang bagay 149 00:07:16,670 --> 00:07:18,520 super-simple tulad ng "kumusta, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Ngayon sa nakalipas na ginamit namin ang getstring. 151 00:07:20,100 --> 00:07:22,850 Kaya sa nakaraan, kahit na ikaw ay bago sa programming, 152 00:07:22,850 --> 00:07:27,180 logro ay maaari mong whip up ng isang program na gumagamit ng getstring 153 00:07:27,180 --> 00:07:29,390 at pagkatapos ay gumagamit ng printf upang sabihin hi sa Zamyla. 154 00:07:29,390 --> 00:07:31,290 Ngunit hindi na gamitin getstring oras na ito ipaalam. 155 00:07:31,290 --> 00:07:37,510 Hayaan akong pumunta sa halip sa Appliant at huwag magsama ng karaniwang ko O tuldok h. 156 00:07:37,510 --> 00:07:41,160 Hayaan akong Kasama rin sa CS50 tuldok h. 157 00:07:41,160 --> 00:07:44,730 Ngayon int pangunahing, at ngayon ako Hindi pagpunta sa gawin walang silbi ngayon. 158 00:07:44,730 --> 00:07:51,200 Sa halip, ako ako pagpunta sa gawin int argc string argv bukas bracket malapit bracket, 159 00:07:51,200 --> 00:07:52,640 hindi tumutukoy ng isang numero. 160 00:07:52,640 --> 00:07:54,644 At ngayon dito ay ang aking tinatawag na gawin. 161 00:07:54,644 --> 00:07:57,560 Ano pupuntahan ko na gawin ngayon ay, ako pagpunta sa gawin ang isang bit ng isang hakbang ng pananampalataya, 162 00:07:57,560 --> 00:08:00,560 Pupunta ako sa ipinapalagay na ang user pagpunta sa gamitin ang program na ito ng tama, 163 00:08:00,560 --> 00:08:04,980 at ako lamang ang pagpunta sa gawin printf kumusta,% SN. 164 00:08:04,980 --> 00:08:06,630 Kaya walang bagong doon. 165 00:08:06,630 --> 00:08:11,470 Pero gusto kong ngayon ilagay ang kahit anong salita ang mga uri ng user pagkatapos ng pangalan ng program. 166 00:08:11,470 --> 00:08:16,970 Kaya kung gagawin ko ./hello espasyo Zamyla, ako Gusto upang kahit papaano ng programming access 167 00:08:16,970 --> 00:08:20,870 quote unquote "Zamyla." kaya ko maaaring pumunta sa aking argumento vector, 168 00:08:20,870 --> 00:08:25,980 ang aking mga array ng mga string, at kung ang utos, muli, ay ./hello espasyo Zamyla, 169 00:08:25,980 --> 00:08:29,340 kung ano ang numero ang gusto ko ang ilalagay sa argv dito? 170 00:08:29,340 --> 00:08:29,840 Madla: 1. 171 00:08:29,840 --> 00:08:32,355 David MALAN: 1, dahil bracket 0 lumiliko out 172 00:08:32,355 --> 00:08:34,230 ay magiging ang pangalan ng program, pati na nakita natin. 173 00:08:34,230 --> 00:08:37,789 Kaya bracket 1 ay ang unang salita na ako, user, na-type. 174 00:08:37,789 --> 00:08:39,559 Pupunta ako sa magpatuloy at i-save ito. 175 00:08:39,559 --> 00:08:42,830 Pupunta ako sa pumunta sa aking folder kung saan inilagay ko ang file na ito. 176 00:08:42,830 --> 00:08:44,920 Pupunta ako sa gawin gumawa kumusta 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp IO ni. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla ang Enter. 179 00:08:51,380 --> 00:08:54,480 Ano ang gagawin ko mali? 180 00:08:54,480 --> 00:08:57,270 Ako ay nakuha sa pamamagitan ng sorpresa aking sarili para lamang ng ilang sandali doon. 181 00:08:57,270 --> 00:08:58,230 Ano ang gagawin ko mali? 182 00:08:58,230 --> 00:08:59,220 >> Madla: Pangalan. 183 00:08:59,220 --> 00:09:01,767 >> David MALAN: Ang file ay ni aktwal na tinatawag na hello3.c. 184 00:09:01,767 --> 00:09:03,850 At ginawa ko na lang para sa pagkakapare-pareho, dahil hindi namin 185 00:09:03,850 --> 00:09:06,550 Nagkaroon hello.c ni sa nakaraang sa online code. 186 00:09:06,550 --> 00:09:11,550 Kaya ni ayusin ito ./hello hayaan bracket gitling 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Ipasok. 188 00:09:12,370 --> 00:09:14,030 At ngayon ay mayroon kaming kumusta, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Samantala, ang maaari kong baguhin ito sa maging Rob, o talagang anumang iba pang mga salita. 190 00:09:17,650 --> 00:09:19,230 >> Ngunit Isaalang-alang natin ang isang sulok kaso ipaalam. 191 00:09:19,230 --> 00:09:24,360 Kung ano ang maaaring asahan mo ang mangyayari kung Hindi ko type ang pangalan ng sinuman sa lahat? 192 00:09:24,360 --> 00:09:25,270 >> Madla: Error. 193 00:09:25,270 --> 00:09:27,300 >> David MALAN: May error na ng isang uri, marahil. 194 00:09:27,300 --> 00:09:28,200 Ni makita Hayaan. 195 00:09:28,200 --> 00:09:29,440 Ipasok. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Kaya printf ay aktwal na pagiging isang maliit na proteksiyon sa atin 198 00:09:33,870 --> 00:09:38,131 dito, at literal na pag-print ng bukas paren null, ngunit kahit na mas masahol pa bagay na maaaring mangyari. 199 00:09:38,131 --> 00:09:40,130 At lamang upang ipakita isang bagay kung talagang 200 00:09:40,130 --> 00:09:42,800 hindi dapat gawin, sabihin pumunta sa dito at simulan poking sa paligid. 201 00:09:42,800 --> 00:09:43,300 Mag-right? 202 00:09:43,300 --> 00:09:46,410 Kung alam ko na ang larawan sa memorya ay lubos na ito, 203 00:09:46,410 --> 00:09:52,660 argv bracket 1 ay may Zamyla, argv bracket ay may 0 ./hello, o ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Ano ang sa bracket 2? 205 00:09:55,400 --> 00:09:58,210 Kaya ang maaari kong sagutin na tanungin ang sarili ko, tama? 206 00:09:58,210 --> 00:10:00,460 Maaari ko bang baguhin lamang ang 1 hanggang 2. 207 00:10:00,460 --> 00:10:07,270 Maaari ba akong mag-recompile ngayon kumusta 3, ./hello3 ng mag-zoom in at pindutin ang Enter Hayaan. 208 00:10:07,270 --> 00:10:08,270 Oops. 209 00:10:08,270 --> 00:10:10,660 Walang markang panipi. 210 00:10:10,660 --> 00:10:12,540 Kawili-wili. 211 00:10:12,540 --> 00:10:15,530 Kaya na uri ng mga cool na tingnan kung ano ang iba ay in dito. 212 00:10:15,530 --> 00:10:17,130 >> Kaya ano pa ay nasa loob ng aking laptop? 213 00:10:17,130 --> 00:10:20,390 I-save ni ito sa bracket 3 Hayaan. 214 00:10:20,390 --> 00:10:25,190 Gawing hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Nagtataka. 216 00:10:26,500 --> 00:10:30,560 At ngayon hayaan makakuha ng talagang bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Kaya na talagang diving malalim sa memorya ng aking computer. 218 00:10:34,340 --> 00:10:35,930 50-i-index sa. 219 00:10:35,930 --> 00:10:41,950 Kaya gumawa kumusta 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Nagtataka. 221 00:10:42,680 --> 00:10:44,660 Ang lahat ng mga karapatan, ngayon lang ako pagpunta upang makakuha ng walang ingat. 222 00:10:44,660 --> 00:10:47,331 Sabihin pumunta sa 5,000. 223 00:10:47,331 --> 00:10:47,830 Lahat ng karapatan. 224 00:10:47,830 --> 00:10:49,520 Kaya hayaan mo akong mag-recompile. 225 00:10:49,520 --> 00:10:51,460 Gawing hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Ngayon ilan sa inyo, doon maaari maging mapusyaw na bombilya ng pagpunta off. 229 00:10:59,250 --> 00:11:01,900 Ilan sa mayroon kang Nakita ang mensaheng ito bago? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Kaya, bakit? 232 00:11:04,420 --> 00:11:07,250 >> Logro are-- at mayroong iba't ibang mga bagay na maaaring maging sanhi ito, 233 00:11:07,250 --> 00:11:09,730 at malinaw na ikaw ay nasa mabuting company-- mayroon kaming malinaw 234 00:11:09,730 --> 00:11:11,900 sanhi kung ano ang tinatawag na isang segmentation fault. 235 00:11:11,900 --> 00:11:15,890 At mahaba kuwento maikli para sa ngayon, ako ay hinawakan ng isang segment ng memory 236 00:11:15,890 --> 00:11:17,060 na hindi ko dapat mayroon. 237 00:11:17,060 --> 00:11:19,970 Saan isang segment lamang ay nangangahulugang isang chunk ng memorya na hindi ko dapat mayroon. 238 00:11:19,970 --> 00:11:25,530 Ngayon tinitiyak na ang computer kung ako tumakbo ./helloZamyla na maaari kong pindutin ang argv 239 00:11:25,530 --> 00:11:27,760 maging bracket 0 at argv bracket 1. 240 00:11:27,760 --> 00:11:32,730 Ngunit argc ay ang halaga 2, na nangangahulugang Ako lamang allowed-- ito ay isang uri ng karangalan 241 00:11:32,730 --> 00:11:35,180 system-- sa pagpindot bracket 0 at bracket 1. 242 00:11:35,180 --> 00:11:37,990 Kung pumunta ako sa anumang mas malayo, mayroong talagang pagpunta sa maging doon memorya. 243 00:11:37,990 --> 00:11:40,660 Aking RAM umiiral pisikal na sa computer. 244 00:11:40,660 --> 00:11:42,080 Ngunit sino ang nakakaalam kung ano ang doon? 245 00:11:42,080 --> 00:11:44,450 Sa katunayan, ako ako tumatakbo maramihang mga programa sa isang pagkakataon. 246 00:11:44,450 --> 00:11:46,910 Maaaring mayroon ako seen-- kung ako ay hindi ginagawa ito sa Appliant 247 00:11:46,910 --> 00:11:49,937 ngunit sa aking Mac o PC-- maaaring mayroon ako nakita ang mga nilalaman ng isang email. 248 00:11:49,937 --> 00:11:52,270 Maaaring nakakita ako ng instant mensahe ko na ipinadala kamakailan. 249 00:11:52,270 --> 00:11:55,390 Anumang bagay na maaaring maging lingering sa paligid sa memory 250 00:11:55,390 --> 00:11:59,180 ay maaaring na-access sa pamamagitan ng paraan ng ito di-makatwirang square bracket pagtatanda. 251 00:11:59,180 --> 00:12:02,850 O kaya naman, mas masama pa, maaaring mayroon ka natagpuan ang isa sa aking mga password 252 00:12:02,850 --> 00:12:05,859 na kamakailan ko na nais nai-type sa, na ang isang programa ay naka-imbak sa memorya ng sa gayon ay 253 00:12:05,859 --> 00:12:07,900 upang patunayan sa akin, at pagkatapos lamang uri ng pakaliwa ito 254 00:12:07,900 --> 00:12:09,910 sa RAM hanggang isinara ko ang programang iyon. 255 00:12:09,910 --> 00:12:12,860 >> At sa katunayan, ito ay isa sa ang panganib at isa sa mga kapangyarihan 256 00:12:12,860 --> 00:12:15,980 ng paggamit ng isang wika tulad ng C. Mayroon kang unfettered access 257 00:12:15,980 --> 00:12:18,860 upang ang buong mga nilalaman ng memorya ng programa, 258 00:12:18,860 --> 00:12:21,340 at kung ano ang masamang guys maaari kahit na gawin sa mga cases-- 259 00:12:21,340 --> 00:12:23,807 lalo na kapag ating makapunta sa web programming 260 00:12:23,807 --> 00:12:26,890 patungo sa dulo ng semestre, ipapakita namin muling bisitahin ito topic-- ay poke sa paligid, 261 00:12:26,890 --> 00:12:31,660 potensyal na, ang isang tao ay computer memorya at hanapin tulad malaman bagay 262 00:12:31,660 --> 00:12:32,570 bilang nakita natin doon. 263 00:12:32,570 --> 00:12:36,900 O kahit na mas masahol pa, password na siya o maaari niyang pagkatapos ay gamitin upang gawin masamang bagay. 264 00:12:36,900 --> 00:12:40,240 >> Kaya malinaw na hindi dapat ginawa ko ito, dahil kakaiba bagay simulan mangyari. 265 00:12:40,240 --> 00:12:42,310 Sa katunayan, ito ay isang Pag-crash programa. 266 00:12:42,310 --> 00:12:44,580 Ito ang magiging katumbas ng Mac OS o sa Windows 267 00:12:44,580 --> 00:12:46,770 isang window ng programa lamang mawala. 268 00:12:46,770 --> 00:12:48,300 May hindi inaasahang error na naganap. 269 00:12:48,300 --> 00:12:50,840 Sa kapaligiran command-line tingnan kami ng isang bagay na katulad nito. 270 00:12:50,840 --> 00:12:54,480 Ngunit iyon ang dahilan kung bakit, ay ako lang ng pagpindot sa memorya na ay hindi nabibilang sa akin. 271 00:12:54,480 --> 00:12:57,090 >> Kaya sabihin ipagtanggol laban sa isang Medyo sa ibang paraan 272 00:12:57,090 --> 00:12:59,010 pamamagitan ng pagtingin sa ito ng programa dito. 273 00:12:59,010 --> 00:13:01,000 Kaya, muli, ang balangkas ng na nakita natin earlier-- 274 00:13:01,000 --> 00:13:02,480 at nai-highlight ko ang oras int. 275 00:13:02,480 --> 00:13:05,900 At lahat ng ito panahon ay may pangunahing sa katunayan nagbalik ng halaga. 276 00:13:05,900 --> 00:13:09,120 Kahit na sa karamihan sa aming mga panayam halimbawa hindi kailanman namin ang isang beses na ginamit 277 00:13:09,120 --> 00:13:10,990 bumalik sa kahit ano sa pangunahing. 278 00:13:10,990 --> 00:13:13,710 Isulat lang namin printf malapit kulot Brace at iyon ito. 279 00:13:13,710 --> 00:13:16,500 Ngunit para sa libre, kung ano ang Compiler ay ginagawa para sa iyo, 280 00:13:16,500 --> 00:13:19,510 mabisa, ay bumabalik na 0 para sa iyo. 281 00:13:19,510 --> 00:13:22,950 Ginagawang out-- at medyo counterintuitive-- na 0 ay mabuti. 282 00:13:22,950 --> 00:13:24,690 Hindi ito ang ibig sabihin ng hindi totoo per se. 283 00:13:24,690 --> 00:13:29,080 0 ay mabuti, at anumang di-0 halaga, ang mundo ay nagpasya, 284 00:13:29,080 --> 00:13:30,619 Maaari magpahiwatig ng isang error. 285 00:13:30,619 --> 00:13:32,910 Kaya kung sakaling mo na messed isang bagay up sa iyong computer, 286 00:13:32,910 --> 00:13:36,600 o isang programa ay namatay na lamang sa iyo at sa na iyong nakuha ang ilang mga liko window 287 00:13:36,600 --> 00:13:40,360 sa iyong screen, na sinasabi error 49 mga negatibong o error 23-- 288 00:13:40,360 --> 00:13:44,170 ilang mistulang di-makatwirang value-- na dahil ang isang programmer ay hard-code 289 00:13:44,170 --> 00:13:49,370 ng halaga tulad ng mga negatibong 49 o positibong 23 na kumatawan sa anumang numero, Dare sinasabi, 290 00:13:49,370 --> 00:13:53,340 ng 4000000000 posibleng bagay na maaaring magkamali sa isang programa. 291 00:13:53,340 --> 00:13:55,700 >> Kaya kung paano maaaring kong kumuha Samantalahin ang mga ito sa aking sarili? 292 00:13:55,700 --> 00:13:58,970 Well, hayaan mo akong magbukas ng isang programa na sinulat ni ako nang maaga, 293 00:13:58,970 --> 00:14:01,450 at poke sa paligid ng online na tinatawag na kumusta 4. 294 00:14:01,450 --> 00:14:05,650 At ito ay halos magkapareho, maliban sa ang Nakakuha nito Medyo ng error-checking. 295 00:14:05,650 --> 00:14:09,660 Sa kasong ito, muli ko na ipinahayag pangunahing bilang pagkuha ng dalawang argumento, 296 00:14:09,660 --> 00:14:13,180 ngunit oras na ito, sa 17 na linya, abiso Ako ang paggawa ng isang bit ng isang tseke katinuan. 297 00:14:13,180 --> 00:14:17,100 Ako sa paggawa ko bang na argc ay katumbas ay katumbas ng 2. 298 00:14:17,100 --> 00:14:18,960 Dahil kung ito ay, na Ibig sabihin ligtas na makakaya ko 299 00:14:18,960 --> 00:14:21,420 pindutin ang hindi lamang bracket 0, ngunit bracket 1. 300 00:14:21,420 --> 00:14:24,330 At pumunta ako magpatuloy at i-print out, sa kasong ito, Zamyla o Rob 301 00:14:24,330 --> 00:14:26,020 o kahit anong salita ko nai-type out. 302 00:14:26,020 --> 00:14:28,020 At ngayon lamang upang makakuha ng ng kaunti pa sa tamang, 303 00:14:28,020 --> 00:14:31,910 Pupunta ako sa tahasang bumalik 0 upang magpahiwatig lahat ay mahusay. 304 00:14:31,910 --> 00:14:33,300 Walang masamang nangyari. 305 00:14:33,300 --> 00:14:38,590 >> Ngunit sa pamamagitan ng convention, pupuntahan ko bumalik 1, o tapat ng anumang hindi-0 halaga, 306 00:14:38,590 --> 00:14:40,160 kung may nangyaring mali. 307 00:14:40,160 --> 00:14:43,270 Ngayon ang user ay hindi pagpunta sa talaga mapapansin kung ano ang nangyayari sa. 308 00:14:43,270 --> 00:14:50,410 Sa katunayan kung pumunta ako sa direktoryong ito, mag-zoom in kami at huwag gumawa kumusta 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla behaves tulad ng iyong inaasahan ko. 310 00:14:54,210 --> 00:14:58,570 Ngunit kung sa halip ko hindi nagta-type anumang bagay, walang Mukhang nangyari, 311 00:14:58,570 --> 00:14:59,680 ngunit hindi ito nagka-crash. 312 00:14:59,680 --> 00:15:04,660 At kung sa halip gagawin ko ng isang bagay tulad ng Rob ay isang Proctor 313 00:15:04,660 --> 00:15:07,550 Thayer-- sa pagbabahagi di-makatwirang impormasyon. 314 00:15:07,550 --> 00:15:13,680 Ngunit paunawa, argv 1, 2, 3, 4, at 5 dapat na ngayong umiiral sa memorya. 315 00:15:13,680 --> 00:15:16,540 Iyon, masyadong, ay hindi kung ano ang aking mga programa inaasahan, 316 00:15:16,540 --> 00:15:20,300 dahil na-check ko kung argc ay katumbas ay katumbas ng 2 o hindi. 317 00:15:20,300 --> 00:15:22,140 Kaya ako ngayon ang pagtatanggol laban ito. 318 00:15:22,140 --> 00:15:25,290 >> Ngayon, bilang isang bukod, namin ang programmer-- o sa halip namin ang users-- 319 00:15:25,290 --> 00:15:29,670 hindi kailanman makita na 0 o 1 ngunit gamit ang isang tool na tinatawag na Debugger, o iba pang mga tool, 320 00:15:29,670 --> 00:15:32,250 dahil kakailanganin namin makita ang bago ang haba, ikaw ang programmer 321 00:15:32,250 --> 00:15:36,590 talaga ang makakakita kung ano ang maaaring maging pagpunta mali sa loob ng iyong programa. 322 00:15:36,590 --> 00:15:39,170 >> Kaya, anumang mga katanungan sa argc? 323 00:15:39,170 --> 00:15:40,873 Oo. 324 00:15:40,873 --> 00:15:45,292 >> Madla: Nakita ko na kung saan sila ay hindi nagkaroon ng character, [INAUDIBLE] 325 00:15:45,292 --> 00:15:49,669 Sinabi lamang string star d, tulad ng karakter asterisk kuwit. 326 00:15:49,669 --> 00:15:50,710 Ang mga ito ay katumbas dito? 327 00:15:50,710 --> 00:15:51,626 >> David MALAN: Ang mga ito. 328 00:15:51,626 --> 00:15:55,080 Kaya ang tanong ay, mayroon kang paminsan-minsan nakikita programa 329 00:15:55,080 --> 00:15:57,270 tulad nito na hindi sabihin string argv bracket 330 00:15:57,270 --> 00:16:01,015 ngunit sa halip ay sinasabi ng isang bagay tulad ng char star argv bracket. 331 00:16:01,015 --> 00:16:03,140 At mayroong kahit iba pang variant na maaari kang makakita. 332 00:16:03,140 --> 00:16:04,264 Ang mga ito sa katunayan katumbas. 333 00:16:04,264 --> 00:16:06,240 Sa ngayon, mayroon kaming mga uri ng mga gulong pagsasanay 334 00:16:06,240 --> 00:16:09,737 sa sa anyo ng mga string sa CS50 library, ngunit sa higit lamang sa isang linggo 335 00:16:09,737 --> 00:16:12,570 o kaya kami ay pagpunta sa alisin na bara nang sama-sama at talagang 336 00:16:12,570 --> 00:16:16,820 tumingin sa kung ano ang char at ang star , at kung paano mga tumutukoy sa memorya 337 00:16:16,820 --> 00:16:18,140 pagkatawan sa mas pangkalahatang paraan. 338 00:16:18,140 --> 00:16:19,540 Kaya makikita namin bumalik sa iyon. 339 00:16:19,540 --> 00:16:21,540 >> Iba pang mga tanong sa aming argv o argc? 340 00:16:21,540 --> 00:16:22,397 Oo. 341 00:16:22,397 --> 00:16:24,438 Madla: Bakit ito bumalik ng isang error [INAUDIBLE]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 David MALAN: Bakit ito ginawa bumalik ng isang error only-- oh! 344 00:16:29,230 --> 00:16:31,813 Sa nakaraang kaso, kung kailan namin ay futzing sa paligid sa memorya, 345 00:16:31,813 --> 00:16:35,110 bakit bumalik lamang ito ng isang error kapag ako ay talagang na-type ng isang malaking bilang? 346 00:16:35,110 --> 00:16:36,620 Maikling sagot ay, Nalaman lamang namin masuwerteng. 347 00:16:36,620 --> 00:16:39,240 Sa pangkalahatan, ang isang computer naglalaan ng memory sa chunks, 348 00:16:39,240 --> 00:16:42,900 at ito ay nagbigay sa akin ng isang malaking sapat na chunk Nakatanggap ako ang layo, nang hindi napansin, 349 00:16:42,900 --> 00:16:46,280 ng hinahawakan bracket 2, 3 bracket, bracket 50, ngunit sa lalong madaling matutulak ko 350 00:16:46,280 --> 00:16:49,080 ang aking swerte, nagpunta ako sa ibayo ng hangganan ng chunk ng memorya 351 00:16:49,080 --> 00:16:50,520 sa operating system ay naibigay na sa akin. 352 00:16:50,520 --> 00:16:52,720 At iyon ang kapag ito clamp down at sinabi, hindi. 353 00:16:52,720 --> 00:16:54,580 Error sa pagse-segment. 354 00:16:54,580 --> 00:16:55,692 Oo. 355 00:16:55,692 --> 00:16:58,890 >> Madla: Paano gumagana ang computer alam ang halaga ng argc? 356 00:16:58,890 --> 00:17:02,390 >> David MALAN: Paano gumagana ang computer na alam ang halaga ng argc? 357 00:17:02,390 --> 00:17:07,920 Kapag nagpatakbo ka ng isang programa, programa na iyon, sa pamamagitan ng likas na katangian ng ang mga kumikislap na prompt, 358 00:17:07,920 --> 00:17:11,359 ay ipinasa ang hanay ng mga mga salita na na-type 359 00:17:11,359 --> 00:17:13,300 sa prompt, na noon ay nai-type sa prompt. 360 00:17:13,300 --> 00:17:16,569 At kaya ito ay ang iyong operating sistema na mahalagang 361 00:17:16,569 --> 00:17:20,329 populates argumento pangunahing para sa iyo. 362 00:17:20,329 --> 00:17:22,829 Kaya na ang isa sa mga serbisyo na iyong nakuha, uri ng lihim 363 00:17:22,829 --> 00:17:24,869 sa ilalim ng hood ng isang operating system. 364 00:17:24,869 --> 00:17:27,118 Iba pang mga tanong? 365 00:17:27,118 --> 00:17:27,618 Oo. 366 00:17:27,618 --> 00:17:29,787 >> Madla: Ano ang ibig sabihin ng core dump? 367 00:17:29,787 --> 00:17:31,370 David MALAN: Ano ang ibig sabihin ng core dump? 368 00:17:31,370 --> 00:17:32,950 Nang sa gayon ay isang mahusay na tanong. 369 00:17:32,950 --> 00:17:35,312 At hayaan mo akong bumalik sa direktoryong ito dito. 370 00:17:35,312 --> 00:17:37,270 At mapapansin mo na Mayroon akong isang bagong file na may. 371 00:17:37,270 --> 00:17:41,670 Sa katunayan Ito ay tinatawag na core, at ito ay aktwal na karaniwang sa isang disenteng-sized na file. 372 00:17:41,670 --> 00:17:45,300 Iyon ay mahalagang isang snapshot ng ang mga nilalaman ng memory aking program 373 00:17:45,300 --> 00:17:46,902 o RAM kapag ito crash. 374 00:17:46,902 --> 00:17:49,110 At ito ay maging kapaki-pakinabang, potensyal, diagnostically, 375 00:17:49,110 --> 00:17:52,850 sa sandaling makipag-usap namin sa isang susunod na lecture at seksyon tungkol sa pag-debug, 376 00:17:52,850 --> 00:17:55,730 dahil maaari mong aktwal na gawin ang katumbas ng isang digital autopsy 377 00:17:55,730 --> 00:18:00,300 sa file na iyon upang makatulong na malaman kung ano ang iyong ginawa mali sa iyong programa. 378 00:18:00,300 --> 00:18:01,220 Oo. 379 00:18:01,220 --> 00:18:04,450 >> Madla: Ay argc isang command sa mismo, o maaari mong pangalanan ito kahit ano? 380 00:18:04,450 --> 00:18:05,575 >> David MALAN: Magandang katanungan. 381 00:18:05,575 --> 00:18:08,040 Ay argc isang command sa sarili nito, o maaari mong pangalanan ito kahit ano? 382 00:18:08,040 --> 00:18:09,290 Ito ay talagang hindi isang command. 383 00:18:09,290 --> 00:18:13,500 Ito ay lamang ng isang variable ng pangalanan o pangalan ng isang argument, ang 384 00:18:13,500 --> 00:18:15,481 at sa gayon walang pasubali namin maaaring tumawag ito foo, 385 00:18:15,481 --> 00:18:18,480 maaari naming tumawag ito bar, na may posibilidad maging ang go-to mga salita na isang computer 386 00:18:18,480 --> 00:18:19,860 siyentipiko ang papunta sa. 387 00:18:19,860 --> 00:18:22,820 Ngunit sa pamamagitan ng convention, ginagamit namin argc at argv. 388 00:18:22,820 --> 00:18:25,360 Ngunit iyon lamang ang isang tao lamang convention, walang higit pa. 389 00:18:25,360 --> 00:18:25,860 Lahat ng karapatan. 390 00:18:25,860 --> 00:18:28,140 Kaya lumiliko out, naging ako na nagsasabi sa isang bit ng isang puting lie-- 391 00:18:28,140 --> 00:18:31,264 at tapat, sa hinaharap, makikita mo nagsi-pagsabi namin ng iba pang mga puting mga kasinungalingan. 392 00:18:31,264 --> 00:18:33,510 Ngunit sa ngayon, ipinapadala namin sa pagpunta Peel sa likod ng isa sa mga ito. 393 00:18:33,510 --> 00:18:37,310 Sa kasong ito dito kapag ako dati Pinatatakbo ng isang programa tulad ng ./hello o ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, nagkaroon kami ng mga nilalaman ng aking memory computer naghahanap halos tulad ng 395 00:18:42,780 --> 00:18:43,280 ito. 396 00:18:43,280 --> 00:18:45,070 Ngunit isipin kung ano ang isang string ay. 397 00:18:45,070 --> 00:18:49,279 Ano ang sinabi namin sa isang linggo nakaraan kung ano ang isang string aktwal ay sa ilalim ng hood? 398 00:18:49,279 --> 00:18:50,320 Madla: Array ng char. 399 00:18:50,320 --> 00:18:52,111 David MALAN: Ito ay isang hanay ng mga karakter, tama? 400 00:18:52,111 --> 00:18:55,760 Kaya maaaring mayroon kaming isang array ng mga string, ngunit, sa pagliko, isang string 401 00:18:55,760 --> 00:18:57,150 ay isang hanay ng mga character. 402 00:18:57,150 --> 00:19:00,010 Kaya kung talagang nais kong maging anal kapag gumuhit ko ang larawang ito, 403 00:19:00,010 --> 00:19:03,290 Ko dapat talaga mai-pagguhit ito ng kaunti pa tulad nito, 404 00:19:03,290 --> 00:19:08,000 kung saan sa bawat isa sa mga ini-index ng aking argv array, 405 00:19:08,000 --> 00:19:11,432 may sarili nito sa kabuuan string na mismo ay nasa isang array. 406 00:19:11,432 --> 00:19:13,140 At ngayon sa puting kasinungalingan sinasabi namin ngayon 407 00:19:13,140 --> 00:19:15,181 ay ang larawan ay hindi tumingin pa masyadong tulad nito. 408 00:19:15,181 --> 00:19:19,110 Sa katunayan, ang maliit na mga parisukat ay Karaniwang sa labas ng malaking parihaba 409 00:19:19,110 --> 00:19:19,610 doon. 410 00:19:19,610 --> 00:19:21,280 Ngunit kami ay bumalik sa na bago ang haba. 411 00:19:21,280 --> 00:19:25,440 Ngunit ito ay ./hello backslash 0, na ang pagiging espesyal na character na 412 00:19:25,440 --> 00:19:28,310 demarcates sa dulo ng isang string, at nakuha namin ang isa pa matapos 413 00:19:28,310 --> 00:19:29,360 Pangalan Zamyla ni. 414 00:19:29,360 --> 00:19:30,900 Kaya kung ano ang ibig sabihin nito? 415 00:19:30,900 --> 00:19:33,410 >> Well, hayaan mo akong sige at buksan ang dalawang iba pang mga halimbawa 416 00:19:33,410 --> 00:19:35,220 na magagamit sa online. 417 00:19:35,220 --> 00:19:40,590 Ang isa ay tinatawag na argv1.c at ang iba pa ay argv2. 418 00:19:40,590 --> 00:19:44,260 Ito ay isang programa super-simple na ay naiiba mula sa mga nakaraang mga programa 419 00:19:44,260 --> 00:19:47,260 sa ngayon na gumagamit ako argc at argv up dito. 420 00:19:47,260 --> 00:19:54,300 At ngayon ako sa pagsasama ng may para sa loop sa 18 linya, mula sa i = 0 sa hanggang sa argc. 421 00:19:54,300 --> 00:19:56,850 At kung ano ako pagpunta sa gawin na may ganitong linya ng code dito? 422 00:19:56,850 --> 00:19:58,270 Sa Ingles. 423 00:19:58,270 --> 00:20:00,510 Ito malinaw naman ay nagpapakita ng paggamit ng argc. 424 00:20:00,510 --> 00:20:03,670 Ngunit sa Ingles, ano ang ginagawa ito gawin kung nagpatakbo ako ng programang ito? 425 00:20:03,670 --> 00:20:04,366 Oo? 426 00:20:04,366 --> 00:20:07,386 >> Madla: Ito ay pagpunta sa i-print ang iyong screen nang maraming beses hangga't gusto mo. 427 00:20:07,386 --> 00:20:08,260 David MALAN: Eksaktong. 428 00:20:08,260 --> 00:20:10,480 Kaya kahit anong salita ko nagta-type sa prompt, ito ay 429 00:20:10,480 --> 00:20:13,120 pagpunta sa regurgitate ang mga ito sa akin isa sa bawat linya. 430 00:20:13,120 --> 00:20:14,370 Kaya sabihin magpatuloy at gawin ito. 431 00:20:14,370 --> 00:20:17,862 Hayaan akong pumunta sa aking direktoryo at gawin gumawa argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 At ngayon, panatilihing ni itong simple ipaalam. 434 00:20:21,770 --> 00:20:23,834 Ni walang gawin sa unang Hayaan. 435 00:20:23,834 --> 00:20:26,750 Ito ginawa i-print ang isang bagay, at na sa katunayan ang pangalan ng programa, 436 00:20:26,750 --> 00:20:28,240 dahil na nasa bracket 0. 437 00:20:28,240 --> 00:20:33,290 Kung ngayon ko sasabihin sa foo, ito ay pagpunta sa gawin mga dalawang, at kung sinasabi ko sa foo bar, 438 00:20:33,290 --> 00:20:35,580 ito ang nangyayari upang sabihin na ang mga tatlong bagay. 439 00:20:35,580 --> 00:20:37,740 Ngayon na medyo kawili-wiling, siguro. 440 00:20:37,740 --> 00:20:41,450 Ngunit isipin na argv ay isang hanay ng mga string, 441 00:20:41,450 --> 00:20:45,960 ngunit isang string ay isang array ng char, upang maaari naming gumawa ng mga bagay up ng isang bingaw 442 00:20:45,960 --> 00:20:48,560 at ilapat ang pangunahing pag logic at gumawa ng code na 443 00:20:48,560 --> 00:20:51,160 mukhang higit pa ng kaunti cryptic, admittedly. 444 00:20:51,160 --> 00:20:53,540 Ngunit sa pamamagitan ng pagkakaroon ng isang Nested loop, isang bagay Akın 445 00:20:53,540 --> 00:20:57,030 sa kung ano ang maaari mong isipin ang mula sa Mario, halimbawa, kung ginawa mo ito sa ganitong paraan. 446 00:20:57,030 --> 00:21:00,380 >> Kaya mapansin ngayon sa 19 linya, ako muling iterating sa paglipas ng aking mga argumento, 447 00:21:00,380 --> 00:21:02,410 mula sa 0 hanggang sa argc. 448 00:21:02,410 --> 00:21:05,510 At ngayon sa linya 21-- ako paghiram ng isang nanlilinlang mula sa huling week-- 449 00:21:05,510 --> 00:21:11,090 Ako ay check kung ano ang haba ng argv bracket i. 450 00:21:11,090 --> 00:21:12,920 Ako sa pag-iimbak na sagot sa n. 451 00:21:12,920 --> 00:21:18,230 At pagkatapos ay ako pagsasama mula sa j hanggang sa n, kung saan j ay nasimulan sa 0. 452 00:21:18,230 --> 00:21:19,460 Kaya, convention para sa pagbilang. 453 00:21:19,460 --> 00:21:22,335 Sa sandaling nagamit mo na i, kung mayroon kang isang Nested loop, maaari mong hindi gamitin muli i, 454 00:21:22,335 --> 00:21:25,770 kung hindi man ay makikita mo clobber, potensyal, ang halaga sa labas ng panloob na loop. 455 00:21:25,770 --> 00:21:27,200 Kaya ako ang aking ginagamit j sa pamamagitan ng convention. 456 00:21:27,200 --> 00:21:28,020 Maaari naming gamitin k. 457 00:21:28,020 --> 00:21:31,080 Kung mayroon kang higit sa k, malamang na may masyadong maraming nesting, karaniwan. 458 00:21:31,080 --> 00:21:33,800 Ngunit ngayon, mapansin ang aking printf linya ay bahagyang naiiba. 459 00:21:33,800 --> 00:21:37,520 Hindi ako nagpi-print ng% s, ako pag-print% c, na kung saan, siyempre, 460 00:21:37,520 --> 00:21:39,460 ay isang placeholder para sa isang char. 461 00:21:39,460 --> 00:21:40,770 >> At ngayon mapansin ang syntax na ito. 462 00:21:40,770 --> 00:21:41,270 Bagong. 463 00:21:41,270 --> 00:21:42,630 Hindi namin nakita ito bago. 464 00:21:42,630 --> 00:21:47,290 Ngunit lohikal, ito lamang ay nangangahulugan makuha ang ith string sa argv 465 00:21:47,290 --> 00:21:50,067 at makuha ang jth kung ano? 466 00:21:50,067 --> 00:21:50,900 Madla: Character. 467 00:21:50,900 --> 00:21:52,800 David MALAN: Character sa na string. 468 00:21:52,800 --> 00:21:57,100 Kaya sa pamamagitan ng paggamit ng mga square bracket sinundan ng mga square bracket, 469 00:21:57,100 --> 00:22:00,390 ito ay diving unang sa mga string argv, ang 470 00:22:00,390 --> 00:22:02,225 at pagkatapos ay ang pangalawang square bracket na may j 471 00:22:02,225 --> 00:22:06,580 ay diving sa ang mga character ng na partikular na string sa argv. 472 00:22:06,580 --> 00:22:09,562 At pagkatapos ay, para lamang sa mabuting panukala, Ako sa pag-print ng isang bagong linya dito. 473 00:22:09,562 --> 00:22:12,020 Kaya ngayon hayaan mo akong sige at buksan up ng isang bahagyang mas malaking window 474 00:22:12,020 --> 00:22:13,600 upang maaari naming makita ito sa aksyon. 475 00:22:13,600 --> 00:22:15,700 Hayaan akong pumunta sa folder na iyon. 476 00:22:15,700 --> 00:22:22,550 At ngayon gawin gumawa ng argv-2-- whoops-- gumawa ng argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Ipasok. 478 00:22:23,110 --> 00:22:24,860 At medyo matapang upang basahin nang patayo, 479 00:22:24,860 --> 00:22:27,920 ngunit iyan ay sa katunayan ang pangalan ng programa, na sinusundan ng isang blangkong linya. 480 00:22:27,920 --> 00:22:30,210 Ngayon ipaalam sa akin sige at gawin foo. 481 00:22:30,210 --> 00:22:33,210 Katulad nito mahirap basahin, ngunit ito ay sa katunayan pag-print ng isang character sa bawat linya. 482 00:22:33,210 --> 00:22:36,780 At kung gagawin ko bar, ito ay ngayon pag-print ng mga linya sa pamamagitan ng linya. 483 00:22:36,780 --> 00:22:40,140 Kaya ang takeaway dito ay hindi kaya magkano iyon, Wow, tingnan ang kapong baka bagong nanlilinlang 484 00:22:40,140 --> 00:22:44,750 kung saan maaari kang makakuha sa nilalaman ng mga tukoy na character ng isang array, ang 485 00:22:44,750 --> 00:22:48,380 ngunit sa halip kung paano namin ang paglalaan ng mga pangunahing tulad ng mga ideya sa pag-index sa isang array, 486 00:22:48,380 --> 00:22:51,620 at pagkatapos ay pag-index sa isang array na sa array na, 487 00:22:51,620 --> 00:22:56,180 at lamang ng paglalapat ng mga parehong mga ideya sa bahagyang mas sopistikadong mga halimbawa. 488 00:22:56,180 --> 00:22:59,560 Ngunit ang mga pangunahing kaalaman talagang may hindi nagbago, kahit na mula noong huling linggo. 489 00:22:59,560 --> 00:23:02,350 >> Ngayon ito ay isang uri ng nasa oras, sa iyon, isipin ang, sa linggo zero 490 00:23:02,350 --> 00:23:04,110 namin na nag-play sa isang aklat ng telepono na tulad nito. 491 00:23:04,110 --> 00:23:06,670 At kahit na ito ay malinaw naman pisikal na piraso ng papel, 492 00:23:06,670 --> 00:23:09,150 maaari mong uri ng isipin isang libro ng telepono bilang isang array. 493 00:23:09,150 --> 00:23:12,770 Ay tiyak na, kung ikaw ay upang reimplement ito piraso mga piraso ng papel 494 00:23:12,770 --> 00:23:15,260 sa isang computer, marahil gagamit ka ng isang bagay 495 00:23:15,260 --> 00:23:20,270 tulad ng isang array upang i-imbak ang lahat ng mga mga pangalan at mga numero mula sa isang lahat ng mga paraan 496 00:23:20,270 --> 00:23:23,800 sa pamamagitan ng Z. Kaya ito ay magaling, dahil ito ay nagbibigay-daan sa amin ng pagkakataon, 497 00:23:23,800 --> 00:23:28,310 di kaya, isaalang-alang kung paano maaari mong aktwal na ipatupad ang isang bagay tulad na. 498 00:23:28,310 --> 00:23:31,250 Tulad ng sa isang serye ng mga pinto dito. 499 00:23:31,250 --> 00:23:36,380 Kaya kung could-- ko kailangan namin ng isa magboluntaryo upang makabuo sa up. 500 00:23:36,380 --> 00:23:36,980 Ni makita Hayaan. 501 00:23:36,980 --> 00:23:40,650 Ng hindi pamilyar na mukha marahil, pamilyar na mukha marahil. 502 00:23:40,650 --> 00:23:42,090 Paano ang tungkol sa orange? 503 00:23:42,090 --> 00:23:42,680 Narito. 504 00:23:42,680 --> 00:23:45,870 Orange shirt, dumating sa up. 505 00:23:45,870 --> 00:23:52,230 >> Sabihin sige ngayon at ilipat mga pintuan sa ibabaw ng mga gilid, 506 00:23:52,230 --> 00:23:54,020 ilipat ang mga palabas ng paraan para sa isang sandali. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Ano ang inyong pangalan? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> David MALAN: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Nice upang matugunan mo. 513 00:23:59,451 --> 00:23:59,950 Lahat ng karapatan. 514 00:23:59,950 --> 00:24:04,500 Kaya mayroon sa likod ng mga anim na namin pinto digital na sa screen-- 515 00:24:04,500 --> 00:24:07,810 o, sa halip, pitong mga pinto sa screen-- ang maramihang mga numero. 516 00:24:07,810 --> 00:24:10,099 At ako sinabi sa iyo walang sa advance-- sumang-ayon? 517 00:24:10,099 --> 00:24:11,140 AJAY: Wala nang maaga. 518 00:24:11,140 --> 00:24:14,730 David MALAN: Ang lahat ng gusto kong mong gawin ngayon ay upang mahanap para sa akin, at para sa amin, 519 00:24:14,730 --> 00:24:20,920 talaga, ang bilang 50, isang hakbang sa isang pagkakataon. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Bilang 50? 521 00:24:21,830 --> 00:24:22,580 >> David MALAN: Ang bilang 50. 522 00:24:22,580 --> 00:24:24,746 At maaari kang magbunyag ng kung ano ang sa likod ng bawat isa sa mga pinto 523 00:24:24,746 --> 00:24:27,930 lamang sa pamamagitan ng pagpindot ito ng isang daliri. 524 00:24:27,930 --> 00:24:31,364 Damn ito. [Tawa] 525 00:24:31,364 --> 00:24:34,560 >> [APPLAUSE] 526 00:24:34,560 --> 00:24:39,540 >> Napakaluwag na rin tapos na. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Mayroon kaming kaibig-ibig na regalo premyo para sa iyo dito. 529 00:24:44,090 --> 00:24:46,520 Ang iyong pick ng mga pelikula namin napag-usapan noong nakaraang linggo. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, tao. 531 00:24:47,362 --> 00:24:49,050 Oh, hindi ko nakita Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> David MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Lahat ng karapatan. 534 00:24:50,140 --> 00:24:53,790 Kaya hawakan lamang ng isa sandali. 535 00:24:53,790 --> 00:24:57,430 Ni gumawa ito How-- hayaan isang teachable moment-- 536 00:24:57,430 --> 00:25:00,412 kung paano pumunta ka tungkol sa paghahanap ng mga numero ng 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: ko pinili nang random. 538 00:25:01,370 --> 00:25:03,420 David MALAN: Kaya na pinili mo sapalaran at nakuha masuwerteng. 539 00:25:03,420 --> 00:25:03,790 AJAY: Oo. 540 00:25:03,790 --> 00:25:04,456 David MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Mahusay. 542 00:25:05,050 --> 00:25:08,470 Kaya ngayon, nagkaroon ka ng hindi nakuha masuwerteng, ano pa 543 00:25:08,470 --> 00:25:10,210 Maaaring nangyari sa likod ng mga pinto? 544 00:25:10,210 --> 00:25:12,930 Kaya kung pumunta ako magpatuloy at magbunyag ng mga numerong ito dito, 545 00:25:12,930 --> 00:25:15,180 talaga sila ay nasa random order. 546 00:25:15,180 --> 00:25:17,750 At ang pinakamahusay na maaari mong magkaroon ng tapos, tapat, ay sa pamamagitan ng, sa huli, 547 00:25:17,750 --> 00:25:19,410 sa pinakamalala kaso, pagsusuri ang lahat ng ito. 548 00:25:19,410 --> 00:25:23,000 Kaya ba kayong mga super-masuwerteng, na ay hindi kung ano ang gusto namin tumawag sa isang algorithm. 549 00:25:23,000 --> 00:25:24,730 Oo, Malugod na pagbati. 550 00:25:24,730 --> 00:25:27,010 Ngunit ngayon let's-- katatawanan sa akin, kung maaari mo. 551 00:25:27,010 --> 00:25:28,310 Sabihin pumunta sa tab na ito dito. 552 00:25:28,310 --> 00:25:31,460 At narito ang mga numero sa mga malinaw na kung ano tila may random na pagkakasunud-sunod, 553 00:25:31,460 --> 00:25:32,280 at sila ay. 554 00:25:32,280 --> 00:25:35,160 Ngunit ngayon kung sa halip ko ang claim na sa likod ng mga pintuan 555 00:25:35,160 --> 00:25:39,070 ang mga numero na pinagsunod-sunod. 556 00:25:39,070 --> 00:25:41,780 Ang layunin ay upang ngayon din hanapin sa amin ang numero 50. 557 00:25:41,780 --> 00:25:45,910 Ngunit gawin ito algorithm, at sabihin sa amin kung paano ka ng pagpunta tungkol dito. 558 00:25:45,910 --> 00:25:48,020 At kung iyong makita ito, panatiliin ninyo ang pelikula. 559 00:25:48,020 --> 00:25:49,520 Hindi mo ito makita, magbibigay sa iyo ng ito pabalik. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Kaya ako pupunta upang suriin ang mga dulo una, upang matukoy kung there's-- 562 00:25:58,112 --> 00:26:02,048 [Tawa AT APPLAUSE] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 David MALAN: Narito kang pumunta. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Tingnan natin ang isang pagtingin sa isa ng predecessors Ajay ni, 567 00:26:21,700 --> 00:26:25,450 Sean, na naging hindi masyadong bilang masuwerteng. 568 00:26:25,450 --> 00:26:28,670 OK, kaya ang iyong gawain dito, Sean, ay ang sumusunod. 569 00:26:28,670 --> 00:26:32,970 Ko na maitago sa likod ng mga pinto sa bilang ng pitong, 570 00:26:32,970 --> 00:26:37,200 ngunit nakatago ang layo sa ilan sa mga pinto pati na rin ang iba pang mga hindi-negatibong numero. 571 00:26:37,200 --> 00:26:40,730 At ang iyong layunin ay upang mag-isip ng ito tuktok na hilera ng mga numero tulad ng isang array. 572 00:26:40,730 --> 00:26:43,590 Humihingi kami ng pagkakasunud-sunod lamang ng mga piraso ng papel na may mga numero sa likod ng mga ito. 573 00:26:43,590 --> 00:26:47,640 At ang iyong layunin ay, lamang gamit ang tuktok array dito, hanapin sa akin ang bilang pitong. 574 00:26:47,640 --> 00:26:51,200 At kami ay pagkatapos ng pagpunta sa pumupuna kung paano mo pumunta tungkol sa paggawa nito. 575 00:26:51,200 --> 00:26:52,920 Hanapin sa amin ang numero ng pitong, mangyaring. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Bilang 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Ito ay hindi isang nanlilinlang tanong. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 Sa puntong ito ang iyong iskor ay hindi sadyang mabuti, sa gayon maaari mong pati na rin panatilihin ang pagpunta. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Pumunta sa. 590 00:27:39,802 --> 00:27:42,510 Tapat, hindi ko maaaring makatulong ngunit magtaka kung ano ang kahit pinag-iisipan mo tungkol sa. 591 00:27:42,510 --> 00:27:44,990 >> Seán: Maaari bang kumuha ng hilera mula sa tuktok lamang. 592 00:27:44,990 --> 00:27:46,240 David MALAN: hilera sa tuktok lamang. 593 00:27:46,240 --> 00:27:47,281 Kaya mayroon kang tatlong kaliwa. 594 00:27:47,281 --> 00:27:48,310 Kaya mahanap ako ng 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [Madla sigaw SUGGESTIONS] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Kaya pareho ng mga kamangha-manghang mga para sa napaka iba't ibang mga kadahilanan. 599 00:28:26,130 --> 00:28:29,150 Kaya ito ay kung saan namin tumigil ng isang sandali ang nakalipas, 600 00:28:29,150 --> 00:28:32,530 at ang mga key na pananaw dito ay ang mga pinto ay may mga numero 601 00:28:32,530 --> 00:28:37,390 sa likod ng mga ito na pinagsunod-sunod, ang perpektong takeaway na kung saan ay na maaari mong gawin 602 00:28:37,390 --> 00:28:39,670 fundamentally mas mahusay sa ang pangalawang example-- 603 00:28:39,670 --> 00:28:42,380 at, sa katunayan, iyon ay Sean ni unang pagtatangka na may random na numero 604 00:28:42,380 --> 00:28:45,460 tulad ng before-- ngunit sa lalong madaling bilang mga numero ay pinagsunod-sunod, 605 00:28:45,460 --> 00:28:47,980 halos tulad ng phone book, kung ano ang maaari malinaw naman mong gawin? 606 00:28:47,980 --> 00:28:50,090 O kaya kung paano maaari mong pakinabangan kaalaman na? 607 00:28:50,090 --> 00:28:51,530 Oo. 608 00:28:51,530 --> 00:28:54,910 >> Madla: pumunta ka nang kalahating [INAUDIBLE]. 609 00:28:54,910 --> 00:28:55,660 David MALAN: Oo. 610 00:28:55,660 --> 00:28:56,160 Mismong. 611 00:28:56,160 --> 00:28:59,680 Kaya paunang instinct Ajay ni noon ay upang suriin ang mga dulo, pati na isipin ko, 612 00:28:59,680 --> 00:29:02,320 at pagkatapos ay i-uri-uriin kami ng tapos halimbawa sa mabilis. 613 00:29:02,320 --> 00:29:05,220 Ngunit kung sinimulan namin upang magawa ito nang higit pa methodically sa kahabaan ng mga linya, 614 00:29:05,220 --> 00:29:07,860 ngunit marahil na nagsisimula sa gitna, dahil ang mga ito ay pinagsunod-sunod, 615 00:29:07,860 --> 00:29:10,900 sa lalong madaling magbunyag namin ang bilang 16, samakatuwid namin know-- 616 00:29:10,900 --> 00:29:14,850 at sabihin gawin nang eksakto that-- namin samakatuwid malaman na 50, sa kasong ngayong araw, 617 00:29:14,850 --> 00:29:16,080 Na nakuha upang maging sa kanan. 618 00:29:16,080 --> 00:29:18,735 Kaya lang tulad ng sa linggo zero kapag tore namin ang aklat ng telepono sa kalahati 619 00:29:18,735 --> 00:29:21,490 at threw kalahati ng problema ang layo, parehong ideya dito. 620 00:29:21,490 --> 00:29:23,680 Maaari naming itapon ito sa kalahati ng problema ang layo. 621 00:29:23,680 --> 00:29:25,730 At marahil kung ano ang iyong maaaring gawin algorithm, 622 00:29:25,730 --> 00:29:28,710 sa sandaling alam mo na 50 ay dapat na sa kanan, kung ito ay kahit saan, 623 00:29:28,710 --> 00:29:31,390 ay subukang doon, sa gitna ng mga natitirang mga pinto. 624 00:29:31,390 --> 00:29:33,450 Siyempre, 50 ay mas mataas kaysa sa 42, kaya magagawa namin 625 00:29:33,450 --> 00:29:36,060 magtapon ito natitirang -kapat ng problema ang layo, 626 00:29:36,060 --> 00:29:38,510 at, sa wakas, kilalanin isang bagay tulad ng 50. 627 00:29:38,510 --> 00:29:41,050 Ngunit tulad lamang ng sa phone book, ang mga numerong ito 628 00:29:41,050 --> 00:29:44,560 ay ibinigay sa atin na nasa Pinagbukud-bukod pagkakasunud-sunod, na nag-iiwan sa amin 629 00:29:44,560 --> 00:29:47,450 may pinag-uusapan, kung paano ito gawin makakuha ng mga bagay sa pinagsunod-sunod order? 630 00:29:47,450 --> 00:29:49,640 At, tapat, sa kung ano ang gastos? 631 00:29:49,640 --> 00:29:51,390 Ito ay isang bagay upang maging ipinasa ang phone book 632 00:29:51,390 --> 00:29:54,810 at pagkatapos ay mapabilib ang iyong mga kaibigan sa pamamagitan ng paghahanap ng mga isang numero ng telepono talagang mabilis, i-right? 633 00:29:54,810 --> 00:29:58,520 Tearing 32 mga pahina out upang makahanap ng isang tao sa labas ng 4000000000 mga pahina, 634 00:29:58,520 --> 00:30:00,470 sinabi namin ay isa sa matinding halimbawa. 635 00:30:00,470 --> 00:30:03,320 Ngunit kung magkano ang oras ay tumagal Verizon upang ayusin na ang aklat na telepono? 636 00:30:03,320 --> 00:30:06,170 Magkano oras ay tumagal sa amin upang pagbukud-bukurin ang mga pitong numero? 637 00:30:06,170 --> 00:30:10,110 Iyon ay isang katanungan na hindi namin kaya ngayon ganap na hindi pinansin. 638 00:30:10,110 --> 00:30:12,330 >> Kaya sagutin ng tanong na ito ngayon hayaan. 639 00:30:12,330 --> 00:30:15,920 At nagpapaumanhin kami sa lahat out sa mga pelikula ngayon, ngunit mayroon kaming ilang mga bola ng stress. 640 00:30:15,920 --> 00:30:19,480 Kung, sabihin nating, walong boluntaryo hindi kuhanan pagsali sa amin dito? 641 00:30:19,480 --> 00:30:24,100 Sabihin sige at gawin, kung paano tungkol sa ang apat sa iyo, tatlo sa iyo dito? 642 00:30:24,100 --> 00:30:25,290 Kumuha ng ilang mga bagong mukha. 643 00:30:25,290 --> 00:30:27,220 At ang apat sa iyo doon? 644 00:30:27,220 --> 00:30:30,760 At now-- sabihin hindi bias here-- at numero ng walong sa paglipas dito sa dulo. 645 00:30:30,760 --> 00:30:32,060 Halika sa up. 646 00:30:32,060 --> 00:30:32,560 Lahat ng karapatan. 647 00:30:32,560 --> 00:30:37,480 Kaya kung ano ang mayroon kami dito para sa bawat isa sa iyo ay isang numero. 648 00:30:37,480 --> 00:30:40,055 Kung nais mong pumunta Magpatuloy, dalhin ang bilang na ito. 649 00:30:40,055 --> 00:30:40,763 Ano ang inyong pangalan? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> David MALAN: Artie, okay. 652 00:30:43,100 --> 00:30:44,297 Ikaw ang numero 1. 653 00:30:44,297 --> 00:30:45,310 >> Amin: Amin. 654 00:30:45,310 --> 00:30:46,060 David MALAN: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Ikaw ang numero 2. 657 00:30:47,530 --> 00:30:49,100 At sige, pati na ipasa ko mo ang mga sheet ng papel, 658 00:30:49,100 --> 00:30:52,130 line up inyong sarili sa harapan ng musika ay nakatayo sa parehong pagkakasunud-sunod bilang up doon. 659 00:30:52,130 --> 00:30:52,660 >> Andy: Hi, Andy. 660 00:30:52,660 --> 00:30:53,970 >> David MALAN: Andy, ito ay maganda upang makita ka. 661 00:30:53,970 --> 00:30:54,520 Numero ng 3. 662 00:30:54,520 --> 00:30:55,310 >> Jacob: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> David MALAN: Jacob, numero 4. 664 00:30:56,760 --> 00:30:57,549 Maligayang pagdating sakay. 665 00:30:57,549 --> 00:30:58,090 Grant: Grant. 666 00:30:58,090 --> 00:30:58,881 David MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Numero 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> David MALAN: Alanna, numero 6. 670 00:31:02,766 --> 00:31:03,589 >> Frances: Frances. 671 00:31:03,589 --> 00:31:04,880 David MALAN: Frances, numero ng 7. 672 00:31:04,880 --> 00:31:05,200 At? 673 00:31:05,200 --> 00:31:05,830 >> Rachel: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> David MALAN: Rachel, numero 8. 675 00:31:06,815 --> 00:31:07,100 Lahat ng karapatan. 676 00:31:07,100 --> 00:31:08,766 Sige at makakuha ng iyong sarili sa order na ito. 677 00:31:08,766 --> 00:31:11,440 Hayaan akong ilagay ang isa natitirang musika tumayo sa lugar. 678 00:31:11,440 --> 00:31:13,670 Saan kailangan mo ng isang stand? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Magpatuloy at ilagay lamang ang iyong mga numero ng kung saan ang mga mambabasa ay maaaring makita ang mga ito sa, 681 00:31:18,710 --> 00:31:20,340 ang musika tumayo nakaharap palabas. 682 00:31:20,340 --> 00:31:27,240 At sana, ang aming unang katinuan check here-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Maghintay ng isang minuto. 685 00:31:29,070 --> 00:31:31,140 Wala kaming 8. 686 00:31:31,140 --> 00:31:35,180 Kailangan kong evict ka mula sa halimbawa sa kahit papaano. 687 00:31:35,180 --> 00:31:35,680 Bilang 688 00:31:35,680 --> 00:31:36,940 Hindi, na OK lang. 689 00:31:36,940 --> 00:31:37,890 Ni makita Hayaan. 690 00:31:37,890 --> 00:31:38,880 Maaari naming gawin ito. 691 00:31:38,880 --> 00:31:39,440 Stand sa pamamagitan ng. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 May pumunta namin. 694 00:31:45,740 --> 00:31:46,800 Tama. 695 00:31:46,800 --> 00:31:47,360 Lahat ng karapatan. 696 00:31:47,360 --> 00:31:50,260 Kaya, ngayon ay mayroon kaming 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Mahusay. 699 00:31:51,360 --> 00:31:54,400 >> Kaya ang tanong sa kamay ay, sa kung ano ang gastos, at sa pamamagitan ng kung ano ang pamamaraan, 700 00:31:54,400 --> 00:31:58,580 maaari naming aktwal na-uri-uriin ang mga numerong ito dito sa gayon ay maaari uri ng namin gumana paurong, 701 00:31:58,580 --> 00:32:02,759 sa huli, at decide-- ito talaga kahanga-hanga, ito ay talagang mahusay, 702 00:32:02,759 --> 00:32:04,550 na maaari kong hatiin at talunin ang isang libro ng telepono? 703 00:32:04,550 --> 00:32:06,716 Ito ba ay talagang mahusay na Maaari ko bang hatiin at lupigin 704 00:32:06,716 --> 00:32:08,600 mga digital na piraso ng papel sa board, 705 00:32:08,600 --> 00:32:14,500 kung siguro ito ang nangyayari sa amin ng gastos ng isang kapalaran sa oras o enerhiya o CPU cycle 706 00:32:14,500 --> 00:32:17,340 upang aktwal na makakuha ng aming data sa ilang mga Pinagbukud-bukod order? 707 00:32:17,340 --> 00:32:18,930 Kaya tanungin na tanong ipaalam. 708 00:32:18,930 --> 00:32:22,077 >> Kaya unang off, mga numerong ito ay sa halos random na pagkakasunud-sunod, 709 00:32:22,077 --> 00:32:24,160 at Pupunta ako sa ipanukala isa algorithm, o proseso 710 00:32:24,160 --> 00:32:25,970 sa pamamagitan ng kung saan maaari naming uri-uriin ang mga tao. 711 00:32:25,970 --> 00:32:28,100 Pupunta ako sa lumapit itong maganda naively. 712 00:32:28,100 --> 00:32:30,730 At pupuntahan ko nakikilala na ito ay uri ng marami para sa akin 713 00:32:30,730 --> 00:32:32,890 balutin sa aking isip sa buong buong data set nang sabay-sabay. 714 00:32:32,890 --> 00:32:33,640 Pero alam mo kung ano? 715 00:32:33,640 --> 00:32:37,450 Pupunta ako sa gumawa ng ilang mga napakasimpleng marginal na pagsasaayos. 716 00:32:37,450 --> 00:32:41,152 4 at 2 ay sira, kung ang layunin ay upang pumunta mula sa 1 sa hanggang 8. 717 00:32:41,152 --> 00:32:41,860 Kaya alam mo kung ano? 718 00:32:41,860 --> 00:32:43,776 Pupunta ako sa mayroon kang magpalit guys, kung ikaw ay lumipat 719 00:32:43,776 --> 00:32:46,380 pisikal na mga posisyon at ang iyong mga piraso ng papel. 720 00:32:46,380 --> 00:32:47,894 Ngayon 4 at 6, ang mga ito ay sa pagkakasunud-sunod. 721 00:32:47,894 --> 00:32:49,060 Pupunta ako sa umalis mga maging. 722 00:32:49,060 --> 00:32:50,227 6 at 8, mga nasa order. 723 00:32:50,227 --> 00:32:51,185 Pagpunta sa iwan ang mga ito maging. 724 00:32:51,185 --> 00:32:52,170 8 and1, sa labas ng order. 725 00:32:52,170 --> 00:32:54,790 Kung hindi mo nais na bale dalawang pagpapalit. 726 00:32:54,790 --> 00:32:57,300 Ngayon 8 at 3, kung maaaring magpalit ka guys. 727 00:32:57,300 --> 00:32:59,320 8 at 7, kung maaaring magpalit ka guys. 728 00:32:59,320 --> 00:33:01,790 At 8 at 5, kung maaari magpalit ka guys. 729 00:33:01,790 --> 00:33:03,980 >> Ngayon, ako tapos? 730 00:33:03,980 --> 00:33:05,200 Hindi, malinaw naman hindi. 731 00:33:05,200 --> 00:33:07,880 Pero ginawa ko ang sitwasyon ng mas mahusay, tama? 732 00:33:07,880 --> 00:33:09,430 Ano ang muli ang iyong pangalan, numero ng 8? 733 00:33:09,430 --> 00:33:10,055 >> Rachel: Rachel. 734 00:33:10,055 --> 00:33:12,850 David MALAN: Kaya Rachel ay mabisa bubbled up medyo malayo, 735 00:33:12,850 --> 00:33:15,660 ang lahat ng mga paraan sa dulo ng ang aking mga hanay ng mga numero dito. 736 00:33:15,660 --> 00:33:17,310 At kaya problema na uri ng nalutas na. 737 00:33:17,310 --> 00:33:21,670 Ngayon, malinaw, 2 kailangan pang ilipat ang isang bit, at 4 at 6 at 1. 738 00:33:21,670 --> 00:33:24,420 Ngunit mukhang kong na makakakuha ito ng maliit na mas malapit sa ang solusyon. 739 00:33:24,420 --> 00:33:26,790 Kaya sabihin ilapat ang parehong ito walang muwang muli heuristic. 740 00:33:26,790 --> 00:33:27,690 2 at 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 at 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 at 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Ni swap Hayaan. 744 00:33:32,230 --> 00:33:33,200 6 at 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Ni swap Hayaan. 746 00:33:34,420 --> 00:33:35,580 6 at 7 ay OK. 747 00:33:35,580 --> 00:33:36,590 7 at 5, nope. 748 00:33:36,590 --> 00:33:37,790 Ni swap Hayaan. 749 00:33:37,790 --> 00:33:38,470 At ngayon 7 at 8. 750 00:33:38,470 --> 00:33:39,862 At kung ano muli ang inyong pangalan? 751 00:33:39,862 --> 00:33:40,570 Frances: Frances. 752 00:33:40,570 --> 00:33:41,445 David MALAN: Frances. 753 00:33:41,445 --> 00:33:44,230 Kaya ngayon ay Frances sa kahit na isang mas mahusay na posisyon, dahil ngayon 7 at 8 754 00:33:44,230 --> 00:33:46,440 ay nasa tamang bubbled hanggang sa tuktok. 755 00:33:46,440 --> 00:33:47,510 Kaya 2 at 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 at 1, magpalitan ng let. 757 00:33:48,720 --> 00:33:50,410 4 at 3, magpalitan ng let. 758 00:33:50,410 --> 00:33:51,550 4 at 6, ikaw ay OK. 759 00:33:51,550 --> 00:33:53,340 6 at 5, magpalitan ng let. 760 00:33:53,340 --> 00:33:54,590 At ngayon ang mga guys ang mga magandang. 761 00:33:54,590 --> 00:33:55,780 Kami ay halos doon. 762 00:33:55,780 --> 00:33:57,706 2 at 1, sa labas ng order, kaya magpalit. 763 00:33:57,706 --> 00:33:59,080 At ngayon hayaan mo akong gawin ang isang tseke katinuan. 764 00:33:59,080 --> 00:34:03,080 2 at 3, 3 at 4, at 4 5, 5 at 6, 6 at 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, kaya tapos na kami. 766 00:34:05,060 --> 00:34:09,310 >> Ngunit sa kung ano ang ginawa ko gastos -uri-uriin ang mga numerong ito dito? 767 00:34:09,310 --> 00:34:13,960 Well, kung gaano karaming mga hakbang na ginawa ko potensyal na tumagal kapag pagbubukod-bukod ng mga tao? 768 00:34:13,960 --> 00:34:15,710 Well, kami ay bumalik sa na pinag-uusapan. 769 00:34:15,710 --> 00:34:18,030 Ngunit, tapat, kung nakakuha ka ng kaunti nababato, na 770 00:34:18,030 --> 00:34:22,270 uri ng pagbubunyag sa na hindi ito ay siguro ang pinaka-mahusay na algorithm. 771 00:34:22,270 --> 00:34:25,230 At sa katunayan, tapat, ako pagpapawis ang lahat ng higit sa paglalakad papunta at pabalik. 772 00:34:25,230 --> 00:34:26,639 Iyon ay hindi huwag mag-lalo na mahusay. 773 00:34:26,639 --> 00:34:27,805 Kaya ipaalam sa subukan ang ibang bagay. 774 00:34:27,805 --> 00:34:31,870 Kung ikaw guys ma-reset ang inyong sarili sa mga walong mga halaga. 775 00:34:31,870 --> 00:34:32,969 Mahusay. 776 00:34:32,969 --> 00:34:36,570 >> Tingnan natin ang isang hitsura digital na, para lang ng ilang sandali bago namin subukan ibang bagay, 777 00:34:36,570 --> 00:34:38,179 sa kung ano lamang ang nangyari. 778 00:34:38,179 --> 00:34:41,330 Hanggang dito, handa ka tungkol sa upang makita ang isang visualization ng mga walong mga kawani na tao 779 00:34:41,330 --> 00:34:44,719 kung saan ang kulay asul at pula mga bar ang mga numero. 780 00:34:44,719 --> 00:34:46,670 Ang taller ang bar, ang mas malaki ang bilang. 781 00:34:46,670 --> 00:34:48,510 Ang mas maikli ang bar, ang mas maliit na mga numero. 782 00:34:48,510 --> 00:34:51,560 At kung ano ang iyong pagpunta upang makita ay nasa random na pagkakasunud-sunod ng higit sa walong ng mga ito. 783 00:34:51,560 --> 00:34:55,830 Ka ng pagpunta upang makita ang mga bar nagsisimula pa nakaayos ayon na parehong algorithm, 784 00:34:55,830 --> 00:34:59,890 o hanay ng mga tagubilin, na Makikita kami tatawag sa henceforth bubble-uuri. 785 00:34:59,890 --> 00:35:04,000 Kaya mapansin, bawat segundo o kaya, dalawang bar ay lighting up sa pula, 786 00:35:04,000 --> 00:35:05,590 Sini-kumpara sa pamamagitan ng mga computer. 787 00:35:05,590 --> 00:35:08,630 At pagkatapos ay kung ang malaking bar at ang maliit na bar ay sira, 788 00:35:08,630 --> 00:35:11,220 sila ay swapped para sa akin. 789 00:35:11,220 --> 00:35:15,120 >> Ngayon ito ay hindi kapani-paniwalang nakakainip upang panoorin ito, tiyak, 790 00:35:15,120 --> 00:35:18,630 para sa napaka-haba, ngunit mapansin ang takeaway-- malaki bar gumagalaw sa kanan, 791 00:35:18,630 --> 00:35:20,460 maliit na bar paglipat sa kaliwa. 792 00:35:20,460 --> 00:35:23,380 I-abort ang prosesong ito Hayaan at mapabilis ang mga ito up 793 00:35:23,380 --> 00:35:27,330 upang maging mas mabilis, sa gayon aming makakaya makakuha ng isang mataas na antas na kamalayan ng kung ano, 794 00:35:27,330 --> 00:35:29,970 sa katunayan, isang uri ng bubble ang ginagawa. 795 00:35:29,970 --> 00:35:33,150 Sa katunayan, ito ay bubbling hanggang sa ang kanang bahagi ng listahan, 796 00:35:33,150 --> 00:35:35,260 o ang array, ang mas malaking bar. 797 00:35:35,260 --> 00:35:40,020 At kabaligtaran, ang maliit na mga bar ay mga bubbling kanilang mga paraan pababa sa kaliwa, 798 00:35:40,020 --> 00:35:42,950 albeit sa isang mas mabilis na tulin kaysa sa dati namin. 799 00:35:42,950 --> 00:35:45,850 Kaya, mas mahirap makita sa mga kawani na tao, ngunit biswal na sa katunayan kung ano 800 00:35:45,850 --> 00:35:46,540 ang nangyayari. 801 00:35:46,540 --> 00:35:49,110 >> Subalit ng subukan ang isang fundamentally hayaan ibang diskarte ngayon. 802 00:35:49,110 --> 00:35:52,387 Subukan ang ibang Hayaan algorithm kung saan mayroon kami sa iyo 803 00:35:52,387 --> 00:35:59,640 guys magsimula sa mga orihinal mga posisyon, na kung saan ay ang order na ito dito. 804 00:35:59,640 --> 00:36:00,827 At ni sige ngayon hayaan. 805 00:36:00,827 --> 00:36:02,910 At ako pagpunta sa gawin ang isang bagay kahit na mas simple, i-right? 806 00:36:02,910 --> 00:36:06,710 Sa retrospect, pagpapalit muli pairwise at muli, halos isang maliit na matalino. 807 00:36:06,710 --> 00:36:10,460 Ni gawin ang mga bagay kahit na higit pa naively Hayaan, kung saan kung gusto ko upang pagbukud-bukurin ang mga tao, 808 00:36:10,460 --> 00:36:12,560 hayaan panatilihin lamang sa akin hinahanap para sa mga pinakamaliliit na elemento. 809 00:36:12,560 --> 00:36:14,570 Kaya ngayon, 4 ay ang pinakamaliliit na numero na iyong nakita ko. 810 00:36:14,570 --> 00:36:15,695 Pupunta ako sa tandaan na. 811 00:36:15,695 --> 00:36:17,750 Hindi, 2 ay mas mahusay, at tandaan na. 812 00:36:17,750 --> 00:36:20,730 1 ay kahit na mas maliit. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 One-- kung ano muli ang inyong pangalan? 816 00:36:23,750 --> 00:36:24,400 >> ARTIE: Artie. 817 00:36:24,400 --> 00:36:24,610 >> David MALAN: Artie. 818 00:36:24,610 --> 00:36:25,460 Kaya, Artie, sige. 819 00:36:25,460 --> 00:36:27,043 Pupunta ako upang hilahin out ng linya mo. 820 00:36:27,043 --> 00:36:28,400 Kung maaari kang bumalik dito. 821 00:36:28,400 --> 00:36:30,790 At kailangan kong gumawa nang lugar para sa kanya. 822 00:36:30,790 --> 00:36:32,040 Mayroon kaming desisyon point dito. 823 00:36:32,040 --> 00:36:36,000 Paano maaari naming gumawa ng room para sa Artie dito sa simula kung saan numero 1 nabibilang? 824 00:36:36,000 --> 00:36:36,770 >> Madla: Shift. 825 00:36:36,770 --> 00:36:38,950 >> David MALAN: OK, namin maaaring ilipat sa lahat. 826 00:36:38,950 --> 00:36:40,860 Ngunit ipanukala ang isang pag-optimize. 827 00:36:40,860 --> 00:36:43,410 Na pakiramdam ng isang maliit na nakakainis para sa akin upang hilingin sa apat na tao 828 00:36:43,410 --> 00:36:44,620 upang ilipat ang lahat ng mga paraan pababa. 829 00:36:44,620 --> 00:36:45,520 Ano pa ang maaari kong gawin? 830 00:36:45,520 --> 00:36:46,360 >> Madla: Lumipat ang mga ito. 831 00:36:46,360 --> 00:36:46,850 >> David MALAN: Lumipat ang mga ito. 832 00:36:46,850 --> 00:36:47,900 At kung ano muli ang inyong pangalan? 833 00:36:47,900 --> 00:36:48,441 >> Jacob: Jacob. 834 00:36:48,441 --> 00:36:50,330 David MALAN: Jacob, ilipat. 835 00:36:50,330 --> 00:36:54,440 Lubos na mas mahusay na magkaroon lamang Jacob lokasyon swap Artie, 836 00:36:54,440 --> 00:36:56,710 bilang kabaligtaran sa pagpilit na lahat ng apat na ng mga tao, 837 00:36:56,710 --> 00:36:58,734 salamat sa inyo, upang kanilang wastong posisyon. 838 00:36:58,734 --> 00:37:01,150 Ano ang maganda ang tungkol sa Artie ngayon, siya ay nasa kanyang tamang posisyon. 839 00:37:01,150 --> 00:37:02,060 Ni gawin muli ito Hayaan. 840 00:37:02,060 --> 00:37:03,730 2, na ang pinakamaliit na bilang na iyong nakita ko. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 ay talagang sa pinakamaliliit na. 844 00:37:07,467 --> 00:37:08,550 Hindi mo na kailangang gawin ang anumang trabaho. 845 00:37:08,550 --> 00:37:09,320 Gawin ni itong muli Hayaan. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Pinakamaliit? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nope. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Hayaan akong tandaan 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Hayaan akong tandaan 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Pinakamaliit na numero na hindi ko na nakikita sa mga ito pass ay 3. 857 00:37:18,490 --> 00:37:20,340 Kung nais mong dumating sa labas. 858 00:37:20,340 --> 00:37:21,986 Saan kami makapupunta sa inilagay mo? 859 00:37:21,986 --> 00:37:22,860 At kung ano ang iyong pangalan? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> David MALAN: Alanna, hindi namin pagpunta sa may upang evict iyo. 862 00:37:25,780 --> 00:37:28,670 Ngunit iyon ay mas mahusay, magpalit lamang ng dalawang tao, 863 00:37:28,670 --> 00:37:31,850 kaysa magkaroon ng maraming mga tao talaga sidestep sa ibabaw. 864 00:37:31,850 --> 00:37:32,850 Ngayon gawin muli ito ipaalam. 865 00:37:32,850 --> 00:37:34,980 Pupunta ako upang piliin 4, kaya dumating sa labas. 866 00:37:34,980 --> 00:37:36,540 At kung sino ang pagpunta sa ilipat? 867 00:37:36,540 --> 00:37:37,750 Numero ng 8, siyempre. 868 00:37:37,750 --> 00:37:40,260 Kung ngayon mahanap ko ang numero 5, dumating sa labas. 869 00:37:40,260 --> 00:37:42,104 Numero ng 8 pupuntahan upang muli evicted. 870 00:37:42,104 --> 00:37:43,770 Ngayon pupuntahan ko makita ang numero ng 6 na nasa lugar. 871 00:37:43,770 --> 00:37:44,410 7 sa lugar. 872 00:37:44,410 --> 00:37:45,080 8 sa lugar. 873 00:37:45,080 --> 00:37:48,590 >> Ang ginawa lang namin ngayon ay isang bagay na tinatawag na-uri-uriin seleksyon, 874 00:37:48,590 --> 00:37:52,560 at kung ilarawan sa isip namin ito, ito ay pagpunta sa pakiramdam ng isang maliit na naiiba. 875 00:37:52,560 --> 00:37:56,800 Sabihin sige at mula sa na ito menu dito, ito visualization-- 876 00:37:56,800 --> 00:38:02,920 ni baguhin ang to-- dumating sa, Firefox ipaalam. 877 00:38:02,920 --> 00:38:07,610 Ni baguhin ito sa isang uri seleksyon Hayaan. 878 00:38:07,610 --> 00:38:11,830 At mapabilis ni ito pataas tulad ng dati ipaalam, at simulan ang visualization ngayon. 879 00:38:11,830 --> 00:38:13,990 At algorithm na ito ay may ng ibang pakiramdam dito. 880 00:38:13,990 --> 00:38:16,480 Sa bawat iteration, tapat, ito ay mas higit pang prangka. 881 00:38:16,480 --> 00:38:18,385 Ako lamang ng pagpili sa pinakamaliliit na elemento. 882 00:38:18,385 --> 00:38:21,510 Ngayon, tapat, Nakatanggap ako ng maliit na mapalad na oras, sa mga na ito pinagsunod-sunod napakabilis. 883 00:38:21,510 --> 00:38:22,660 Ang mga elemento ay random. 884 00:38:22,660 --> 00:38:25,520 Hindi ito, pati na aming kalaunan makita, fundamentally nang mas mabilis. 885 00:38:25,520 --> 00:38:29,400 Ngunit sabihin makita ang isang third at huling lumapit dito tulad sa kung ano ang nangyayari sa. 886 00:38:29,400 --> 00:38:36,230 Kaya sabihin sige at i-reset mo guys isang huling oras upang maging sa ayos na ito dito. 887 00:38:36,230 --> 00:38:38,450 >> At ngayon, pupuntahan ko maging mas ng kaunti matalino, 888 00:38:38,450 --> 00:38:40,220 upang isalin lamang ang aming mga algorithm. 889 00:38:40,220 --> 00:38:41,230 Pupunta ako upang gawin ito. 890 00:38:41,230 --> 00:38:43,140 Pupunta ako sa hindi pumunta pabalik-balik kaya magkano. 891 00:38:43,140 --> 00:38:44,900 Tapat, ako pagod ng lahat ng traversing ito. 892 00:38:44,900 --> 00:38:47,691 Lamang ako ng pagpunta sa tumagal ng kung ano ang ako ibinigay sa simula ng listahan, 893 00:38:47,691 --> 00:38:49,460 at Pupunta ako upang ayusin na pagkatapos at doon. 894 00:38:49,460 --> 00:38:50,140 Kaya dito tayo. 895 00:38:50,140 --> 00:38:51,030 Numero 4. 896 00:38:51,030 --> 00:38:53,680 Pupunta ako sa magpasok ng numero 4 sa isang pinagsunod-sunod na listahan. 897 00:38:53,680 --> 00:38:54,180 Tapos na. 898 00:38:54,180 --> 00:38:58,300 Inaangkin ko ngayon, at upang gumawa lamang ito nang higit pa malinaw, ang bahaging ito ng aking listahan ay pinagsunod-sunod. 899 00:38:58,300 --> 00:39:02,610 Ito ay uri ng isang hangal claim, ngunit sa katunayan 4 ay pinagsunod-sunod sa isang listahan ng mga laki ng isa. 900 00:39:02,610 --> 00:39:04,210 Ngayon, ako ako pagpunta sa tumagal sa numero 2. 901 00:39:04,210 --> 00:39:07,670 Numero 2 ako ngayon ng pagpunta sa magpasok sa tamang lugar. 902 00:39:07,670 --> 00:39:08,680 Kaya kung saan ang 2 nabibilang? 903 00:39:08,680 --> 00:39:09,824 Malinaw, sa paglipas dito. 904 00:39:09,824 --> 00:39:11,490 Kaya sige lang at ilipat pabalik, kung magagawa mo. 905 00:39:11,490 --> 00:39:14,406 At bakit hindi mo guys tumagal lamang ang iyong musika ay nakatayo sa iyo oras na ito. 906 00:39:14,406 --> 00:39:17,020 At ipasok mo sabihin forcibly sa simula ng listahan. 907 00:39:17,020 --> 00:39:17,936 Kaya ng kaunti pang trabaho. 908 00:39:17,936 --> 00:39:20,890 Nagkaroon na ako upang ilipat Jacob sa paligid, at kung ano ang iyong pangalan? 909 00:39:20,890 --> 00:39:21,420 >> Amin: Amin. 910 00:39:21,420 --> 00:39:22,270 >> David MALAN: Amin. 911 00:39:22,270 --> 00:39:24,350 Ngunit hindi bababa sa hindi ko pumunta nang pabalik-balik. 912 00:39:24,350 --> 00:39:25,739 Tingin lang ako sa pagkuha ng mga bagay bilang pumunta ko. 913 00:39:25,739 --> 00:39:27,530 Lamang ako ng pagpasok ng mga ito sa tamang lugar. 914 00:39:27,530 --> 00:39:29,220 6, ito ay aktwal na medyo madali. 915 00:39:29,220 --> 00:39:31,510 Magpasok ng ka banda roon, kung mong hayaan Nais lamang upang ilipat sa paglipas ng bahagyang. 916 00:39:31,510 --> 00:39:32,870 Numero ng 8, din medyo madali. 917 00:39:32,870 --> 00:39:33,741 I-right doon. 918 00:39:33,741 --> 00:39:34,240 Damn ito. 919 00:39:34,240 --> 00:39:37,590 Numero 1 hindi namin maaari lamang magpalit sa Amin dito, 920 00:39:37,590 --> 00:39:39,340 dahil iyon ang nangyayari sa gulo up ang order. 921 00:39:39,340 --> 00:39:40,660 Kaya mayroon kaming upang maging mas ng kaunti matalino. 922 00:39:40,660 --> 00:39:42,770 Kaya, Artie, kung dati mo i-back up para sa isang sandali. 923 00:39:42,770 --> 00:39:46,550 Sabihin sige at ilipat ngayon, hindi tulad ng aming nakaraang mga algorithm, 924 00:39:46,550 --> 00:39:50,910 para gumawa nang lugar para sa Artie dito mismo sa simula. 925 00:39:50,910 --> 00:39:54,690 Kaya sa katapusan ng araw, ako uri ng ginagawa kung ano ang nais kong upang maiwasan ang bago. 926 00:39:54,690 --> 00:39:57,770 At sa gayon ang aking mga algorithm ay isang uri ng reverse, intellectually, 927 00:39:57,770 --> 00:39:59,070 mula sa kung ano ito ay orihinal. 928 00:39:59,070 --> 00:40:01,240 Lamang ako ng paggawa ng nagbabagong sa ibang punto. 929 00:40:01,240 --> 00:40:02,291 Ngayon ako sa 3. 930 00:40:02,291 --> 00:40:02,790 Oh, damn. 931 00:40:02,790 --> 00:40:04,039 Mayroon kaming gawin muli pang trabaho. 932 00:40:04,039 --> 00:40:05,060 Kaya itulak ka ni out ipaalam. 933 00:40:05,060 --> 00:40:09,360 Ni ilipat Hayaan 8, 6, 4-- oh oh-- at 3 ay pagpunta upang pumunta doon. 934 00:40:09,360 --> 00:40:11,490 Kaya hindi bababa sa bahagyang matitipid oras na ito. 935 00:40:11,490 --> 00:40:13,100 7, hindi masyadong maraming trabaho na dapat gawin. 936 00:40:13,100 --> 00:40:15,370 Kaya kung nais mong mag-pop pabalik, magpasok ng mong hayaan. 937 00:40:15,370 --> 00:40:17,440 At Panghuli, 5, kung ikaw nais mag-pop pabalik, namin 938 00:40:17,440 --> 00:40:22,610 Kailangan upang ilipat sa iyo, sa iyo, sa iyo, hanggang sa limang ay nasa lugar. 939 00:40:22,610 --> 00:40:25,670 >> Kaya ngayon upang makita ito sa isang mataas na antas graphically, 940 00:40:25,670 --> 00:40:31,080 ni gawin algorithm na ito hayaan visualization sa isang karagdagang panahon. 941 00:40:31,080 --> 00:40:33,580 Kaya dapat namin ito tumawag sa uri pagpapasok. 942 00:40:33,580 --> 00:40:37,700 Susubukan naming patakbuhin ito tulad ng mabilis, at simulan ito dito. 943 00:40:37,700 --> 00:40:39,580 At ito, masyadong, ay may iba't ibang mga pandama. 944 00:40:39,580 --> 00:40:42,180 Ito ay isang uri ng mas mahusay na pagkuha at mas mahusay, ngunit ito ay hindi kailanman perpekto 945 00:40:42,180 --> 00:40:44,630 hanggang pumunta ako sa makinis at sa mga gaps. 946 00:40:44,630 --> 00:40:47,860 Dahil, muli, ako lamang pagkuha ng kung ano ang Ako na ibinigay mula kaliwa papuntang kanan. 947 00:40:47,860 --> 00:40:50,350 Kaya ako ay hindi makakuha ng kaya masuwerteng na ang lahat ng bagay ay perpekto. 948 00:40:50,350 --> 00:40:54,190 Iyon ang dahilan kung bakit namin ay may mga kaunting mispositions na namin naayos na sa paglipas ng panahon. 949 00:40:54,190 --> 00:40:58,890 >> Kaya lahat ng mga algorithm ay tila tumakbo sa bahagyang naiiba paces. 950 00:40:58,890 --> 00:41:02,030 Sa katunayan, na sasabihin sa iyo ay ang pinakamahusay na o ang pinakamabilis na sa ngayon? 951 00:41:02,030 --> 00:41:03,450 Bubble-uri-uriin, ang unang? 952 00:41:03,450 --> 00:41:05,000 Pinili uri, ang pangalawang? 953 00:41:05,000 --> 00:41:08,450 Pagpapasok ng uri, ang mga third? 954 00:41:08,450 --> 00:41:10,710 Marinig bang makakuha ng ilang mga uri pagpipilian. 955 00:41:10,710 --> 00:41:13,280 Iba pang mga saloobin? 956 00:41:13,280 --> 00:41:16,880 >> Kaya ito ay lumiliko out na lahat ng mga algorithm 957 00:41:16,880 --> 00:41:22,400 ay fundamentally tulad ng mahusay na bilang bawat other-- o, kabaligtaran, tulad lamang ng 958 00:41:22,400 --> 00:41:25,980 hindi mabisa bilang bawat isa, dahil maaari naming gawin fundamentally 959 00:41:25,980 --> 00:41:28,120 mas mahusay kaysa sa lahat ng tatlong mga ng mga algorithm. 960 00:41:28,120 --> 00:41:29,990 At iyon ang isang bit ng isang puting kasinungalingan, masyadong. 961 00:41:29,990 --> 00:41:32,580 kapag sinabi ko bilang mahusay o bilang hindi mabisa, 962 00:41:32,580 --> 00:41:35,040 na hindi bababa sa para sa sobrang laking halaga ng n. 963 00:41:35,040 --> 00:41:38,450 Kapag mayroon kaming mga tao walong lang dito, o marahil 50 o kaya bar sa screen, 964 00:41:38,450 --> 00:41:41,645 makikita mo talagang mapansin ang mga pagkakaiba kasama ang tatlong mga algorithm. 965 00:41:41,645 --> 00:41:44,020 Ngunit bilang n, ang bilang ng mga tao, o ang bilang ng mga numero, 966 00:41:44,020 --> 00:41:46,350 o ang bilang ng mga tao sa telepono aklat, o ang bilang ng mga web page 967 00:41:46,350 --> 00:41:48,230 sa database ng Google ay makakakuha ng mas malaki at mas malalaking, 968 00:41:48,230 --> 00:41:51,650 ipapakita namin makita na ang lahat ng tatlong ng mga algorithm ay aktwal na medyo mababa. 969 00:41:51,650 --> 00:41:54,060 At maaari naming gawin fundamentally mas mahusay kaysa sa na. 970 00:41:54,060 --> 00:41:56,830 >> Tingnan natin ang isang hitsura, sa wakas, sa kung ano ang mga algorithm maaari 971 00:41:56,830 --> 00:41:59,520 tunog tulad ng sa konteksto ng ilang mga iba pa 972 00:41:59,520 --> 00:42:03,550 pati na rin sa pamamagitan ng paraan ng visualization dito 973 00:42:03,550 --> 00:42:06,860 na ipakikilala sa amin upang ng isang bilang ng mga algorithm. 974 00:42:06,860 --> 00:42:10,330 Sabihin sige at congratulate ang aming mga kalahok dito, ang lahat ng kanino 975 00:42:10,330 --> 00:42:11,690 pinagsunod-sunod sa kanilang sarili nang mahusay. 976 00:42:11,690 --> 00:42:15,124 Kung nais mong gumawa ng isang regalo pamamaalam. 977 00:42:15,124 --> 00:42:16,540 Maaari mong panatilihin pati na rin ang iyong mga numero. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 At ano ang makikita mo, o sa halip marinig, ngayon, 980 00:42:22,520 --> 00:42:25,710 ay ang bilang inilalagay namin ang tunog sa bawat isa sa mga bar 981 00:42:25,710 --> 00:42:28,660 at iugnay ito sa ang software, iba't ibang mga dalas ng tunog, 982 00:42:28,660 --> 00:42:33,970 maaari mong balutin ang iyong isip nang higit pa audioly sa paligid ng kung ano ang bawat isa sa mga bagay na ito 983 00:42:33,970 --> 00:42:34,470 magmukhang. 984 00:42:34,470 --> 00:42:39,325 Ang unang ng kung saan ay isang uri ng pagpapasok ng 985 00:42:39,325 --> 00:42:44,275 >> [Tono] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Ito ay isang uri ng bubble. 988 00:42:49,720 --> 00:42:54,175 >> [Tono] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Pinili uri. 991 00:43:18,222 --> 00:43:22,596 >> [Tono] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Isang bagay na tinatawag na pag-uuri-merge. 994 00:43:35,150 --> 00:43:38,140 >> [Tono] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome-uri. 997 00:43:51,278 --> 00:43:56,390 >> [Tono] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Iyon lang para sa CS50. 1000 00:44:09,430 --> 00:44:13,360 Makikita natin sa iyo sa Miyerkules. 1001 00:44:13,360 --> 00:44:16,671 >> NARRATOR: At ngayon, "Deep Mga pananaw, "sa pamamagitan ng Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Bakit ito ang isang ay para sa loop? 1004 00:44:21,590 --> 00:44:23,200 Bakit hindi gawing mas mahusay ito? 1005 00:44:23,200 --> 00:44:25,970 Gusto ko gumawa ng limang loop. 1006 00:44:25,970 --> 00:44:28,720 >> [Tawa]