1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID Malan: Добре. 3 00:00:11,940 --> 00:00:16,470 Така че това е CS50, а това е Сега началото на три седмици. 4 00:00:16,470 --> 00:00:19,960 >> Така че до сега, ние сме писането на програми в C 5 00:00:19,960 --> 00:00:23,210 че изглежда малко нещо като това тук. 6 00:00:23,210 --> 00:00:25,470 Така че ние имаме няколко остър включва в горната част. 7 00:00:25,470 --> 00:00:28,490 Имаме INT, основен, недействителни, и тогава нещо да се направи в средата, 8 00:00:28,490 --> 00:00:30,590 някои малко код вътре на тази функция. 9 00:00:30,590 --> 00:00:34,170 Но ключ е факта, че ние сме били каза нищожен тук. 10 00:00:34,170 --> 00:00:39,320 Така невалидни, всичко това време, уточнява че тази програма, когато тичам, 11 00:00:39,320 --> 00:00:41,300 може да се управлява само чрез името си. 12 00:00:41,300 --> 00:00:46,330 Вие не можете да въведете други думи или номера след името на програмата, когато 13 00:00:46,330 --> 00:00:46,830 тя работи. 14 00:00:46,830 --> 00:00:51,200 Така, например, ако програмата бяха компилирано в файл наречен здравей, 15 00:00:51,200 --> 00:00:53,480 бихте могли да направите ./hello, но това е то. 16 00:00:53,480 --> 00:00:56,750 >> Единственият начин, по който би могъл предоставя информация за тази програма 17 00:00:56,750 --> 00:00:57,960 е като се обадите функция. 18 00:00:57,960 --> 00:00:59,790 Например, каква функция сме използвали досега 19 00:00:59,790 --> 00:01:00,950 за да получите информация от потребителя? 20 00:01:00,950 --> 00:01:02,117 >> АУДИТОРИЯ: Вземете низ. 21 00:01:02,117 --> 00:01:04,700 DAVID Malan: За да получите низ, или получите INT, или сте виждали други, 22 00:01:04,700 --> 00:01:07,630 дори ако не сте ги използват все още, като се дълго и подобни. 23 00:01:07,630 --> 00:01:09,380 Но да предположим, че ние действително искате да започнете 24 00:01:09,380 --> 00:01:12,760 писане на програми, които са малко по- гъвкав, и, честно казано, малко по- 25 00:01:12,760 --> 00:01:15,090 като командите, които сте Получавам, да се надяваме, 26 00:01:15,090 --> 00:01:16,550 малко свикнали да. 27 00:01:16,550 --> 00:01:18,560 Подобно на CD пространство Dropbox. 28 00:01:18,560 --> 00:01:20,800 Това, разбира се, промени директория, приемайки 29 00:01:20,800 --> 00:01:23,590 вие сте в дома на Джон Харвард директорията, в папката Dropbox. 30 00:01:23,590 --> 00:01:27,380 В същото време, команда като тази създава нова директория, наречена pset2, 31 00:01:27,380 --> 00:01:30,290 Както може би вече или скоро за проблем ще създаде две. 32 00:01:30,290 --> 00:01:33,970 Направете Здравейте, разбира се, е заповед която изгражда една програма, наречена здравей 33 00:01:33,970 --> 00:01:35,770 от файл, наречен здравей точка в. 34 00:01:35,770 --> 00:01:39,140 И във всяка от тези случаи, сега, сме имали 35 00:01:39,140 --> 00:01:43,620 даде аргумент на така наречените командния ред, на мига ред, 36 00:01:43,620 --> 00:01:48,540 така че марка знае какво да се изгради и т.н. че защитен режим знае коя папка да се създаде, 37 00:01:48,540 --> 00:01:51,110 и така, че CD знае където искате да отидете. 38 00:01:51,110 --> 00:01:54,720 Но до сега, ние продължаваме да казва че основната, вашата функция по подразбиране, 39 00:01:54,720 --> 00:01:58,500 има израз празнота вътре в тези скоби 40 00:01:58,500 --> 00:02:01,250 което означава, че не може да вземе никакви аргументи. 41 00:02:01,250 --> 00:02:03,240 >> Така че, започвайки от днес, това, което ние ще направим 42 00:02:03,240 --> 00:02:06,270 е, ние ще започнем подкрепа на неща като това дори. 43 00:02:06,270 --> 00:02:08,990 В действителност, в този случай, който ви не обикновено ръчно въвеждате, 44 00:02:08,990 --> 00:02:11,130 Уверете се е правил това за нас, там не са 45 00:02:11,130 --> 00:02:15,840 един, но един, два, три допълнителни струни след програмата на име 46 00:02:15,840 --> 00:02:16,850 трясък. 47 00:02:16,850 --> 00:02:18,240 И как ще се постигне това? 48 00:02:18,240 --> 00:02:20,260 >> Е, започвайки от днес, в случаите, когато искаме 49 00:02:20,260 --> 00:02:22,855 да даде своя принос чрез т.нар команди, 50 00:02:22,855 --> 00:02:24,980 отиваме да започнете да добавяте тук какво има в yellow-- 51 00:02:24,980 --> 00:02:30,520 подмяна нищожен с INT argc запетая струнен argv отворена скоба близо скоба. 52 00:02:30,520 --> 00:02:32,520 Сега това е интересно в продължение на няколко причини. 53 00:02:32,520 --> 00:02:35,690 Едно, че ще ходи да ни пишете програми, които са малко по-динамична. 54 00:02:35,690 --> 00:02:37,570 Но, по-интригуващи, това ще се отвори 55 00:02:37,570 --> 00:02:40,340 сега един разговор, че да какво масиви наистина може да 56 00:02:40,340 --> 00:02:43,300 да се използва, за какво низ наистина е под капака, 57 00:02:43,300 --> 00:02:47,320 до следващата седмица, когато ще започнем гмуркане в още по-дълбоко за това как машината е 58 00:02:47,320 --> 00:02:48,590 прави всички тези неща работа. 59 00:02:48,590 --> 00:02:51,920 Но за сега, нека да се направи, може би, една картина. 60 00:02:51,920 --> 00:02:54,950 >> Когато се напише програма с основен предмет на декларираната 61 00:02:54,950 --> 00:02:58,810 По този начин, така че основната отнема два аргумента, с вътр 62 00:02:58,810 --> 00:03:03,233 и-- какъв тип данни е вторият аргумент? 63 00:03:03,233 --> 00:03:04,529 >> АУДИТОРИЯ: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID Malan: Array. 65 00:03:05,320 --> 00:03:09,170 Така изглежда на пръв поглед като че ли е по- низ, но забележите квадратните скоби. 66 00:03:09,170 --> 00:03:12,760 Спомнете си последния път, когато се въвежда понятието за масив. 67 00:03:12,760 --> 00:03:16,210 И масиви използват квадратни скоби в няколко ситуации. 68 00:03:16,210 --> 00:03:19,160 Може да се използва на площада скоби, за да отидат в масив 69 00:03:19,160 --> 00:03:22,710 и да получите даден елемент, като скоба 0 или скоба 1 или скоба 2. 70 00:03:22,710 --> 00:03:25,500 Но видяхме, ако за кратко, миналата седмица, че вие ​​също 71 00:03:25,500 --> 00:03:28,790 използвате тези квадратни скоби до декларират размера на масива, 72 00:03:28,790 --> 00:03:31,790 ако знаете предварително колко цели числа или колко струни или каквото и да 73 00:03:31,790 --> 00:03:32,630 всъщност искат. 74 00:03:32,630 --> 00:03:34,790 Така се оказва, че има трета контекст тук 75 00:03:34,790 --> 00:03:37,890 че не разполага с редица вътре на квадратните скоби. 76 00:03:37,890 --> 00:03:41,920 Когато сте задали, като имам тук, името на нещо като argv, 77 00:03:41,920 --> 00:03:44,550 който е само един луксозен начин на казвайки аргумент вектор, който 78 00:03:44,550 --> 00:03:47,750 е друг луксозен начин на казвайки масив от аргументи, 79 00:03:47,750 --> 00:03:50,870 отворена скоба близо скоба просто означава, че не е задължително 80 00:03:50,870 --> 00:03:52,960 знае предварително колко е голям масива ще бъде, 81 00:03:52,960 --> 00:03:55,070 но ти знаеш, че ще бъде масив. 82 00:03:55,070 --> 00:03:57,320 Така че, ако не знаете номер не го сложи там, 83 00:03:57,320 --> 00:04:01,160 за отворена скоба близо скоба означава, че argv не е низ, 84 00:04:01,160 --> 00:04:03,124 но масив от низове. 85 00:04:03,124 --> 00:04:05,040 Така синтактично, ако сте мисля върна миналата седмица, 86 00:04:05,040 --> 00:04:09,460 това е много подобен на казвайки: нещо като вътр възрасти отворена скоба, 87 00:04:09,460 --> 00:04:10,984 и след това нещо след това. 88 00:04:10,984 --> 00:04:12,150 И така, какво означава това изглежда? 89 00:04:12,150 --> 00:04:13,399 Нека наистина да се направи снимка. 90 00:04:13,399 --> 00:04:18,756 Така че, когато стартирате тази програма с Main като два аргумента, определени в 91 00:04:18,756 --> 00:04:21,339 на тези скоби, те по същество най-малко две парчета 92 00:04:21,339 --> 00:04:23,560 памет подаде на вас под предния капак. 93 00:04:23,560 --> 00:04:26,550 One, като аз ще привлича като този правоъгълник, ще се нарича argc. 94 00:04:26,550 --> 00:04:30,645 И точно като бърза рекапитулация, какъв е типа данни на argc? 95 00:04:30,645 --> 00:04:31,270 Така че това е едно цяло число. 96 00:04:31,270 --> 00:04:33,480 Така че един брой ще да отида в argc-- завои 97 00:04:33,480 --> 00:04:35,660 , че стои за броене аргумент. 98 00:04:35,660 --> 00:04:38,887 Междувременно, аз съм съставен argv като масив. 99 00:04:38,887 --> 00:04:40,970 И аз наистина не знам колко време ще бъде, 100 00:04:40,970 --> 00:04:42,470 Така че за днешните цели Дот дот точка. 101 00:04:42,470 --> 00:04:43,636 Това може да получите на някои дължина. 102 00:04:43,636 --> 00:04:45,640 Но аз съм на снимката тук най-малко четири правоъгълници. 103 00:04:45,640 --> 00:04:50,970 Така argv парче памет, която съхранява низ низ низ точка, точка точка, 104 00:04:50,970 --> 00:04:53,950 и argc е само едно парче памет за цяло число. 105 00:04:53,950 --> 00:04:55,710 >> Така че сега, нека да бъдем малко по-точни. 106 00:04:55,710 --> 00:04:59,200 Ако, когато имам струни в този масив, наречен 107 00:04:59,200 --> 00:05:03,290 argv, искам да стигна до тях индивидуално, точно както миналата седмица, 108 00:05:03,290 --> 00:05:05,670 ние ще използваме нотация като argv конзола 0 109 00:05:05,670 --> 00:05:07,650 за да получите първото нещо масив. 110 00:05:07,650 --> 00:05:10,440 Argv скоба 1, за да получите Второто нещо, и така нататък. 111 00:05:10,440 --> 00:05:14,597 Ключът тук е, че сме все още 0 indexed-- ние сме все още се брои от 0. 112 00:05:14,597 --> 00:05:16,430 Така че сега е нека действително сложи нещо в това. 113 00:05:16,430 --> 00:05:21,670 Ако аз трябваше да се състави програма, наречена Здравейте от един файл, наречен здравей точка C, 114 00:05:21,670 --> 00:05:24,340 и след това пускам тази програма с точка наклонена черта здравей, 115 00:05:24,340 --> 00:05:28,380 какво прави на компютъра ми, моя лаптоп, изглежда като под капака 116 00:05:28,380 --> 00:05:31,300 момента, в който стартирате точка наклонена черта здравей и натиснете Enter? 117 00:05:31,300 --> 00:05:33,500 Е, това е може би това, което бихме могли да опишем 118 00:05:33,500 --> 00:05:37,010 като съдържание на вашия компютър памет, или RAM-- Random Access Memory. 119 00:05:37,010 --> 00:05:40,330 С други думи, на компютъра, по някакъв начин за вас магически, 120 00:05:40,330 --> 00:05:45,360 поставя номер 1 в argc, AKA argcount, и го слага буквално низа 121 00:05:45,360 --> 00:05:48,200 ./hello в argv скоба 0. 122 00:05:48,200 --> 00:05:51,750 Нямам представа, честно казано, това, което е в argv скоба 1 или 2, или 3, 123 00:05:51,750 --> 00:05:55,550 защото, ако потребителят не разполага с написали нищо освен ./hello, 124 00:05:55,550 --> 00:05:58,550 отиваме да се предположи, че тези са най-вероятните стойности за боклук, 125 00:05:58,550 --> 00:05:59,700 така да се каже. 126 00:05:59,700 --> 00:06:02,650 Тези парчета на паметта съществува, но тя не е до нас 127 00:06:02,650 --> 00:06:05,710 да ги гледаш, защото на argcount е само един. 128 00:06:05,710 --> 00:06:07,870 >> Сега, междувременно, ако напиши стартирате друга програма, 129 00:06:07,870 --> 00:06:12,250 CD, което е по-правилно команда, в мига prompt-- CD пространство 130 00:06:12,250 --> 00:06:17,200 Dropbox-- когато аз тичам, че ефективно, когато програмата CD се управлява, argc, 131 00:06:17,200 --> 00:06:22,270 в памет на моя компютър, е за най-кратките секунди номер 2. 132 00:06:22,270 --> 00:06:25,936 И тогава argv скоба о има CD, argv конзола 1 има Dropbox, 133 00:06:25,936 --> 00:06:28,560 и след това разбира се командата допълва, така че всички на тази памет 134 00:06:28,560 --> 00:06:30,420 по същество си отива и се използва за нещо друго. 135 00:06:30,420 --> 00:06:32,270 И затова казвам само за частица от секундата. 136 00:06:32,270 --> 00:06:35,720 >> В същото време, ако ние не направим защитен режим pset2, картината изглежда почти същото, 137 00:06:35,720 --> 00:06:37,900 но с различни струни вътре argv. 138 00:06:37,900 --> 00:06:42,570 Ако го направя трясък тире здравей здравей точка С, същата идея. 139 00:06:42,570 --> 00:06:47,060 Повече неща се попълва за argv и argc, разбира се, е 4. 140 00:06:47,060 --> 00:06:49,150 С други думи, въпреки че този масив 141 00:06:49,150 --> 00:06:52,950 може да бъде точка, точка, точка, на някои променлива дължина, така да се каже, 142 00:06:52,950 --> 00:06:56,720 Вие винаги знаете къде в края на това е, защото argc няма да ви кажа, 143 00:06:56,720 --> 00:07:00,120 в кой момент трябва да спреш гледаш елементи в argv. 144 00:07:00,120 --> 00:07:03,660 Можете да търсите само в четири общо в този случай. 145 00:07:03,660 --> 00:07:06,600 >> Така че нека сега да погледнем, може би, една проста програма. 146 00:07:06,600 --> 00:07:09,070 Едно, че просто казва здравей до някой като Zamyla. 147 00:07:09,070 --> 00:07:12,620 Така че аз твърдя, аз отивам да се напише програма в един момент, чрез който мога да направя 148 00:07:12,620 --> 00:07:16,670 ./hello пространство Zamyla, и след това искам моята програма, за да разпечатате нещо 149 00:07:16,670 --> 00:07:18,520 супер-просто като "здравей, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Сега в миналото сме използвали getstring. 151 00:07:20,100 --> 00:07:22,850 Така че в миналото, дори ако сте нов в програмирането, 152 00:07:22,850 --> 00:07:27,180 шансовете са, можете да привличам програма, която използва getstring 153 00:07:27,180 --> 00:07:29,390 и след това използва ФОРМАТ да кажа здрасти на Zamyla. 154 00:07:29,390 --> 00:07:31,290 Но нека не се използва getstring това време. 155 00:07:31,290 --> 00:07:37,510 Нека вместо да отидат в Appliant и не включват стандартни I O точка з. 156 00:07:37,510 --> 00:07:41,160 Позволете ми също така да включва CS50 точка з. 157 00:07:41,160 --> 00:07:44,730 Сега INT главната, и сега съм Няма да правя недействителен днес. 158 00:07:44,730 --> 00:07:51,200 Вместо това, аз ще направя INT argc струнен argv отворена скоба близо скоба, 159 00:07:51,200 --> 00:07:52,640 не се посочват редица. 160 00:07:52,640 --> 00:07:54,644 И сега тук е моята т.нар да правя. 161 00:07:54,644 --> 00:07:57,560 Това, което аз отивам да направя сега е, аз съм Ще направя малко на скок на вярата, 162 00:07:57,560 --> 00:08:00,560 Отивам да се предположи, че на потребителя възнамерявате да използвате правилно тази програма, 163 00:08:00,560 --> 00:08:04,980 и аз съм просто ще направи ФОРМАТ здравей,% калай. 164 00:08:04,980 --> 00:08:06,630 Така че нищо ново там. 165 00:08:06,630 --> 00:08:11,470 Но аз искам да се тури каквото и дума за типове потребители след името на програмата. 166 00:08:11,470 --> 00:08:16,970 Така че, ако го направя ./hello пространство Zamyla, I Искам по някакъв начин да програмно достъп 167 00:08:16,970 --> 00:08:20,870 цитирам цитата "Zamyla." така че аз мога да отида в моя аргумент вектор, 168 00:08:20,870 --> 00:08:25,980 ми масив от низове, и ако командата, отново, беше ./hello пространство Zamyla, 169 00:08:25,980 --> 00:08:29,340 кой номер искам да се постави в argv тук? 170 00:08:29,340 --> 00:08:29,840 АУДИТОРИЯ: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID Malan: 1, защото скоба 0 Оказва се, 172 00:08:32,355 --> 00:08:34,230 ще бъде на име на програмата, както видяхме. 173 00:08:34,230 --> 00:08:37,789 Така конзола 1 е първата дума че аз, потребителя, сте написали. 174 00:08:37,789 --> 00:08:39,559 Отивам да вървим напред и да спаси това. 175 00:08:39,559 --> 00:08:42,830 Отивам да отидат в моята папка къде съм поставен този файл. 176 00:08:42,830 --> 00:08:44,920 Отивам да правя направи здравей 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp Йо. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Какво съм направил погрешно? 180 00:08:54,480 --> 00:08:57,270 Бях изненада себе си само за миг там. 181 00:08:57,270 --> 00:08:58,230 Какво съм направил погрешно? 182 00:08:58,230 --> 00:08:59,220 >> АУДИТОРИЯ: Name. 183 00:08:59,220 --> 00:09:01,767 >> DAVID Malan: Файлът е всъщност нарича hello3.c. 184 00:09:01,767 --> 00:09:03,850 И го направих само за консистенция, защото сме 185 00:09:03,850 --> 00:09:06,550 имали hello.c има в минало в онлайн код. 186 00:09:06,550 --> 00:09:11,550 Така че нека да се определи това ./hello скоба тире 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 И сега имаме здравей, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Междувременно, мога да променя това, за да бъде Роб, или наистина всяка друга дума. 190 00:09:17,650 --> 00:09:19,230 >> Но нека да разгледаме случай корнер. 191 00:09:19,230 --> 00:09:24,360 Какво може да очаквате да се случи, ако Аз не въведете име на някого изобщо? 192 00:09:24,360 --> 00:09:25,270 >> АУДИТОРИЯ: Грешка. 193 00:09:25,270 --> 00:09:27,300 >> DAVID Malan: Една грешка от някакъв вид, може би. 194 00:09:27,300 --> 00:09:28,200 Нека да видим. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Така ФОРМАТ действително се малко защитен от нас 198 00:09:33,870 --> 00:09:38,131 тук, и буквално печат отворени скоба нищожна, но дори и по-лоши неща могат да се случат. 199 00:09:38,131 --> 00:09:40,130 И само за да докаже, ви нещо абсолютно 200 00:09:40,130 --> 00:09:42,800 не трябва да правят, да вървим в тук и да започнете да изпълзяват наоколо. 201 00:09:42,800 --> 00:09:43,300 Така ли е? 202 00:09:43,300 --> 00:09:46,410 Ако знам, че картината в памет е по същество това, 203 00:09:46,410 --> 00:09:52,660 argv конзола 1 има Zamyla, argv скоба 0 има ./hello или ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Какво е в скоба 2? 205 00:09:55,400 --> 00:09:58,210 Така че мога да отговоря на този самият въпрос, нали? 206 00:09:58,210 --> 00:10:00,460 Мога само да се промени една до две. 207 00:10:00,460 --> 00:10:07,270 Сега мога да прекомпилирате здравей 3, ./hello3 Нека да увеличите и натиснете Enter. 208 00:10:07,270 --> 00:10:08,270 Опа. 209 00:10:08,270 --> 00:10:10,660 Не цитирам марки. 210 00:10:10,660 --> 00:10:12,540 Интересно. 211 00:10:12,540 --> 00:10:15,530 Така че това е нещо готино да да видим какво друго е тук. 212 00:10:15,530 --> 00:10:17,130 >> Така че какво друго е вътре в моя лаптоп? 213 00:10:17,130 --> 00:10:20,390 Нека да го спаси със скоба 3. 214 00:10:20,390 --> 00:10:25,190 Направете hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Curious. 216 00:10:26,500 --> 00:10:30,560 А сега нека да получите наистина bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Така че това е наистина дълбоко гмуркане в памет на моя компютър. 218 00:10:34,340 --> 00:10:35,930 50 индекси вътре. 219 00:10:35,930 --> 00:10:41,950 Така направи здравей 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Curious. 221 00:10:42,680 --> 00:10:44,660 Добре, сега аз съм просто ще получите безразсъдно. 222 00:10:44,660 --> 00:10:47,331 Да отидем в 5000. 223 00:10:47,331 --> 00:10:47,830 Добре. 224 00:10:47,830 --> 00:10:49,520 Така че нека да прекомпилирате. 225 00:10:49,520 --> 00:10:51,460 Направете 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 Сега някои от вас, има мощ е една крушка излизането. 229 00:10:59,250 --> 00:11:01,900 Колко от вас имат виждал това съобщение преди? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Така че, защо? 232 00:11:04,420 --> 00:11:07,250 >> Коефициенти are-- и има различни неща, които могат да доведат до това, 233 00:11:07,250 --> 00:11:09,730 и ясно, че сте в добро company-- имаме ясно 234 00:11:09,730 --> 00:11:11,900 причинено което се нарича сегментиране вина. 235 00:11:11,900 --> 00:11:15,890 И дълга история кратко за днес, аз са се докоснали един сегмент на паметта 236 00:11:15,890 --> 00:11:17,060 че не трябва да има. 237 00:11:17,060 --> 00:11:19,970 Когато сегмент просто означава парче на паметта, че не трябва да има. 238 00:11:19,970 --> 00:11:25,530 Сега компютъра гарантира, че ако тичам ./helloZamyla, че мога да се докоснат argv 239 00:11:25,530 --> 00:11:27,760 бъде скоба 0 и argv скоба 1. 240 00:11:27,760 --> 00:11:32,730 Но argc е на стойност 2, това означава, че аз съм само allowed-- това е нещо на честта 241 00:11:32,730 --> 00:11:35,180 system-- да се докоснат скоба 0 и скоба 1. 242 00:11:35,180 --> 00:11:37,990 Ако отида по-далеч, има абсолютно щеше да бъде памет там. 243 00:11:37,990 --> 00:11:40,660 My RAM съществува физически в компютъра. 244 00:11:40,660 --> 00:11:42,080 Но кой знае какво е там? 245 00:11:42,080 --> 00:11:44,450 Всъщност, аз съм работят с няколко програми наведнъж. 246 00:11:44,450 --> 00:11:46,910 Може би имам seen-- ако не бяха Правейки това на Appliant 247 00:11:46,910 --> 00:11:49,937 но на моя Mac или PC-- да имам види съдържанието на електронната поща. 248 00:11:49,937 --> 00:11:52,270 Може да съм видял един миг съобщение Аз бях наскоро е изпратил. 249 00:11:52,270 --> 00:11:55,390 Всичко, което може да бъде спиращ около в паметта 250 00:11:55,390 --> 00:11:59,180 може да са достъпни чрез тази произволна квадратна скоба нотация. 251 00:11:59,180 --> 00:12:02,850 Или, още по-лошо, може да се наложи Намерих един от моите пароли 252 00:12:02,850 --> 00:12:05,859 че бих наскоро написа в, че програма се съхранява в паметта, така че 253 00:12:05,859 --> 00:12:07,900 да ме разпознаете, и тогава просто вид го напусна 254 00:12:07,900 --> 00:12:09,910 в RAM, докато не се откажат от тази програма. 255 00:12:09,910 --> 00:12:12,860 >> И наистина, това е един от опасността и един правомощията 256 00:12:12,860 --> 00:12:15,980 за използване на език като C. Имате свободен достъп 257 00:12:15,980 --> 00:12:18,860 на цялото съдържание памет на дадена програма, 258 00:12:18,860 --> 00:12:21,340 и какви лоши момчета може дори направи в тези cases-- 259 00:12:21,340 --> 00:12:23,807 особено когато ние стигнем до уеб програмиране 260 00:12:23,807 --> 00:12:26,890 към края на семестъра, ние ще преразгледа този topic-- се мушкам наоколо, 261 00:12:26,890 --> 00:12:31,660 потенциално, някой е компютър памет и да намерят такива любопитни неща 262 00:12:31,660 --> 00:12:32,570 както видяхме там. 263 00:12:32,570 --> 00:12:36,900 Или дори още по-лошо, пароли, които той или тя може да използва, за да направи лоши неща. 264 00:12:36,900 --> 00:12:40,240 >> Затова е ясно, че не е трябвало да направи това, защото странни неща започват да се случи. 265 00:12:40,240 --> 00:12:42,310 В действителност, това е програма трясък. 266 00:12:42,310 --> 00:12:44,580 Това ще бъде равностойността на Mac OS или Windows 267 00:12:44,580 --> 00:12:46,770 прозореца на програмата просто изчезват. 268 00:12:46,770 --> 00:12:48,300 Възникнала е неочаквана грешка. 269 00:12:48,300 --> 00:12:50,840 В средата на командния ред ние виждаме нещо подобно. 270 00:12:50,840 --> 00:12:54,480 Но това е защо, е, че съм просто докосване памет, която не принадлежи на мен. 271 00:12:54,480 --> 00:12:57,090 >> Така че нека да се защитава срещу този на малко по различен начин 272 00:12:57,090 --> 00:12:59,010 , като погледнете в тази програма тук. 273 00:12:59,010 --> 00:13:01,000 Така, отново, скелета че видяхме earlier-- 274 00:13:01,000 --> 00:13:02,480 и съм подчертала този път вътр. 275 00:13:02,480 --> 00:13:05,900 И през цялото това време основната има наистина връща стойност. 276 00:13:05,900 --> 00:13:09,120 Въпреки че в повечето от нашата лекция примери ние никога не съм използвал веднъж 277 00:13:09,120 --> 00:13:10,990 върне нещо в основния. 278 00:13:10,990 --> 00:13:13,710 Ние просто напишете ФОРМАТ близо фигурна скоба и това е всичко. 279 00:13:13,710 --> 00:13:16,500 Но безплатно, какво по съставител е правил за теб, 280 00:13:16,500 --> 00:13:19,510 ефективно, се връща 0 за вас. 281 00:13:19,510 --> 00:13:22,950 Оказа out-- и че е малко counterintuitive-- че 0 е добро. 282 00:13:22,950 --> 00:13:24,690 Това не означава фалшиво по себе си. 283 00:13:24,690 --> 00:13:29,080 0 е добро, и всеки не-0 стойност, светът е решил, 284 00:13:29,080 --> 00:13:30,619 може да означава грешка. 285 00:13:30,619 --> 00:13:32,910 Така че, ако някога сте побъркани нещо на компютъра си, 286 00:13:32,910 --> 00:13:36,600 или програма, току-що е починал от вас и сте придобили някои погрешни прозорец 287 00:13:36,600 --> 00:13:40,360 на вашия екран, казвайки грешка отрицателен 49 или грешка 23-- 288 00:13:40,360 --> 00:13:44,170 някои привидно произволна value--, че е защото един програмист е трудно кодирани 289 00:13:44,170 --> 00:13:49,370 стойност като негативен или позитивен 49 23 да представлява произволен брой, смея да кажа, 290 00:13:49,370 --> 00:13:53,340 на 4 милиарда възможни неща , които биха могли да се объркат в една програма. 291 00:13:53,340 --> 00:13:55,700 >> Е, как бих могъл да взема Възползвайте се от това сам? 292 00:13:55,700 --> 00:13:58,970 Е, нека да отворим програма че съм написал по-рано, 293 00:13:58,970 --> 00:14:01,450 и мушкам около онлайн нарича здравей 4. 294 00:14:01,450 --> 00:14:05,650 И това е почти идентични, с изключение на това му трябва малко за проверка на грешки. 295 00:14:05,650 --> 00:14:09,660 В този случай, аз съм отново обявена Основната както като два аргумента, 296 00:14:09,660 --> 00:14:13,180 но този път по линия 17, известие Правя малко на проверка здрав разум. 297 00:14:13,180 --> 00:14:17,100 Аз съм като се уверите, че argc равнява е равно на 2. 298 00:14:17,100 --> 00:14:18,960 Защото ако това е, че означава, че можете спокойно да 299 00:14:18,960 --> 00:14:21,420 докоснат не само конзола 0, но скоба 1. 300 00:14:21,420 --> 00:14:24,330 И да отида напред и да отпечатате, в този случай, Zamyla или Rob 301 00:14:24,330 --> 00:14:26,020 или каквото и дума въведох навън. 302 00:14:26,020 --> 00:14:28,020 И сега, само за да получите малко по-правилното, 303 00:14:28,020 --> 00:14:31,910 Отивам изрично да се върне 0 да означава всичко е добре. 304 00:14:31,910 --> 00:14:33,300 Нищо лошо не се е случило. 305 00:14:33,300 --> 00:14:38,590 >> Но по силата на споразумение, аз отивам да върне един, или казано всяко-0 без стойност, 306 00:14:38,590 --> 00:14:40,160 ако нещо се обърка. 307 00:14:40,160 --> 00:14:43,270 Сега потребителят няма да се наистина забележи какво става. 308 00:14:43,270 --> 00:14:50,410 В действителност, ако отида в тази директория, ние увеличавате и правят здравей 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla държи като аз очаквам. 310 00:14:54,210 --> 00:14:58,570 Но ако вместо това не напишете нищо, нищо не изглежда да се случи, 311 00:14:58,570 --> 00:14:59,680 но тя не се срине. 312 00:14:59,680 --> 00:15:04,660 И ако вместо да се направи нещо като Rob е Проктър 313 00:15:04,660 --> 00:15:07,550 в Thayer-- споделяне произволна информация. 314 00:15:07,550 --> 00:15:13,680 Но забележете, argv 1, 2, 3, 4, и 5, сега следва да съществуват в паметта. 315 00:15:13,680 --> 00:15:16,540 Това също не е това, което е моята програма очаква, 316 00:15:16,540 --> 00:15:20,300 защото аз проверих дали argc равнява е равно на 2, или не. 317 00:15:20,300 --> 00:15:22,140 Така че аз съм сега се защитава срещу това. 318 00:15:22,140 --> 00:15:25,290 >> Сега, като настрана, ние на programmer-- или по-скоро ние на users-- 319 00:15:25,290 --> 00:15:29,670 никога не се види, че 0 или 1, но като се използва инструмент, наречен Debugger, или други инструменти, 320 00:15:29,670 --> 00:15:32,250 както ще видим, преди да дълъг, можете програмиста 321 00:15:32,250 --> 00:15:36,590 може действително да видим какво може да бъде наред вътре на вашата програма. 322 00:15:36,590 --> 00:15:39,170 >> Така че, каквито и да било въпроси относно argc? 323 00:15:39,170 --> 00:15:40,873 Да. 324 00:15:40,873 --> 00:15:45,292 >> АУДИТОРИЯ: Аз съм виждал, където те не са имали характер, [недоловим] 325 00:15:45,292 --> 00:15:49,669 току-що каза низ звезда г, като характер звездичка запетая. 326 00:15:49,669 --> 00:15:50,710 Еквивалентен тук ли са те? 327 00:15:50,710 --> 00:15:51,626 >> DAVID Malan: Те са. 328 00:15:51,626 --> 00:15:55,080 Така че въпросът е, че имате понякога виждали програми 329 00:15:55,080 --> 00:15:57,270 като това, че не го правят каже низ argv скоба 330 00:15:57,270 --> 00:16:01,015 но вместо да каже нещо като Чар скоба звезда argv. 331 00:16:01,015 --> 00:16:03,140 А има и още други варианти, които може да се види. 332 00:16:03,140 --> 00:16:04,264 Те наистина са еквивалентни. 333 00:16:04,264 --> 00:16:06,240 За сега, ние имаме тези вид обучение колела 334 00:16:06,240 --> 00:16:09,737 на под формата на низ в CS50 библиотека, но за малко повече от седмица 335 00:16:09,737 --> 00:16:12,570 или така че ние отиваме да се премахне, че обструкция напълно и действително 336 00:16:12,570 --> 00:16:16,820 погледнете какво Чар и звездата са, и как тези, които се отнасят до паметта 337 00:16:16,820 --> 00:16:18,140 представяне като цяло. 338 00:16:18,140 --> 00:16:19,540 Така че ние ще се върнем към това. 339 00:16:19,540 --> 00:16:21,540 >> Други въпроси, свързани с нашата argv или argc? 340 00:16:21,540 --> 00:16:22,397 Да. 341 00:16:22,397 --> 00:16:24,438 АУДИТОРИЯ: Защо го върне грешка [недоловим]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID Malan: Защо го направих върне грешка only-- ох! 344 00:16:29,230 --> 00:16:31,813 В предишния случай, когато ние бяха futzing наоколо с памет, 345 00:16:31,813 --> 00:16:35,110 защо го върне само грешка когато аз наистина написали голям номер? 346 00:16:35,110 --> 00:16:36,620 Краткият отговор е, че просто имам късмет. 347 00:16:36,620 --> 00:16:39,240 Най-общо казано, компютър заделя памет в парчета, 348 00:16:39,240 --> 00:16:42,900 и тя ми даде достатъчно голямо парче, че Имам далеч, без да бъдат забелязани, 349 00:16:42,900 --> 00:16:46,280 докосване скоба 2, 3 конзола, скоба 50, но веднага след като избута 350 00:16:46,280 --> 00:16:49,080 късметът ми, аз отидох на отвъдното граници на парчето на паметта 351 00:16:49,080 --> 00:16:50,520 операционната система ми беше дал. 352 00:16:50,520 --> 00:16:52,720 И това е, когато го притисната надолу и каза, не. 353 00:16:52,720 --> 00:16:54,580 Сегментирането грешка. 354 00:16:54,580 --> 00:16:55,692 Да. 355 00:16:55,692 --> 00:16:58,890 >> АУДИТОРИЯ: Как компютъра знаят стойността на argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID Malan: Как действа компютър знаят стойността на argc? 357 00:17:02,390 --> 00:17:07,920 Когато стартирате програмата, тази програма, от природата на мига ред, 358 00:17:07,920 --> 00:17:11,359 се предава на масива на думи, които са били напечатани 359 00:17:11,359 --> 00:17:13,300 в командния ред, това беше въвели в командния ред. 360 00:17:13,300 --> 00:17:16,569 И така, това е вашата операционна система, която по същество 361 00:17:16,569 --> 00:17:20,329 населяват аргументи основните е за теб. 362 00:17:20,329 --> 00:17:22,829 Така че това е една от услугите, че можете да получите, нещо тайно 363 00:17:22,829 --> 00:17:24,869 под капака на операционна система. 364 00:17:24,869 --> 00:17:27,118 Други въпроси? 365 00:17:27,118 --> 00:17:27,618 Да. 366 00:17:27,618 --> 00:17:29,787 >> АУДИТОРИЯ: Какво означава ядро ​​сметището кажеш? 367 00:17:29,787 --> 00:17:31,370 DAVID Malan: Какво означава ядро ​​сметището кажеш? 368 00:17:31,370 --> 00:17:32,950 Така че това е добър въпрос. 369 00:17:32,950 --> 00:17:35,312 И нека да се върнем в тази директория тук. 370 00:17:35,312 --> 00:17:37,270 И вие ще забележите, че Имам нов файл там. 371 00:17:37,270 --> 00:17:41,670 Това е наистина наречена ядро, и това е всъщност обикновено приличен размер на файла. 372 00:17:41,670 --> 00:17:45,300 Това е по същество една моментна снимка на съдържанието на паметта ми програмата 373 00:17:45,300 --> 00:17:46,902 или RAM, когато го разби. 374 00:17:46,902 --> 00:17:49,110 И това ще бъде полезна, потенциално, диагностично, 375 00:17:49,110 --> 00:17:52,850 след като ние говорим в бъдеще лекция и раздел за отстраняване на грешки, 376 00:17:52,850 --> 00:17:55,730 защото всъщност можете да направите еквивалент на цифров аутопсия 377 00:17:55,730 --> 00:18:00,300 на този файл, за да помогне да разбера какво сте направили погрешно във вашата програма. 378 00:18:00,300 --> 00:18:01,220 Да. 379 00:18:01,220 --> 00:18:04,450 >> АУДИТОРИЯ: Дали argc команда в себе си, или може да го назовем нещо? 380 00:18:04,450 --> 00:18:05,575 >> DAVID Malan: Добър въпрос. 381 00:18:05,575 --> 00:18:08,040 Дали argc команда само по себе си, или можете ли да го назовем нещо? 382 00:18:08,040 --> 00:18:09,290 Това определено не е команда. 383 00:18:09,290 --> 00:18:13,500 Това е просто една променлива Име или име на аргумент е, 384 00:18:13,500 --> 00:18:15,481 и така абсолютно ние могли да наречем този Foo, 385 00:18:15,481 --> 00:18:18,480 бихме могли да наричаме този бар, който са склонни да бъде в движение-на думите, че един компютър 386 00:18:18,480 --> 00:18:19,860 учен отива. 387 00:18:19,860 --> 00:18:22,820 Но по силата на споразумение, ние използваме argc и argv. 388 00:18:22,820 --> 00:18:25,360 Но това е само човешко конвенция, нищо повече. 389 00:18:25,360 --> 00:18:25,860 Добре. 390 00:18:25,860 --> 00:18:28,140 Така се оказва, че съм бил казвам малко на бял lie-- 391 00:18:28,140 --> 00:18:31,264 и честно казано, в бъдеще, ще видите ние сме били казва на другите бели лъжи. 392 00:18:31,264 --> 00:18:33,510 Но за сега, отиваме да се бели на едно от тях. 393 00:18:33,510 --> 00:18:37,310 В този случай тук, когато по-рано завтече програма като ./hello или ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, имахме съдържанието на моята паметта на компютъра си търси грубо като 395 00:18:42,780 --> 00:18:43,280 това. 396 00:18:43,280 --> 00:18:45,070 Но припомни какво е низ. 397 00:18:45,070 --> 00:18:49,279 Какво да кажем преди седмица каква низ всъщност се намира под предния капак? 398 00:18:49,279 --> 00:18:50,320 АУДИТОРИЯ: масив от символи. 399 00:18:50,320 --> 00:18:52,111 DAVID Malan: Това е масив от символи, нали? 400 00:18:52,111 --> 00:18:55,760 Така можем да имаме масив от струни, но, от своя страна, низ 401 00:18:55,760 --> 00:18:57,150 е набор от символи. 402 00:18:57,150 --> 00:19:00,010 Така че, ако наистина искате да бъдете анален, когато рисувам тази картина, 403 00:19:00,010 --> 00:19:03,290 Аз наистина трябва да бъде съставянето че е малко повече по този начин, 404 00:19:03,290 --> 00:19:08,000 при което във всяка от тези индекси на моя argv масив, 405 00:19:08,000 --> 00:19:11,432 там се е цяло низ , който се явява в масив. 406 00:19:11,432 --> 00:19:13,140 И сега на бял лъжата ние казваме днес 407 00:19:13,140 --> 00:19:15,181 е, че на снимката не изглежда доста по този начин. 408 00:19:15,181 --> 00:19:19,110 В действителност, най-малките квадрати са обикновено извън големите правоъгълници 409 00:19:19,110 --> 00:19:19,610 там. 410 00:19:19,610 --> 00:19:21,280 Но ние ще се върна на това след дълго. 411 00:19:21,280 --> 00:19:25,440 Но това е ./hello наклонена черта 0, че да бъдеш специален характер, които 412 00:19:25,440 --> 00:19:28,310 разграничава края на низ и ние имаме още една след 413 00:19:28,310 --> 00:19:29,360 Име Zamyla е. 414 00:19:29,360 --> 00:19:30,900 И така, какво означава това? 415 00:19:30,900 --> 00:19:33,410 >> Е, нека да вървим напред и да отвори два други примери 416 00:19:33,410 --> 00:19:35,220 , които са достъпни онлайн. 417 00:19:35,220 --> 00:19:40,590 Един от тях е наречен argv1.c а другият е argv2. 418 00:19:40,590 --> 00:19:44,260 Това е супер проста програма, която е различен от минали програми 419 00:19:44,260 --> 00:19:47,260 в която сега аз съм с argc и argv тук. 420 00:19:47,260 --> 00:19:54,300 И сега съм интегриране с линия за в ред 18, от I = 0 на до argc. 421 00:19:54,300 --> 00:19:56,850 И какво ще правя с тази линия на код тук? 422 00:19:56,850 --> 00:19:58,270 На английски език. 423 00:19:58,270 --> 00:20:00,510 Това очевидно показва използване на argc. 424 00:20:00,510 --> 00:20:03,670 Но на английски, какво прави го направя, ако стартирате тази програма? 425 00:20:03,670 --> 00:20:04,366 Да? 426 00:20:04,366 --> 00:20:07,386 >> АУДИТОРИЯ: Това ще да отпечатате екрана, толкова пъти, колкото искате. 427 00:20:07,386 --> 00:20:08,260 DAVID Malan: Точно така. 428 00:20:08,260 --> 00:20:10,480 Така че каквото и I думи въведете в командния ред, това е 429 00:20:10,480 --> 00:20:13,120 ще повръщам им към мен по един на ред. 430 00:20:13,120 --> 00:20:14,370 Така че нека да вървим напред и да направите това. 431 00:20:14,370 --> 00:20:17,862 Позволете ми да отида в моята директория и направи да argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 А сега, нека да го прости. 434 00:20:21,770 --> 00:20:23,834 Да не се прави нищо в началото. 435 00:20:23,834 --> 00:20:26,750 Тя направи разпечатате едно нещо, и това е наистина името на програмата, 436 00:20:26,750 --> 00:20:28,240 защото това е в скоба 0. 437 00:20:28,240 --> 00:20:33,290 Ако аз сега кажа Foo, тя ще направи тези двамата, и ако кажа, Foo бар, 438 00:20:33,290 --> 00:20:35,580 че ще каже на тези три неща. 439 00:20:35,580 --> 00:20:37,740 Сега това е малко по-интересно, може би. 440 00:20:37,740 --> 00:20:41,450 Но припомни, че argv е масив от низове, 441 00:20:41,450 --> 00:20:45,960 но низ е масив от символи, така че можем да вземем нещата с една степен 442 00:20:45,960 --> 00:20:48,560 и прилага този основен логика и да код, който 443 00:20:48,560 --> 00:20:51,160 изглежда малко по-загадъчен, разбира се. 444 00:20:51,160 --> 00:20:53,540 Но като вложено контур, нещо подобно 445 00:20:53,540 --> 00:20:57,030 на това, което може да си припомни от Марио, например, ако ти си го направил по този начин. 446 00:20:57,030 --> 00:21:00,380 >> Така че сега забележи по линия 19, аз съм отново итерации над моите аргументи, 447 00:21:00,380 --> 00:21:02,410 от 0 на до argc. 448 00:21:02,410 --> 00:21:05,510 И сега, в съответствие 21-- съм заеми трик от миналата week-- 449 00:21:05,510 --> 00:21:11,090 Аз съм проверка на това, което е дължина от argv скоба аз. 450 00:21:11,090 --> 00:21:12,920 Аз съм съхраняване на този отговор в п. 451 00:21:12,920 --> 00:21:18,230 И тогава аз съм интегриране от J на до п, където J е инициализира на 0. 452 00:21:18,230 --> 00:21:19,460 Така че, конвенция за броене. 453 00:21:19,460 --> 00:21:22,335 След като сте използвали аз, ако имате вложен цикъл, не можете да използвате отново, 454 00:21:22,335 --> 00:21:25,770 в противен случай ще смажат, потенциално, стойността извън вътрешния цикъл. 455 00:21:25,770 --> 00:21:27,200 Така че аз съм с J по договореност. 456 00:21:27,200 --> 00:21:28,020 Ние може да използваме к. 457 00:21:28,020 --> 00:21:31,080 Ако имате повече от к, най-вероятно има твърде много гнездене, обикновено. 458 00:21:31,080 --> 00:21:33,800 Но сега, забележете ми ФОРМАТ линия е малко по-различен. 459 00:21:33,800 --> 00:21:37,520 Аз не съм печат% S, аз съм печат% С, което, разбира се, 460 00:21:37,520 --> 00:21:39,460 е контейнер за Чар. 461 00:21:39,460 --> 00:21:40,770 >> И сега забележи този синтаксис. 462 00:21:40,770 --> 00:21:41,270 New. 463 00:21:41,270 --> 00:21:42,630 Не сме го виждали и преди. 464 00:21:42,630 --> 00:21:47,290 Но логично, това просто означава, получите низ Ith в argv 465 00:21:47,290 --> 00:21:50,067 и да получите jth какво? 466 00:21:50,067 --> 00:21:50,900 АУДИТОРИЯ: Character. 467 00:21:50,900 --> 00:21:52,800 DAVID Malan: Герой в този низ. 468 00:21:52,800 --> 00:21:57,100 Така че, с помощта на квадратни скоби последвано от квадратни скоби, 469 00:21:57,100 --> 00:22:00,390 това е симулация първо в низове argv е, 470 00:22:00,390 --> 00:22:02,225 и след това на второ квадратни скоби с J 471 00:22:02,225 --> 00:22:06,580 е да се гмурне в героите на че специално низ в argv. 472 00:22:06,580 --> 00:22:09,562 И тогава, само за добра мярка, Аз съм отпечатване на нов ред тук. 473 00:22:09,562 --> 00:22:12,020 Така че сега нека да вървим напред и да се отвори до малко по-голям прозорец 474 00:22:12,020 --> 00:22:13,600 така че можем да видим това в действие. 475 00:22:13,600 --> 00:22:15,700 Позволете ми да отида в тази папка. 476 00:22:15,700 --> 00:22:22,550 И сега правя направи argv-2-- whoops-- направи argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 И това е малко трудно да се чете вертикално, 479 00:22:24,860 --> 00:22:27,920 но това е наистина името на програма, последвано от един празен ред. 480 00:22:27,920 --> 00:22:30,210 Сега нека да вървим напред и да направим Foo. 481 00:22:30,210 --> 00:22:33,210 По същия начин е трудно да се чете, но това е наистина отпечатване един символ на ред. 482 00:22:33,210 --> 00:22:36,780 И ако го направя, бар, това е вече отпечатване на тези, ред по ред. 483 00:22:36,780 --> 00:22:40,140 Така на храна за вкъщи тук е не толкова че, уау, погледнете този чист нов трик 484 00:22:40,140 --> 00:22:44,750 където можете да получите в съдържанието на специфични знаци на даден масив, 485 00:22:44,750 --> 00:22:48,380 а по-скоро как ние сме като тези основни идеи като индексирането в масив, 486 00:22:48,380 --> 00:22:51,620 и след това в индексиране на масив, който е бил в този масив, 487 00:22:51,620 --> 00:22:56,180 и точно прилагане на едни и същи идеи за малко по-сложни примери. 488 00:22:56,180 --> 00:22:59,560 Но основите наистина не разполагат с променило, дори от миналата седмица. 489 00:22:59,560 --> 00:23:02,350 >> Сега това е нещо на своевременна, в това, че си спомняте, при нулева седмица 490 00:23:02,350 --> 00:23:04,110 играхме с телефон книга като тази. 491 00:23:04,110 --> 00:23:06,670 И въпреки че това е очевидно физически парчета хартия, 492 00:23:06,670 --> 00:23:09,150 можете да вид мисли за телефонния указател като масив. 493 00:23:09,150 --> 00:23:12,770 Разбира се, ако ви се налага да reimplement тази парчета тези хартийки 494 00:23:12,770 --> 00:23:15,260 в компютър, вероятно можете да използвате нещо 495 00:23:15,260 --> 00:23:20,270 като масив за съхранение на всички онези, имена и телефонни номера от целия път 496 00:23:20,270 --> 00:23:23,800 чрез Z. Така че това е хубаво, защото тя ни позволява възможност, 497 00:23:23,800 --> 00:23:28,310 може би, да се помисли как може да се реалното изпълнение на нещо подобно. 498 00:23:28,310 --> 00:23:31,250 Както при серия на врати тук. 499 00:23:31,250 --> 00:23:36,380 Така че, ако аз could-- ние се нуждаем един доброволци да идват нагоре. 500 00:23:36,380 --> 00:23:36,980 Нека да видим. 501 00:23:36,980 --> 00:23:40,650 Непознато лице може би, непознато лице може би. 502 00:23:40,650 --> 00:23:42,090 Какво ще кажете за в оранжево? 503 00:23:42,090 --> 00:23:42,680 Ето. 504 00:23:42,680 --> 00:23:45,870 Orange риза, хайде нагоре. 505 00:23:45,870 --> 00:23:52,230 >> Да вървим напред сега и ход тези врати над към страната, 506 00:23:52,230 --> 00:23:54,020 преместите тези от пътя за момент. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Как ти е името? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID Malan: Аджай. 511 00:23:58,655 --> 00:23:58,680 Дейвид. 512 00:23:58,680 --> 00:23:59,451 Приятно ми е да се запознаем. 513 00:23:59,451 --> 00:23:59,950 Добре. 514 00:23:59,950 --> 00:24:04,500 Така че ние имаме зад тези шест врати цифровото на screen-- 515 00:24:04,500 --> 00:24:07,810 Или по-скоро, седем врати на screen-- цял куп номера. 516 00:24:07,810 --> 00:24:10,099 И аз ти казах нищо в advance-- съгласи? 517 00:24:10,099 --> 00:24:11,140 AJAY: Нищо по-рано. 518 00:24:11,140 --> 00:24:14,730 DAVID Malan: Всичко, което искам да направя сега е да се намери за мен, и за нас, 519 00:24:14,730 --> 00:24:20,920 Наистина, броят на 50 г. една стъпка в даден момент. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Номер 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID Malan: Броят 50. 522 00:24:22,580 --> 00:24:24,746 И вие може да разкрие какво е зад всяка от тези врати 523 00:24:24,746 --> 00:24:27,930 просто като го докосва с пръст. 524 00:24:27,930 --> 00:24:31,364 Дявол да го вземе. [СМЯХ] 525 00:24:31,364 --> 00:24:34,560 >> [APPLAUSE] 526 00:24:34,560 --> 00:24:39,540 >> Много добре направено. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Имаме прекрасен подарък награда за теб тук. 529 00:24:44,090 --> 00:24:46,520 Своя избор на филми ние обсъдени миналата седмица. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: О, човече. 531 00:24:47,362 --> 00:24:49,050 О, аз никога не съм виждал Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID Malan: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Добре. 534 00:24:50,140 --> 00:24:53,790 Така че държи само на един момент. 535 00:24:53,790 --> 00:24:57,430 How-- нека направим това а поучаем moment-- 536 00:24:57,430 --> 00:25:00,412 как да отида за намиране на броя 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Избрах произволно. 538 00:25:01,370 --> 00:25:03,420 DAVID Malan: Значи вие избрахте случайно и имам късмет. 539 00:25:03,420 --> 00:25:03,790 AJAY: Да. 540 00:25:03,790 --> 00:25:04,456 DAVID Malan: OK. 541 00:25:04,456 --> 00:25:05,050 Отлично. 542 00:25:05,050 --> 00:25:08,470 Така че сега, не трябваше ли намерила късмет, какво друго 543 00:25:08,470 --> 00:25:10,210 може да се е случило зад тези врати? 544 00:25:10,210 --> 00:25:12,930 Така че, ако аз отида напред и разкрие тези номера тук, 545 00:25:12,930 --> 00:25:15,180 те всъщност са в произволен ред. 546 00:25:15,180 --> 00:25:17,750 И най-доброто което може да има направено, честно казано, е чрез, в крайна сметка, 547 00:25:17,750 --> 00:25:19,410 в най-лошия случай ги проверявам. 548 00:25:19,410 --> 00:25:23,000 Така че имаш супер късмет, който Не е това, което ние ще се обади един алгоритъм. 549 00:25:23,000 --> 00:25:24,730 Да, поздравления. 550 00:25:24,730 --> 00:25:27,010 Но сега let's-- хумор ме, ако можеш. 551 00:25:27,010 --> 00:25:28,310 Да отидем в този раздел тук. 552 00:25:28,310 --> 00:25:31,460 И тук са числата в ясно това, което изглежда да е случаен ред, 553 00:25:31,460 --> 00:25:32,280 и те бяха. 554 00:25:32,280 --> 00:25:35,160 Но сега, ако аз вместо иск че зад тези врати 555 00:25:35,160 --> 00:25:39,070 са числа, които са сортирани. 556 00:25:39,070 --> 00:25:41,780 Целта сега е също ни намерите броя 50. 557 00:25:41,780 --> 00:25:45,910 Но го направи алгоритмично, и да ни кажете как ще за него. 558 00:25:45,910 --> 00:25:48,020 И ако го намеря, ви държи на филма. 559 00:25:48,020 --> 00:25:49,520 Вие не го определят, ти го върна. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Така че аз отивам да се провери краищата Първо, за да се определи дали there's-- 562 00:25:58,112 --> 00:26:02,048 [Смях и APPLAUSE] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID Malan: Заповядай. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Нека да разгледаме един на предшествениците Аджай е, 567 00:26:21,700 --> 00:26:25,450 Шон, който не е бил чак толкова късмет. 568 00:26:25,450 --> 00:26:28,670 ОК, така че вашата задача тук, Шон, е следното. 569 00:26:28,670 --> 00:26:32,970 I са скрити зад тях врати на числото седем, 570 00:26:32,970 --> 00:26:37,200 но закътано в някои от тези врати , както и други не-отрицателни числа. 571 00:26:37,200 --> 00:26:40,730 И целта ви е да се мисли за това най-горния ред на номерата като само един масив. 572 00:26:40,730 --> 00:26:43,590 Ние сме просто поредица от парчета хартия с номера, които стоят зад тях. 573 00:26:43,590 --> 00:26:47,640 И целта ви е, само с помощта на върха масив тук, да ме намери на числото седем. 574 00:26:47,640 --> 00:26:51,200 И ние тогава ще критикуваме как да отидете за да го прави. 575 00:26:51,200 --> 00:26:52,920 Намерете ни на числото седем, моля. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 No. 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 Това не е подвеждащ въпрос. 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 В този момент резултатът ви не е много добре, така че може и да продължаваш напред. 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 Продължавай. 590 00:27:39,802 --> 00:27:42,510 Честно казано, аз не мога да помогна, но се чудя това, което дори и да мисля за. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Мога да взема само от най-горния ред. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Само най-горния ред. 593 00:27:46,240 --> 00:27:47,281 Така че имаш три ляво. 594 00:27:47,281 --> 00:27:48,310 Така ме намери 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [АУДИТОРИЯ викове ПРЕДЛОЖЕНИЯ] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Така че и двете от тях бяха невероятно за много различни причини. 599 00:28:26,130 --> 00:28:29,150 Така че това е мястото, където ние спряло преди малко, 600 00:28:29,150 --> 00:28:32,530 и ключовото прозрение тук е тези врати имаха номера 601 00:28:32,530 --> 00:28:37,390 зад тях, които са били подредени, идеала храна за вкъщи, за което е, че бихте могли да направите 602 00:28:37,390 --> 00:28:39,670 фундаментално по-добре в втората example-- 603 00:28:39,670 --> 00:28:42,380 и, разбира се, това беше Шон Първият опит със случайни числа 604 00:28:42,380 --> 00:28:45,460 точно както before-- но щом тъй като тези числа се сортират, 605 00:28:45,460 --> 00:28:47,980 много прилича на телефонния указател, какво може да ви очевидно направя? 606 00:28:47,980 --> 00:28:50,090 Или как може да се възползва, че знанието? 607 00:28:50,090 --> 00:28:51,530 Да. 608 00:28:51,530 --> 00:28:54,910 >> АУДИТОРИЯ: Отиваш наполовина [недоловим]. 609 00:28:54,910 --> 00:28:55,660 DAVID Malan: Да. 610 00:28:55,660 --> 00:28:56,160 Точно така. 611 00:28:56,160 --> 00:28:59,680 Така първоначалната инстинкт Аджай беше за проверка на краищата, доколкото си спомням, 612 00:28:59,680 --> 00:29:02,320 и тогава ние някак завършен пример бързо. 613 00:29:02,320 --> 00:29:05,220 Но ако ние започнахме да правим това по- методично по тези линии, 614 00:29:05,220 --> 00:29:07,860 но като се започне може би в средна, защото те са подредени, 615 00:29:07,860 --> 00:29:10,900 веднага щом се разкрие номер 16, ние следователно знам-- 616 00:29:10,900 --> 00:29:14,850 и нека направим точно че-- ние Затова знам, че 50, в днешния случай, 617 00:29:14,850 --> 00:29:16,080 трябва да е в дясно. 618 00:29:16,080 --> 00:29:18,735 Така че точно като в нула, когато седмица ние разкъса телефонния указател на половина 619 00:29:18,735 --> 00:29:21,490 и хвърли половината от проблем далеч, същата идея тук. 620 00:29:21,490 --> 00:29:23,680 Ние може да се хвърли в това полувреме на проблема далеч. 621 00:29:23,680 --> 00:29:25,730 И вероятно това, което ви може да направи алгоритмично, 622 00:29:25,730 --> 00:29:28,710 след като знаете, че 50 трябва да бъде надясно, ако е навсякъде, 623 00:29:28,710 --> 00:29:31,390 е да се опитаме там, в средата на останалите врати. 624 00:29:31,390 --> 00:29:33,450 Разбира се, 50 е по-висока от 42, така че ние може да 625 00:29:33,450 --> 00:29:36,060 хвърлят тази оставаща тримесечие на проблема далеч, 626 00:29:36,060 --> 00:29:38,510 и, накрая, да се идентифицират нещо като 50. 627 00:29:38,510 --> 00:29:41,050 Но точно както с телефонния указател, тези номера 628 00:29:41,050 --> 00:29:44,560 бяха дадени, за да ни вече в Подредено заповед, която ни оставя 629 00:29:44,560 --> 00:29:47,450 с въпроса, как го правиш нещата в подредени поръчка? 630 00:29:47,450 --> 00:29:49,640 И, честно казано, на каква цена? 631 00:29:49,640 --> 00:29:51,390 Това е едно нещо, за да бъде връчи на телефонния указател 632 00:29:51,390 --> 00:29:54,810 и след това впечатлите приятелите си чрез намиране на телефонен номер, наистина бързо, нали? 633 00:29:54,810 --> 00:29:58,520 Разкъсването 32 страници, за да се намери човек от 4 милиарда страници, 634 00:29:58,520 --> 00:30:00,470 казахме, беше един краен пример. 635 00:30:00,470 --> 00:30:03,320 Но колко време ви отне Verizon да сортирате този телефон книга? 636 00:30:03,320 --> 00:30:06,170 Колко време ни отне да сортирате тези седем числа? 637 00:30:06,170 --> 00:30:10,110 Това е един въпрос, който сме до този момент напълно игнорирани. 638 00:30:10,110 --> 00:30:12,330 >> Така че нека да се отговори на този въпрос сега. 639 00:30:12,330 --> 00:30:15,920 И всички ние сме изложени на филми сега, но ние имаме някои стрес топки. 640 00:30:15,920 --> 00:30:19,480 Ако, да речем, осем доброволци не би имал нищо против присъедини към нас тук? 641 00:30:19,480 --> 00:30:24,100 Да вървим напред и да правим, какво ще кажеш за на четири от вас, три от вас тук? 642 00:30:24,100 --> 00:30:25,290 Вземи някои нови лица. 643 00:30:25,290 --> 00:30:27,220 И четиримата там ли си? 644 00:30:27,220 --> 00:30:30,760 И сега-- не е пристрастие нека тук-- и номер осем тук на края. 645 00:30:30,760 --> 00:30:32,060 Хайде нагоре. 646 00:30:32,060 --> 00:30:32,560 Добре. 647 00:30:32,560 --> 00:30:37,480 Така че това, което имаме тук, за всеки от вас е номер. 648 00:30:37,480 --> 00:30:40,055 Ако искате да отидете напред, да вземе този номер. 649 00:30:40,055 --> 00:30:40,763 Как ти е името? 650 00:30:40,763 --> 00:30:41,950 >> Арти: Арти. 651 00:30:41,950 --> 00:30:43,100 >> DAVID Malan: Арти, добре. 652 00:30:43,100 --> 00:30:44,297 Ти си номер едно. 653 00:30:44,297 --> 00:30:45,310 >> Amin: Амин. 654 00:30:45,310 --> 00:30:46,060 DAVID Malan: Амин. 655 00:30:46,060 --> 00:30:46,820 Дейвид. 656 00:30:46,820 --> 00:30:47,530 Ти си номер 2. 657 00:30:47,530 --> 00:30:49,100 И давай, както аз ръка вие листовете хартия, 658 00:30:49,100 --> 00:30:52,130 подредят сами в предната част на музиката стои в същия ред, като до там. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hi, Анди. 660 00:30:52,660 --> 00:30:53,970 >> DAVID Malan: Анди, това е хубаво да те видя. 661 00:30:53,970 --> 00:30:54,520 Номер 3. 662 00:30:54,520 --> 00:30:55,310 >> Яков: Яков. 663 00:30:55,310 --> 00:30:56,760 >> DAVID Malan: Jacob, номер 4. 664 00:30:56,760 --> 00:30:57,549 Добре дошли на борда. 665 00:30:57,549 --> 00:30:58,090 ГРАНТ: Грант. 666 00:30:58,090 --> 00:30:58,881 DAVID Malan: Грант. 667 00:30:58,881 --> 00:31:00,348 Номер 5. 668 00:31:00,348 --> 00:31:01,200 >> Алана: Алана. 669 00:31:01,200 --> 00:31:02,766 >> DAVID Malan: Алана, номер 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID Malan: Frances, номер 7. 672 00:31:04,880 --> 00:31:05,200 И? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Рейчъл. 674 00:31:05,830 --> 00:31:06,815 >> DAVID Malan: Рейчъл, номер 8. 675 00:31:06,815 --> 00:31:07,100 Добре. 676 00:31:07,100 --> 00:31:08,766 Давай напред и да получите себе си в този ред. 677 00:31:08,766 --> 00:31:11,440 Позволете ми да сложа една оставащото музика застане на мястото си. 678 00:31:11,440 --> 00:31:13,670 Когато имате нужда от стойка? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Давай напред и просто да сложиш номера където публиката може да ги видите на, 681 00:31:18,710 --> 00:31:20,340 музиката стои изправена навън. 682 00:31:20,340 --> 00:31:27,240 И се надяваме, че нашата първа проверка здрав разум тук-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 О-о. 684 00:31:27,890 --> 00:31:29,070 Чакайте малко. 685 00:31:29,070 --> 00:31:31,140 Ние не разполагаме с 8. 686 00:31:31,140 --> 00:31:35,180 Трябва да ви изгони от примера по някакъв начин. 687 00:31:35,180 --> 00:31:35,680 No. 688 00:31:35,680 --> 00:31:36,940 Не, това е ОК. 689 00:31:36,940 --> 00:31:37,890 Нека да видим. 690 00:31:37,890 --> 00:31:38,880 Ние можем да направим това. 691 00:31:38,880 --> 00:31:39,440 Изчакайте. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Там отиваме. 694 00:31:45,740 --> 00:31:46,800 Правилно. 695 00:31:46,800 --> 00:31:47,360 Добре. 696 00:31:47,360 --> 00:31:50,260 Така че, сега имаме 8, 1, 3, 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Отлично. 699 00:31:51,360 --> 00:31:54,400 >> Така че въпросът е на една ръка разстояние, при каква цена, и чрез какъв метод, 700 00:31:54,400 --> 00:31:58,580 всъщност можем да сортирате тези номера тук така че можем да вид работа назад, 701 00:31:58,580 --> 00:32:02,759 в крайна сметка, и decide-- това е наистина впечатляващ, това е наистина ефективна, 702 00:32:02,759 --> 00:32:04,550 че мога да се делят и завладяване на телефонния указател? 703 00:32:04,550 --> 00:32:06,716 Наистина ли е ефективен Мога да разделяй и владей 704 00:32:06,716 --> 00:32:08,600 тези цифрови парчета хартия на дъската, 705 00:32:08,600 --> 00:32:14,500 ако може би това ще ни струва състояние по време или цикъла на енергия или на процесора 706 00:32:14,500 --> 00:32:17,340 да се получи в действителност нашите данни в някои сортиран ред? 707 00:32:17,340 --> 00:32:18,930 Така че нека да зададеш този въпрос. 708 00:32:18,930 --> 00:32:22,077 >> Така че първото изключване, тези номера са в почти произволен ред, 709 00:32:22,077 --> 00:32:24,160 и аз отивам да предложи един алгоритъм, или процес 710 00:32:24,160 --> 00:32:25,970 от които можем да сортирате тези хора. 711 00:32:25,970 --> 00:32:28,100 Отивам да се приближим това доста наивно. 712 00:32:28,100 --> 00:32:30,730 И аз отивам да се признае, че това е вид много за мен 713 00:32:30,730 --> 00:32:32,890 да приключи съзнанието ми около определени наведнъж цели данни. 714 00:32:32,890 --> 00:32:33,640 Но знаете ли какво? 715 00:32:33,640 --> 00:32:37,450 Отивам да се направят някои много прости маргинални поправки. 716 00:32:37,450 --> 00:32:41,152 4 и 2 са изложени на нареждане, ако цел е да се премине от един на до 8. 717 00:32:41,152 --> 00:32:41,860 И знаеш ли какво? 718 00:32:41,860 --> 00:32:43,776 Отивам да имате момчета разменят, ако превключите 719 00:32:43,776 --> 00:32:46,380 физически позиции и от вашите фигури от хартия. 720 00:32:46,380 --> 00:32:47,894 Сега 4 и 6, те са в ред. 721 00:32:47,894 --> 00:32:49,060 Отивам да напусне онези бъде. 722 00:32:49,060 --> 00:32:50,227 6 и 8, тези, които са в ред. 723 00:32:50,227 --> 00:32:51,185 Отивате да напусне ги бъде. 724 00:32:51,185 --> 00:32:52,170 8 и1, от ред. 725 00:32:52,170 --> 00:32:54,790 Ако вие двамата не би имал нищо против смяна. 726 00:32:54,790 --> 00:32:57,300 Сега 8 и 3, ако вие може да си разменят. 727 00:32:57,300 --> 00:32:59,320 8 и 7, ако вие може да си разменят. 728 00:32:59,320 --> 00:33:01,790 И осем и пет, ако вие може да си разменят. 729 00:33:01,790 --> 00:33:03,980 >> Сега, аз съм направил? 730 00:33:03,980 --> 00:33:05,200 Не, очевидно не. 731 00:33:05,200 --> 00:33:07,880 Но аз не съм направил ситуация по-добре, нали? 732 00:33:07,880 --> 00:33:09,430 Какво ти беше името, номер 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Рейчъл. 734 00:33:10,055 --> 00:33:12,850 DAVID Malan: Значи Рейчъл има ефективно бълбукаше доста далеч, 735 00:33:12,850 --> 00:33:15,660 чак до края на ми масив от числа тук. 736 00:33:15,660 --> 00:33:17,310 И така, този проблем е вид решен. 737 00:33:17,310 --> 00:33:21,670 Сега, очевидно, две все още трябва да преместите малко, и 4 и 6 и 1. 738 00:33:21,670 --> 00:33:24,420 Но аз изглежда да са придобили малко по-близо до решение. 739 00:33:24,420 --> 00:33:26,790 Така че нека да прилага същата тази наивна евристичен отново. 740 00:33:26,790 --> 00:33:27,690 2 и 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 и 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 и 1 мм мм. 743 00:33:29,930 --> 00:33:32,230 Нека суап. 744 00:33:32,230 --> 00:33:33,200 6 и 3 мм мм. 745 00:33:33,200 --> 00:33:34,420 Нека суап. 746 00:33:34,420 --> 00:33:35,580 6 и 7 е OK. 747 00:33:35,580 --> 00:33:36,590 7 и 5, Не. 748 00:33:36,590 --> 00:33:37,790 Нека суап. 749 00:33:37,790 --> 00:33:38,470 И сега, 7 и 8. 750 00:33:38,470 --> 00:33:39,862 А какво е твоето име отново? 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 Така че сега Frances е в още по-добра позиция, защото сега 7 и 8 754 00:33:44,230 --> 00:33:46,440 са правилно разпенва до върха. 755 00:33:46,440 --> 00:33:47,510 Така че, 2 и 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 и 1, суап Да. 757 00:33:48,720 --> 00:33:50,410 4 и 3, суап Да. 758 00:33:50,410 --> 00:33:51,550 4 и 6, ти си OK. 759 00:33:51,550 --> 00:33:53,340 6 и 5, суап Да. 760 00:33:53,340 --> 00:33:54,590 И сега тези момчета са добри. 761 00:33:54,590 --> 00:33:55,780 Ние сме почти там. 762 00:33:55,780 --> 00:33:57,706 2 и 1, в ред, така че сменяте. 763 00:33:57,706 --> 00:33:59,080 А сега нека да направи проверка на здрав разум. 764 00:33:59,080 --> 00:34:03,080 2 и 3, 3 и 4, 4 и 5, 5 и 6, 6 и 7, 8. 765 00:34:03,080 --> 00:34:05,060 ОК, така че сме готови. 766 00:34:05,060 --> 00:34:09,310 >> Но на каква цена го направих сортирате тези номера тук? 767 00:34:09,310 --> 00:34:13,960 Е, колко стъпки направих потенциално предприемат при сортиране тези хора? 768 00:34:13,960 --> 00:34:15,710 Е, ние ще се върнем към този въпрос. 769 00:34:15,710 --> 00:34:18,030 Но, честно казано, ако имаш малко скучно, това е 770 00:34:18,030 --> 00:34:22,270 вид, разкриващи в че това не е Може би най-ефективен алгоритъм. 771 00:34:22,270 --> 00:34:25,230 И наистина, честно казано, аз се потя още по-ходене напред-назад. 772 00:34:25,230 --> 00:34:26,639 Това не се чувствам особено ефективен. 773 00:34:26,639 --> 00:34:27,805 Така че нека да опитаме нещо друго. 774 00:34:27,805 --> 00:34:31,870 Ако вие може да възстановите себе си на тези осем ценности. 775 00:34:31,870 --> 00:34:32,969 Добра работа. 776 00:34:32,969 --> 00:34:36,570 >> Нека да разгледаме по електронен път за просто миг преди да опитам нещо друго, 777 00:34:36,570 --> 00:34:38,179 в какво точно се е случило. 778 00:34:38,179 --> 00:34:41,330 До тук, вие сте на път да видите визуализация на тези осем човека 779 00:34:41,330 --> 00:34:44,719 при която в синьо и червено барове представляват номера. 780 00:34:44,719 --> 00:34:46,670 Най-високият бара, С увеличаването на броя. 781 00:34:46,670 --> 00:34:48,510 Колкото по-малко на бара, толкова по-малък номер. 782 00:34:48,510 --> 00:34:51,560 И това, което ще видите, е в произволен ред повече от осем от тях. 783 00:34:51,560 --> 00:34:55,830 Ще видите тези барове Първи сортирано по същия алгоритъм, 784 00:34:55,830 --> 00:34:59,890 или набор от инструкции, които ние ще се обадя оттук нататък балон вид. 785 00:34:59,890 --> 00:35:04,000 Така забележите, всяка секунда, или така, два бара светят в червено, 786 00:35:04,000 --> 00:35:05,590 се сравняват от компютъра. 787 00:35:05,590 --> 00:35:08,630 И след това, ако голямата бара и малък бар са в ред, 788 00:35:08,630 --> 00:35:11,220 те се разменя за мен. 789 00:35:11,220 --> 00:35:15,120 >> Сега това е изключително досаден да гледате, разбира се, 790 00:35:15,120 --> 00:35:18,630 за много дълго, но забележите, че takeaway-- големите барове, които се движат в дясно, 791 00:35:18,630 --> 00:35:20,460 малките барове, които се движат в ляво. 792 00:35:20,460 --> 00:35:23,380 Да прекратим този процес и ускоряването на този процес 793 00:35:23,380 --> 00:35:27,330 да бъде много по-бързо, за да можем да получите усещане за това какво на високо равнище, 794 00:35:27,330 --> 00:35:29,970 наистина, балон вид се прави. 795 00:35:29,970 --> 00:35:33,150 В действителност, това е кипял до дясната страна на списъка, 796 00:35:33,150 --> 00:35:35,260 или масива, по-големите барове. 797 00:35:35,260 --> 00:35:40,020 И обратното, малките барове са ври пътя си надолу вляво, 798 00:35:40,020 --> 00:35:42,950 макар и с по-бързи темпове отколкото ние по-рано е направил. 799 00:35:42,950 --> 00:35:45,850 Така че, по-трудно да се види с хората, но визуално, че е наистина това, което 800 00:35:45,850 --> 00:35:46,540 се случва. 801 00:35:46,540 --> 00:35:49,110 >> Но нека се опитаме фундаментално различен подход сега. 802 00:35:49,110 --> 00:35:52,387 Нека се опитаме различен алгоритъм, чрез което имате 803 00:35:52,387 --> 00:35:59,640 момчета започват в тези оригинални позиции, на която беше тази поръчка тук. 804 00:35:59,640 --> 00:36:00,827 И да вървим напред сега. 805 00:36:00,827 --> 00:36:02,910 И аз отивам да направя нещо още по-лесно, нали? 806 00:36:02,910 --> 00:36:06,710 В ретроспекция, смяна на двойки отново и отново, почти малко умен. 807 00:36:06,710 --> 00:36:10,460 Нека да направим нещата още по-наивно, където, ако искам да сортирате тези хора, 808 00:36:10,460 --> 00:36:12,560 нека просто продължавайте да търсите за най-малкия елемент. 809 00:36:12,560 --> 00:36:14,570 Така че точно сега, 4 е най-малкият брой съм виждал. 810 00:36:14,570 --> 00:36:15,695 Отивам да си спомня това. 811 00:36:15,695 --> 00:36:17,750 Не, две е по-добре, и не забравяйте това. 812 00:36:17,750 --> 00:36:20,730 1 е още по-малък. 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 Едно-- какво ти е името? 816 00:36:23,750 --> 00:36:24,400 >> Арти: Арти. 817 00:36:24,400 --> 00:36:24,610 >> DAVID Malan: Арти. 818 00:36:24,610 --> 00:36:25,460 Така че, Арти, давай напред. 819 00:36:25,460 --> 00:36:27,043 Отивам да ви извадя на линията. 820 00:36:27,043 --> 00:36:28,400 Ако можеше да се върна тук. 821 00:36:28,400 --> 00:36:30,790 И аз трябва да се направи място за него. 822 00:36:30,790 --> 00:36:32,040 Имаме точка решение тук. 823 00:36:32,040 --> 00:36:36,000 Как бихме могли да направим място за Арти тук в началото, когато номер едно принадлежи? 824 00:36:36,000 --> 00:36:36,770 >> АУДИТОРИЯ: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID Malan: ОК, ние може да се измести всички. 826 00:36:38,950 --> 00:36:40,860 Но предлагаме оптимизация. 827 00:36:40,860 --> 00:36:43,410 Това се чувства малко досадно за мен да попитам четирима души 828 00:36:43,410 --> 00:36:44,620 да се движат по целия път надолу. 829 00:36:44,620 --> 00:36:45,520 Какво друго можех да направя? 830 00:36:45,520 --> 00:36:46,360 >> АУДИТОРИЯ: ги включите. 831 00:36:46,360 --> 00:36:46,850 >> DAVID Malan: ги включите. 832 00:36:46,850 --> 00:36:47,900 А какво е твоето име отново? 833 00:36:47,900 --> 00:36:48,441 >> Яков: Яков. 834 00:36:48,441 --> 00:36:50,330 DAVID Malan: Jacob, преместете. 835 00:36:50,330 --> 00:36:54,440 Много по-ефективно, само за да има Места Джейкъб суап с Арти, 836 00:36:54,440 --> 00:36:56,710 за разлика от принуждавайки всички четири от тези хора, 837 00:36:56,710 --> 00:36:58,734 благодаря ви много, за да правилното им положение. 838 00:36:58,734 --> 00:37:01,150 Какво е хубаво за Арти сега, той е в правилната му позиция. 839 00:37:01,150 --> 00:37:02,060 Да го направим отново. 840 00:37:02,060 --> 00:37:03,730 2, това е най-малкият брой съм виждал. 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 определено е най-малкият. 844 00:37:07,467 --> 00:37:08,550 Не трябва да се направи някаква работа. 845 00:37:08,550 --> 00:37:09,320 Да го направим отново. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Най-малък? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Не. 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 Нека се помни 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Нека се помни 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Най-малък брой Нямам се вижда на този пропуск е 3. 857 00:37:18,490 --> 00:37:20,340 Ако искате излез. 858 00:37:20,340 --> 00:37:21,986 Къде отиваме да сложите? 859 00:37:21,986 --> 00:37:22,860 А какво е твоето име? 860 00:37:22,860 --> 00:37:23,530 >> Алана: Алана. 861 00:37:23,530 --> 00:37:25,780 >> DAVID Malan: Алана, ние сме Ще трябва да ви изгони. 862 00:37:25,780 --> 00:37:28,670 Но това е по-ефективен, просто да сменяте двама души, 863 00:37:28,670 --> 00:37:31,850 отколкото да имаш много хора всъщност заобикалям свърши. 864 00:37:31,850 --> 00:37:32,850 Сега нека да направим това отново. 865 00:37:32,850 --> 00:37:34,980 Отивам да изберете 4, така че хайде навън. 866 00:37:34,980 --> 00:37:36,540 И кой ще се движат? 867 00:37:36,540 --> 00:37:37,750 Номер 8, разбира се. 868 00:37:37,750 --> 00:37:40,260 Ако аз сега намерите номер 5, хайде навън. 869 00:37:40,260 --> 00:37:42,104 Номер 8 ще се изгонени отново. 870 00:37:42,104 --> 00:37:43,770 Аз съм сега ще намерите номер 6 в място. 871 00:37:43,770 --> 00:37:44,410 7 в място. 872 00:37:44,410 --> 00:37:45,080 8 в място. 873 00:37:45,080 --> 00:37:48,590 >> Това, което току-що е направил в момента е нещо, наречено избор на сортиране, 874 00:37:48,590 --> 00:37:52,560 и ако ние се визуализира това, че е ще се чувствам малко по-различно. 875 00:37:52,560 --> 00:37:56,800 Да вървим напред и от тази меню тук, това visualization-- 876 00:37:56,800 --> 00:38:02,920 Нека променим това да-- хайде, Firefox. 877 00:38:02,920 --> 00:38:07,610 Нека да променим това, за да избор на сортиране. 878 00:38:07,610 --> 00:38:11,830 И нека да го ускори, както и преди, и да започне визуализацията сега. 879 00:38:11,830 --> 00:38:13,990 И този алгоритъм има различно усещане за него. 880 00:38:13,990 --> 00:38:16,480 На всяка итерация, честно казано, това е още по-лесно. 881 00:38:16,480 --> 00:38:18,385 Аз съм просто избор на най-малкия елемент. 882 00:38:18,385 --> 00:38:21,510 Сега, честно казано, аз имам малко късмет, че време, с това, че сортирани супер-бързо. 883 00:38:21,510 --> 00:38:22,660 Елементите са случайни. 884 00:38:22,660 --> 00:38:25,520 Това не е, както ще в крайна сметка виж, фундаментално по-бързо. 885 00:38:25,520 --> 00:38:29,400 Но нека да видим една трета и последна подходим тук за това какво се случва. 886 00:38:29,400 --> 00:38:36,230 Така че нека да вървим напред и да ви изчисти момчета една крайно време да бъде в този ред тук. 887 00:38:36,230 --> 00:38:38,450 >> И сега, аз отивам да да е малко по-умен, 888 00:38:38,450 --> 00:38:40,220 просто да закръглят нашите алгоритми. 889 00:38:40,220 --> 00:38:41,230 Отивам да направя това. 890 00:38:41,230 --> 00:38:43,140 Отивам да не отида назад и напред толкова много. 891 00:38:43,140 --> 00:38:44,900 Честно казано, аз съм уморен от всичко това обхождане. 892 00:38:44,900 --> 00:38:47,691 Аз съм просто ще вземе това, което съм даден в началото на списъка 893 00:38:47,691 --> 00:38:49,460 и аз отивам да сортирате че тогава и там. 894 00:38:49,460 --> 00:38:50,140 Така че ние сме тук. 895 00:38:50,140 --> 00:38:51,030 Номер 4. 896 00:38:51,030 --> 00:38:53,680 Отивам да въведете номера 4 подредени в списък. 897 00:38:53,680 --> 00:38:54,180 Готово. 898 00:38:54,180 --> 00:38:58,300 Аз твърдя, сега, и само за да стане това по- ясно, тази част от моя списък е сортиран. 899 00:38:58,300 --> 00:39:02,610 Това е нещо глупаво твърдение, но наистина 4 се подредени в списък с размер един. 900 00:39:02,610 --> 00:39:04,210 Сега, аз отивам да поеме номер 2. 901 00:39:04,210 --> 00:39:07,670 Номер 2 Аз съм сега ще поставете в правилното място. 902 00:39:07,670 --> 00:39:08,680 Е, къде е 2 принадлежи? 903 00:39:08,680 --> 00:39:09,824 Очевидно е, че тук. 904 00:39:09,824 --> 00:39:11,490 Така че продължавайте напред и да се премести назад, ако можех. 905 00:39:11,490 --> 00:39:14,406 И защо не, момчета просто вземат музиката си стои с вас този път. 906 00:39:14,406 --> 00:39:17,020 И оставим насилствено вмъкнете в началото на списъка. 907 00:39:17,020 --> 00:39:17,936 Така че малко повече работа. 908 00:39:17,936 --> 00:39:20,890 Аз трябваше да се движат Jacob наоколо, и какво е вашето име? 909 00:39:20,890 --> 00:39:21,420 >> Amin: Амин. 910 00:39:21,420 --> 00:39:22,270 >> DAVID Malan: Амин. 911 00:39:22,270 --> 00:39:24,350 Но поне аз не отиде назад и напред. 912 00:39:24,350 --> 00:39:25,739 Аз съм просто като неща, като отида. 913 00:39:25,739 --> 00:39:27,530 Аз просто ги поставяте на правилното място. 914 00:39:27,530 --> 00:39:29,220 6, това всъщност е доста лесно. 915 00:39:29,220 --> 00:39:31,510 Нека да поставите там, ако сте Просто исках да се движат над леко. 916 00:39:31,510 --> 00:39:32,870 Номер 8, също е доста лесно. 917 00:39:32,870 --> 00:39:33,741 Точно там. 918 00:39:33,741 --> 00:39:34,240 Дявол да го вземе. 919 00:39:34,240 --> 00:39:37,590 Номер едно, че не можем просто суап с Amin тук, 920 00:39:37,590 --> 00:39:39,340 защото това се случва да се забъркваш поръчката. 921 00:39:39,340 --> 00:39:40,660 Така че ние трябва да бъдем малко по-умен. 922 00:39:40,660 --> 00:39:42,770 Така че, Арти, ако бихте могли да резервно копие за миг. 923 00:39:42,770 --> 00:39:46,550 Да вървим напред и да се измести сега, за разлика от предишните ни алгоритми, 924 00:39:46,550 --> 00:39:50,910 за да направи място за Арти точно тук в началото. 925 00:39:50,910 --> 00:39:54,690 Така че в края на деня, аз съм вид правят това, което аз исках да се избегне преди. 926 00:39:54,690 --> 00:39:57,770 И така ми алгоритъм е нещо на обърната, интелектуално, 927 00:39:57,770 --> 00:39:59,070 от това, което първоначално е било. 928 00:39:59,070 --> 00:40:01,240 Просто правя изместването в друга точка. 929 00:40:01,240 --> 00:40:02,291 Сега съм на 3. 930 00:40:02,291 --> 00:40:02,790 О, по дяволите. 931 00:40:02,790 --> 00:40:04,039 Трябва да направим повече работа отново. 932 00:40:04,039 --> 00:40:05,060 Така че нека да ви пускам. 933 00:40:05,060 --> 00:40:09,360 Нека преминем 8, 6, 4-- о ОН-и 3 се ще да отида точно там. 934 00:40:09,360 --> 00:40:11,490 Така че най-малко незначителни икономии на този път. 935 00:40:11,490 --> 00:40:13,100 7, не е твърде много работа да се свърши. 936 00:40:13,100 --> 00:40:15,370 Така че, ако искате да се появи Обратно, нека да вмъкнете. 937 00:40:15,370 --> 00:40:17,440 И накрая, 5, ако Искам да поп обратно, ние 938 00:40:17,440 --> 00:40:22,610 Трябва да ти се измести, ти, ви, докато пет е на мястото си. 939 00:40:22,610 --> 00:40:25,670 >> Така че сега, за да видите това на високо ниво графично, 940 00:40:25,670 --> 00:40:31,080 нека да направим този алгоритъм визуализация едно допълнително време. 941 00:40:31,080 --> 00:40:33,580 Така че това ще наричаме вмъкване вид. 942 00:40:33,580 --> 00:40:37,700 Ние ще го изпълним просто като бързо, и да го започнете от тук. 943 00:40:37,700 --> 00:40:39,580 И също има различно усещане. 944 00:40:39,580 --> 00:40:42,180 Това е нещо все по-добре и по-добре, но тя никога не е перфектен 945 00:40:42,180 --> 00:40:44,630 докато вляза и гладка в тези пропуски. 946 00:40:44,630 --> 00:40:47,860 Защото, отново, аз съм само като това, което Аз съм се дава от ляво на дясно. 947 00:40:47,860 --> 00:40:50,350 Така че аз не се получи толкова щастлив че всичко е перфектно. 948 00:40:50,350 --> 00:40:54,190 Ето защо ние трябваше тези малки mispositions че ние фиксирани във времето. 949 00:40:54,190 --> 00:40:58,890 >> Така че всички тези алгоритми изглежда се движи с малко по-различни крачки. 950 00:40:58,890 --> 00:41:02,030 В действителност, което ще ви кажа, е, най-доброто или най-бързият досега? 951 00:41:02,030 --> 00:41:03,450 Bubble вид, на първо? 952 00:41:03,450 --> 00:41:05,000 Избор на вид, на втория? 953 00:41:05,000 --> 00:41:08,450 Insertion вид, третият? 954 00:41:08,450 --> 00:41:10,710 Чух, че някои видове подбор. 955 00:41:10,710 --> 00:41:13,280 Други мисли? 956 00:41:13,280 --> 00:41:16,880 >> Така се оказва, че Всички тези алгоритми 957 00:41:16,880 --> 00:41:22,400 са коренно също толкова ефективни като всеки друг свят-- или, обратно, точно както 958 00:41:22,400 --> 00:41:25,980 неефективно като всеки друг, защото можем да направим фундаментално 959 00:41:25,980 --> 00:41:28,120 по-добре от всички три на тези алгоритми. 960 00:41:28,120 --> 00:41:29,990 И това е малко на една бяла лъжа, също. 961 00:41:29,990 --> 00:41:32,580 когато казвам, като ефективно или като неефективна, 962 00:41:32,580 --> 00:41:35,040 това е най-малко за супер-големи стойности на N. 963 00:41:35,040 --> 00:41:38,450 Когато имаме само осем души тук, или може би 50 или така барове на екрана, 964 00:41:38,450 --> 00:41:41,645 сте абсолютно ще забележите разликите сред тези три алгоритми. 965 00:41:41,645 --> 00:41:44,020 Но тъй като N, броят на хората, или броя на номера, 966 00:41:44,020 --> 00:41:46,350 или на броя на хората в телефона книга, или на броя на уеб страници 967 00:41:46,350 --> 00:41:48,230 в базата данни на Google стане по-голям и по-голям, 968 00:41:48,230 --> 00:41:51,650 ще видим, че всички три от тях алгоритми всъщност са доста бедни. 969 00:41:51,650 --> 00:41:54,060 И ние можем да направим фундаментално по-добре от това. 970 00:41:54,060 --> 00:41:56,830 >> Нека да разгледаме най-накрая, в това, което биха могли тези алгоритми 971 00:41:56,830 --> 00:41:59,520 звучи като в контекст на няколко други 972 00:41:59,520 --> 00:42:03,550 както и чрез този визуализация тук 973 00:42:03,550 --> 00:42:06,860 че ще ни запознае с редица алгоритми. 974 00:42:06,860 --> 00:42:10,330 Да вървим напред и да поздравя нашите участници тук, всички от които 975 00:42:10,330 --> 00:42:11,690 се подредени много добре. 976 00:42:11,690 --> 00:42:15,124 Ако искате да се прощален подарък. 977 00:42:15,124 --> 00:42:16,540 Можете да запазите номера, както добре. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 И това, което ще видите, или по-скоро чувам, сега, 980 00:42:22,520 --> 00:42:25,710 е, че ние поставяме звуци за всеки един от тези барове 981 00:42:25,710 --> 00:42:28,660 и да го асоциирате със софтуера, различна честота на звука, 982 00:42:28,660 --> 00:42:33,970 можете да увийте ума си повече audioly около това, което всеки един от тези неща 983 00:42:33,970 --> 00:42:34,470 изглежда така. 984 00:42:34,470 --> 00:42:39,325 Първият от които е вмъкване на сортиране 985 00:42:39,325 --> 00:42:44,275 >> [ТОНОВЕ] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Това е нещо като балон. 988 00:42:49,720 --> 00:42:54,175 >> [ТОНОВЕ] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Избор на вид. 991 00:43:18,222 --> 00:43:22,596 >> [ТОНОВЕ] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Нещо, наречено сливат вид. 994 00:43:35,150 --> 00:43:38,140 >> [ТОНОВЕ] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome вид. 997 00:43:51,278 --> 00:43:56,390 >> [ТОНОВЕ] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Това е за CS50. 1000 00:44:09,430 --> 00:44:13,360 Ние ще се видим в сряда. 1001 00:44:13,360 --> 00:44:16,671 >> Разказвач: И сега, "Deep Thoughts, "от Дейвън Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Защо го е за цикъл? 1004 00:44:21,590 --> 00:44:23,200 Защо не направите по-добре? 1005 00:44:23,200 --> 00:44:25,970 Бих се направи пет цикъла. 1006 00:44:25,970 --> 00:44:28,720 >> [СМЯХ]