1 00:00:00,000 --> 00:00:12,040 >> [Музички] 2 00:00:12,040 --> 00:00:16,460 >> ЗВУЧНИЦИ 1: Во ред, ова е CS50, и ова е почеток на недела четири, 3 00:00:16,460 --> 00:00:20,420 и како може да се чуе или читање, светот е крај. 4 00:00:20,420 --> 00:00:23,520 Случува во целиот интернет е знаењето и свеста 5 00:00:23,520 --> 00:00:27,100 на бубачки во програмата, програмски јазик наречен баш. 6 00:00:27,100 --> 00:00:32,729 Ова е прекрасно брендирани како Shellshock, или баш врата, 7 00:00:32,729 --> 00:00:35,485 но статии како овие не е невообичаено. 8 00:00:35,485 --> 00:00:38,807 И всушност, многу од нив донесе врати сеќавањата на Heartbleed, 9 00:00:38,807 --> 00:00:41,640 што може да се забележи во притиснете назад минатата пролет, кој 10 00:00:41,640 --> 00:00:43,980 на сличен начин беше прилично драматична. 11 00:00:43,980 --> 00:00:47,110 Сега на оние од вас тука денес, колку од вас имаат, 12 00:00:47,110 --> 00:00:50,330 дури и ако не го разбирате она што тоа е за сите, слушнале за Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Добро, и колку од вас имаат компјутери кои се ранливи? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 Добро, треба да има далеку, далеку повеќе раце до сега, од причини што ќе видиме. 17 00:01:00,250 --> 00:01:02,580 >> Ајде да ги погледнеме во она што е се случува во медиумите 18 00:01:02,580 --> 00:01:05,304 а потоа го објаснам малку тука за нас технички. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> ЗВУЧНИЦИ 2: Експертите за безбедност предупреди дека сериозен недостаток можев 21 00:01:11,250 --> 00:01:15,650 биде за да се влијае на стотици милиони во светот интернет корисници. 22 00:01:15,650 --> 00:01:20,600 Значи, што точно е бубачка што е создадено наречен Shellshock, и она што не го прават тоа? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Па, Shellshock е исто така познат како Баш грешка, софтверот го експлоатира. 25 00:01:28,910 --> 00:01:33,230 Хакери употреба на вирусот на скенирање ранливи системи за трчање Linux и Unix 26 00:01:33,230 --> 00:01:36,300 оперативни системи и потоа да ги зарази. 27 00:01:36,300 --> 00:01:38,730 Баш е командната линија школка. 28 00:01:38,730 --> 00:01:43,460 Ова им овозможува на корисниците прашање команди за да започне програми и функции во рамките софтвер 29 00:01:43,460 --> 00:01:45,250 со впишување на текст. 30 00:01:45,250 --> 00:01:49,980 Тоа обично се користи од страна на програмерите и не треба да биде отворен за надворешниот свет, 31 00:01:49,980 --> 00:01:51,590 иако Shellshock менува тоа. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Па, worringly, некои аналитичари предупредуваат дека би можело да биде поголема закана, 34 00:01:57,910 --> 00:02:01,580 бидејќи Shellshock овозможува целосно контрола на инфицирани машина, 35 00:02:01,580 --> 00:02:06,030 додека Heartbleed дозволено само хакери да ги шпионираат компјутерите. 36 00:02:06,030 --> 00:02:09,130 Тоа е така сериозна, тоа е беше оценет 10 од 10 37 00:02:09,130 --> 00:02:11,900 за сериозноста од страна на Националната База на податоци за ранливост. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 од сите веб-сервери се во ризик, вклучувајќи и некои Mac компјутери. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Па, бидете сигурни дека се закрпи на вашиот системи. 42 00:02:25,600 --> 00:02:29,330 Секој хостинг веб-сајт трчање погодените оперативни системи 43 00:02:29,330 --> 00:02:31,800 треба да се преземе акција што е можно поскоро. 44 00:02:31,800 --> 00:02:35,390 Секој кој може да си дозволи таа треба да изгледа на нивните следење и веб апликација 45 00:02:35,390 --> 00:02:37,355 firewalls да внимавате за било напади. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 ЗВУЧНИЦИ 3: Најлошото нешто што може да се случи е 48 00:02:41,770 --> 00:02:45,080 дека некој ќе напише код кој автоматски ќе одат и скенирање 49 00:02:45,080 --> 00:02:48,280 на интернет и да влијае сите овие компјутери. 50 00:02:48,280 --> 00:02:50,710 И еднаш тоа го прават, добро, најлошото нешто што можеше да стори 51 00:02:50,710 --> 00:02:53,300 е само избришете сè, или затвори сајтови надолу. 52 00:02:53,300 --> 00:02:55,360 Па ние може да се види штета од таа точка на гледање, 53 00:02:55,360 --> 00:02:58,300 каде што ќе има злобници кои само одлучи да предизвика хаос 54 00:02:58,300 --> 00:03:02,534 со тоа што системите надолу или бришење на датотеки, и работи како што. 55 00:03:02,534 --> 00:03:05,200 ЗВУЧНИЦИ 2: Некои велат дека ова е една од најтешките да се измери 56 00:03:05,200 --> 00:03:08,080 грешки во години, и тоа може да трае со недели или дури 57 00:03:08,080 --> 00:03:10,820 месеци за да се утврди неговата крајна влијание. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> ЗВУЧНИЦИ 1: Значи сето тоа е вистина, но смешно е, скоро сите 60 00:03:15,560 --> 00:03:18,330 на слики го видеше, освен можеби на тастатурата, 61 00:03:18,330 --> 00:03:20,930 нема никаква врска со бубачки она. 62 00:03:20,930 --> 00:03:23,960 Сервери и жици и така натаму, Тоа е вид на тангенцијално поврзани, 63 00:03:23,960 --> 00:03:27,410 но во суштина тоа е всушност прилично запознаени што се случува тука. 64 00:03:27,410 --> 00:03:30,050 Всушност, дозволете ми да одат во нашите CS50 апаратот. 65 00:03:30,050 --> 00:03:32,910 Дозволете ми да оди напред и да се зголеми на прозорецот на терминалот тука. 66 00:03:32,910 --> 00:03:36,020 А вие момци го користат ова, или вградени верзија од него, 67 00:03:36,020 --> 00:03:39,460 во gedit со цел да им пишуваат програми, тип команди, и така натаму, 68 00:03:39,460 --> 00:03:43,690 и ова е всушност, и има е за недели, баш, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Ова е Bourne-школка повторно, која е само фенси начин да се каже, 70 00:03:46,890 --> 00:03:50,220 ова е програма која има трепка брзо, ефикасно, 71 00:03:50,220 --> 00:03:51,970 кој седи таму те чека за влез за вас. 72 00:03:51,970 --> 00:03:53,920 И тоа е команда линија интерфејс преку кој 73 00:03:53,920 --> 00:03:57,650 вие момци се работи команди и конечно составување, а потоа работи 74 00:03:57,650 --> 00:03:58,400 програми. 75 00:03:58,400 --> 00:04:01,320 >> Но, баш е исто така програмирање јазик во следните смисла. 76 00:04:01,320 --> 00:04:05,460 Вие знаете дека постојат команди како CD и ls и, исто така, ѕвекот и други, 77 00:04:05,460 --> 00:04:09,580 но може да се дефинира свој команди од нивно спроведување во баш. 78 00:04:09,580 --> 00:04:11,420 Сега не се случува да се оди во големи детали 79 00:04:11,420 --> 00:04:16,089 како да баш на програмскиот јазик, но знаат, на пример, дека во овој момент, 80 00:04:16,089 --> 00:04:17,607 нема команда наречен "здраво". 81 00:04:17,607 --> 00:04:19,440 Така што може да се најде во еден од овие пакети. 82 00:04:19,440 --> 00:04:20,856 Тоа не е инсталиран на мојот компјутер. 83 00:04:20,856 --> 00:04:21,870 Прашајте го вашиот администратор. 84 00:04:21,870 --> 00:04:26,030 Но, ако јас сакам да има програма наречен "Здраво" во баш или во мојата брза, 85 00:04:26,030 --> 00:04:30,810 Јас всушност може да го користат синтаксата што е слично C. Тоа не е сосема ист, 86 00:04:30,810 --> 00:04:35,020 но изгледа доста сличен на функција, иако недостасуваат некои детали. 87 00:04:35,020 --> 00:04:38,090 Ништо не чини да се случи, но сега, ако јас типот "здраво" 88 00:04:38,090 --> 00:04:40,960 што всушност може да напише програма, а не во C, не е во Јава, 89 00:04:40,960 --> 00:04:44,280 не во друга програмирање јазик, но во баш себе. 90 00:04:44,280 --> 00:04:47,630 >> Сега клучот овде е дека сум го напишала на именува сакав да даде оваа нова команда, 91 00:04:47,630 --> 00:04:50,820 и загради, исто така, симбол на ова е во функција. 92 00:04:50,820 --> 00:04:54,010 Како настрана, исто така можете да направите забава работи, а всушност, дури и на Mac OS, 93 00:04:54,010 --> 00:04:55,620 ова е програма наречена терминал. 94 00:04:55,620 --> 00:04:58,800 Таа доаѓа вграден во никого компјутер кој има Мек во оваа соба, 95 00:04:58,800 --> 00:05:03,640 и може да направи слични работи во Mac Оперативен систем, но може да се оди повеќе од тоа. 96 00:05:03,640 --> 00:05:07,110 И ова е малку површни, но тоа е вид на забава. 97 00:05:07,110 --> 00:05:09,715 Бев потсети ова утро, кога размислувам ова преку, 98 00:05:09,715 --> 00:05:13,279 на малку игра јас се користи да игра со една од поранешните TFS CS50 на 99 00:05:13,279 --> 00:05:16,570 при што секој пат кога тој би одиме подалеку од неговата тастатура со екран отклучен, 100 00:05:16,570 --> 00:05:23,611 Би извршување на команда како this-- ", велат здраво." 101 00:05:23,611 --> 00:05:26,610 И сега секој пат кога тој се врати во својата тастатура откако ќе го отвори екранот 102 00:05:26,610 --> 00:05:27,985 и тој ќе седне, се обиде да направи некои работи, 103 00:05:27,985 --> 00:05:29,250 листа на содржината на неговиот directory-- 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO ИЗВЕДБА] 105 00:05:29,510 --> 00:05:30,010 >> -Hello. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Здраво. 108 00:05:32,120 --> 00:05:35,030 >> ЗВУЧНИЦИ 1: Значи, во праведноста, тоа не е всушност "здраво". 109 00:05:35,030 --> 00:05:36,894 Тоа беше обично нешто повеќе слично на that-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO ИЗВЕДБА] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 ЗВУЧНИЦИ 1: --that јас would-- па неговиот компјутер ќе 113 00:05:39,320 --> 00:05:42,170 колнам во него секое време тој всушност седна на тастатурата. 114 00:05:42,170 --> 00:05:46,265 И многу брзо го сфатиле нема да го напушти неговиот екран отклучена. 115 00:05:46,265 --> 00:05:48,730 Но, ова сугерира вид глупаво забава што ќе 116 00:05:48,730 --> 00:05:50,210 може да има со нешто како баш. 117 00:05:50,210 --> 00:05:52,770 Но, тоа е малку повеќе сериозни, да бидете сигурни, од тоа. 118 00:05:52,770 --> 00:05:57,235 И всушност, ова е еден од најопасниот и долготрајни грешки 119 00:05:57,235 --> 00:05:58,860 што навистина го погоди светот на глобално ниво. 120 00:05:58,860 --> 00:06:02,060 Овој баг е околу за некои 20 години, 121 00:06:02,060 --> 00:06:05,780 и ќе се удри во само момент од својата релативна едноставност. 122 00:06:05,780 --> 00:06:07,990 >> Значи ова е претставник команда дека ако 123 00:06:07,990 --> 00:06:10,448 поседувате Мек, буквално во моментов кога имате капакот се отвори, 124 00:06:10,448 --> 00:06:12,940 може да се обидете пишување во кои програма наречена терминал. 125 00:06:12,940 --> 00:06:15,410 Терминал е под Апликации Utilities-- 126 00:06:15,410 --> 00:06:18,790 еднаш, на Windows корисниците не мора да се се грижи за овој конкретен threat-- 127 00:06:18,790 --> 00:06:22,310 но оние од вас со Macs да напишете ова во прозорец како ќе го направите тука, 128 00:06:22,310 --> 00:06:24,210 и ако не напишеш дека во оваа програма 129 00:06:24,210 --> 00:06:28,830 наречен терминал, како јас ќе се направи сега, ако видите зборот "ранливи" 130 00:06:28,830 --> 00:06:32,200 Вашиот компјутер е подложни на експлоатација. 131 00:06:32,200 --> 00:06:33,850 >> Сега што значи дека всушност значи? 132 00:06:33,850 --> 00:06:35,870 И ова е значително некои прилично лудо синтакса, 133 00:06:35,870 --> 00:06:39,050 но ајде барем извлече некои од интересните аспекти. 134 00:06:39,050 --> 00:06:42,567 Значи има некои синтакса што изгледа малку познато, барем од C 135 00:06:42,567 --> 00:06:43,950 и програмирање поопшто. 136 00:06:43,950 --> 00:06:47,550 Гледам некои загради, semicolons, кадрави загради, и такви, 137 00:06:47,550 --> 00:06:50,820 но излегува дека овој глупава работа тука во жолта 138 00:06:50,820 --> 00:06:53,580 во суштина е функција дека не прави ништо. 139 00:06:53,580 --> 00:06:57,840 Дебелото црево средства не прават ништо, и запирка значи да престане да прави ништо. 140 00:06:57,840 --> 00:07:00,250 Па во внатрешноста на овие кадрави загради, фактот 141 00:07:00,250 --> 00:07:02,440 што имаат еднаков знак на лево, овој 142 00:07:02,440 --> 00:07:05,500 е суштински креирајќи на команда или променлива, 143 00:07:05,500 --> 00:07:09,520 наречен X, и пренесување дека жолта малку код таму. 144 00:07:09,520 --> 00:07:14,040 Тоа би можело да биде нешто како "ехо здраво "или" велат бип "или нешто 145 00:07:14,040 --> 00:07:15,120 слично на тоа. 146 00:07:15,120 --> 00:07:17,780 Но известување, ако твоите очи талкаат понатаму кон десно, 147 00:07:17,780 --> 00:07:22,150 има уште оваа линија од само на крајот на таа точка-запирка. 148 00:07:22,150 --> 00:07:25,160 "Ехо ранливи", а потоа после тоа има уште повеќе. 149 00:07:25,160 --> 00:07:26,530 Друга точка-запирка, баш -c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Па скратам приказната, оваа линија на кодот е 152 00:07:34,050 --> 00:07:36,660 доволни за огромна компјутер, кој е 153 00:07:36,660 --> 00:07:39,830 подложни на правење на нешто што сакате тоа да се направи, 154 00:07:39,830 --> 00:07:44,290 бидејќи има грешка во баш при иако баш требаше да престанат 155 00:07:44,290 --> 00:07:48,980 читање линии на командата право таму по жолта текст, 156 00:07:48,980 --> 00:07:52,520 за 20-плус години бубачка, Баш всушност бил читање 157 00:07:52,520 --> 00:07:56,780 надвор од тоа запирка и прилично многу прави она што е кажано. 158 00:07:56,780 --> 00:07:59,070 >> Значи она што е импликација на што на крајот? 159 00:07:59,070 --> 00:08:01,340 Јас само рече "ехо Здраво" или "ехо ранливи" 160 00:08:01,340 --> 00:08:05,449 но што ако сте направиле нешто всушност злонамерни, како РМ -rf *, 161 00:08:05,449 --> 00:08:07,240 кои вие не би некогаш напишан пред, 162 00:08:07,240 --> 00:08:08,920 и искрено најверојатно не треба прерано, 163 00:08:08,920 --> 00:08:10,700 бидејќи може да се направи многу штета со неа. 164 00:08:10,700 --> 00:08:11,210 Зошто? 165 00:08:11,210 --> 00:08:12,990 РМ го прави она што, се разбира? 166 00:08:12,990 --> 00:08:14,270 Отстранува. 167 00:08:14,270 --> 00:08:15,930 * Значи што? 168 00:08:15,930 --> 00:08:16,430 Сите. 169 00:08:16,430 --> 00:08:18,180 Па тоа е т.н. вајлд карта, па тоа значи дека 170 00:08:18,180 --> 00:08:20,410 избришете се што е во на тековниот директориум. 171 00:08:20,410 --> 00:08:23,379 -r се случува да значи рекурзивен, што значи дека ако она што сте бришење 172 00:08:23,379 --> 00:08:26,420 е директориум, и во внатрешноста на таму е други датотеки и други директориуми, 173 00:08:26,420 --> 00:08:28,950 рекурзивно се нурне во таму и бришење на сето тоа. 174 00:08:28,950 --> 00:08:31,040 И ѓ е најлошиот на сите нив. 175 00:08:31,040 --> 00:08:32,580 Некој знае што значи -f тука? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Сила. 178 00:08:34,360 --> 00:08:37,830 Па сила средства, па дури и ако ова е лоша идеја, 179 00:08:37,830 --> 00:08:40,939 го прават тоа без мене поттикнувајќи за понатамошно потврда. 180 00:08:40,939 --> 00:08:43,230 Па, знаете, ние се смееме на ова, но искрено, јас веројатно 181 00:08:43,230 --> 00:08:44,972 тип овој повеќе пати на ден, бидејќи реалноста 182 00:08:44,972 --> 00:08:47,210 е тоа е најбрзиот начин да се избришете цел куп работи. 183 00:08:47,210 --> 00:08:48,590 Но, дури и имам направено некои штета. 184 00:08:48,590 --> 00:08:53,100 >> Но, ако сте во ситуација да трик компјутер во дефинирање на некои глупави променлива 185 00:08:53,100 --> 00:08:56,810 или функција наречена X, но потоа трикови на компјутер во извршување 186 00:08:56,810 --> 00:09:00,030 надвор од границите на кои функција, надвор од тоа точка-запирка, 187 00:09:00,030 --> 00:09:04,430 сте навистина би можеле да трик компјутер во извршување на нешто како РМ -rf 188 00:09:04,430 --> 00:09:07,810 или е-мејл команда или командата Copy. 189 00:09:07,810 --> 00:09:11,400 Нешто буквално можете да го направите со компјутер, без разлика дали тоа е бришење на датотеки, 190 00:09:11,400 --> 00:09:15,350 создавање на датотеки, спамирање некого, напад некои на серверот од далечина, 191 00:09:15,350 --> 00:09:17,190 ако може да се изрази со командата, 192 00:09:17,190 --> 00:09:19,120 може да трик компјутер во тоа го прават. 193 00:09:19,120 --> 00:09:21,510 >> Сега што е пример за како може да го направите ова? 194 00:09:21,510 --> 00:09:24,300 Па, има многу на компјутери на интернет трчање баш. 195 00:09:24,300 --> 00:09:26,390 Сите од нас Mac корисниците се меѓу нив. 196 00:09:26,390 --> 00:09:30,390 А многу Линукс сервери се меѓу нив, како и, и Unix сервери. 197 00:09:30,390 --> 00:09:32,630 Прозорци повторно добива релативно сноселе 198 00:09:32,630 --> 00:09:34,590 освен ако не сте го инсталирале специјален софтвер. 199 00:09:34,590 --> 00:09:37,130 Сега многу сервери, за пример, работи веб сервери, 200 00:09:37,130 --> 00:09:39,840 и всушност Линукс е можеби најпопуларниот оперативен систем 201 00:09:39,840 --> 00:09:43,060 да работат на компјутери на интернет кои се служи веб страни. 202 00:09:43,060 --> 00:09:44,910 Сега како што ќе видиме подоцна во семестар, кога 203 00:09:44,910 --> 00:09:48,470 ќе испрати барање од Вашиот browser-- Хром, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- со оддалечен сервер, 205 00:09:50,790 --> 00:09:53,730 излегува дека иако само ја внеле www.example.com, 206 00:09:53,730 --> 00:09:59,590 Вашиот интернет пребарувач е испраќање на порака тоа е малку повеќе arcane, како ова. 207 00:09:59,590 --> 00:10:01,239 >> Но забележите малку нешто чудно. 208 00:10:01,239 --> 00:10:03,030 Првите две линии Никогаш не сум видел, 209 00:10:03,030 --> 00:10:04,904 но тие не изгледаат особено опасни. 210 00:10:04,904 --> 00:10:08,030 Но се забележи она што сум го украдени за третата линија овде. 211 00:10:08,030 --> 00:10:13,390 Ако лошо момче биле за да пратите порака како оваа од неговиот или нејзиниот компјутер 212 00:10:13,390 --> 00:10:17,270 на ранливи Mac или ранливи Линукс сервер, 213 00:10:17,270 --> 00:10:21,580 смешно е што баш, тоа е толку едноставно малку командната линија, 214 00:10:21,580 --> 00:10:27,450 е сеприсутно и честопати се користи за суштина изврши 215 00:10:27,450 --> 00:10:30,020 на содржината на порака што ја добива. 216 00:10:30,020 --> 00:10:33,490 И со таа логика, може да се трик на веб сервер, според тоа, 217 00:10:33,490 --> 00:10:36,370 со испраќање на нешто како Корисникот застапник, кои обично 218 00:10:36,370 --> 00:10:38,300 би требало да се каже името на вашиот интернет пребарувач. 219 00:10:38,300 --> 00:10:42,420 Корисникот застапник Хром, пристап Агент Интернет Истражувач, пристап Агент Firefox, овој 220 00:10:42,420 --> 00:10:44,590 е само на вашиот интернет пребарувач начин на идентификување на себе. 221 00:10:44,590 --> 00:10:46,605 Но ако лошо момче многу умно вели, мм мм, јас сум 222 00:10:46,605 --> 00:10:47,930 нема да ви кажам она што мојот интернет пребарувач е, 223 00:10:47,930 --> 00:10:50,888 Јас наместо ќе ви испрати оваа криптичната изглед нешто со РМ -rf 224 00:10:50,888 --> 00:10:55,840 * Во него, вие буквално може да измамува ранливи веб сервер на интернет 225 00:10:55,840 --> 00:10:59,055 во извршување токму тоа има за бришење на сите датотеки. 226 00:10:59,055 --> 00:11:00,930 И искрено, тоа не е дури и на најлошото од него. 227 00:11:00,930 --> 00:11:01,763 Можете да направите ништо. 228 00:11:01,763 --> 00:11:04,480 Можете да започнете дистрибуирани denial of service напади 229 00:11:04,480 --> 00:11:07,030 ако ви испрати оваа порака на Целиот гроздовете на веб сервери 230 00:11:07,030 --> 00:11:10,256 а потоа ги имаше сите нив слезе, за пример, на Harvard.edu сервери, 231 00:11:10,256 --> 00:11:12,130 и можете да го решите тресне на подлец од нив 232 00:11:12,130 --> 00:11:15,490 од страна на мрежата на сообраќајот, кој беше во спротивно предизвикани од овој лошо момче. 233 00:11:15,490 --> 00:11:18,760 >> Значи, скратам приказната, речиси сите во оваа соба кој е сопственик на Mac 234 00:11:18,760 --> 00:11:20,240 е подложен на тоа. 235 00:11:20,240 --> 00:11:24,100 На надеж е дека освен ако не сте водење на веб сервер на вашиот лаптоп, 236 00:11:24,100 --> 00:11:27,780 и освен ако не сте всушност конфигуриран тоа да се овозможи нешто како SSH во неа, 237 00:11:27,780 --> 00:11:28,670 сте всушност безбедно. 238 00:11:28,670 --> 00:11:31,710 Тоа е ранлив, но нема еден се обидува да добие во вашиот лаптоп, 239 00:11:31,710 --> 00:11:33,290 така што вид на може да бидат сигурни. 240 00:11:33,290 --> 00:11:36,210 Сепак, на Apple наскоро биде ажурирање на фикс за ова. 241 00:11:36,210 --> 00:11:39,660 Светот на Linux веќе има издадено голем број на поправки за Fedora и Ubuntu 242 00:11:39,660 --> 00:11:43,790 и други верзии на Linux, и навистина ако извршувате ажурирање 50 во апаратот, 243 00:11:43,790 --> 00:11:45,930 дури и дека исто така ќе биде ажурирани и корегирани. 244 00:11:45,930 --> 00:11:47,764 Но, тоа исто така не има навистина е ранлива, 245 00:11:47,764 --> 00:11:49,804 бидејќи освен ако немате tinkered со апаратот 246 00:11:49,804 --> 00:11:52,770 и направи вашиот лаптоп јавно достапен на интернет, кој не е 247 00:11:52,770 --> 00:11:54,910 стандардно, сте всушност е во ред, бидејќи 248 00:11:54,910 --> 00:11:56,890 на firewalling и други техники. 249 00:11:56,890 --> 00:12:01,000 >> Но, тоа е екстремен пример за бубачка дека ние сме живееле за буквално 20 250 00:12:01,000 --> 00:12:04,050 години, и кој знае дали некој сето ова време знае за тоа? 251 00:12:04,050 --> 00:12:06,300 И всушност, ова е еден од основните предизвици 252 00:12:06,300 --> 00:12:08,690 што ќе видиме подоцна во семестар за безбедноста, 253 00:12:08,690 --> 00:12:13,020 е дека исто како и во реалниот свет, добрите момци се на штета. 254 00:12:13,020 --> 00:12:16,500 Да се ​​задржи на лошите момци надвор, ние треба да бидете сигурни дека секој вратата е заклучена, 255 00:12:16,500 --> 00:12:20,340 дека секој прозорец е сигурно, дека секоја точка на влез во дом 256 00:12:20,340 --> 00:12:21,980 е безбеден да се задржи на лошите момци надвор. 257 00:12:21,980 --> 00:12:26,870 Но, она што го прави лош човек мора да направите за да всушност компромис вашиот дом 258 00:12:26,870 --> 00:12:28,200 и крадат од вас? 259 00:12:28,200 --> 00:12:32,574 Тој или таа само треба да се најде еден отклучен врата, еден скршен прозорец, или нешто 260 00:12:32,574 --> 00:12:35,240 заедно оние линии, а тоа е истото во компјутерска безбедност. 261 00:12:35,240 --> 00:12:37,660 Може да се напишат милиони линии на програмски код 262 00:12:37,660 --> 00:12:40,570 и да потрошат стотици или илјадници на часови обидувајќи се да го поправи, 263 00:12:40,570 --> 00:12:43,370 но ако се направи само една грешка во точноста, 264 00:12:43,370 --> 00:12:47,030 може да се стави на целиот систем и навистина во овој случај, на целата интернет 265 00:12:47,030 --> 00:12:48,660 и светот во ризик. 266 00:12:48,660 --> 00:12:51,950 >> Значи, ако сакате да дознаете повеќе во врска со овој, одете на овој URL тука. 267 00:12:51,950 --> 00:12:54,450 Нема потреба за акција вечерва освен ако не сте 268 00:12:54,450 --> 00:12:57,116 меѓу оние кои се чувствуваат поудобно дека се работи свој веб- 269 00:12:57,116 --> 00:12:59,810 сервер, во кој случај треба, Всушност, надградба на вашиот софтвер. 270 00:12:59,810 --> 00:13:03,244 >> И тоа исто така е насловот на говор, а сега на хартија, 271 00:13:03,244 --> 00:13:05,410 дека ние сме поврзани на веб-страница се разбира за денес. 272 00:13:05,410 --> 00:13:07,600 Тоа беше од страна на колеги име Кен Томпсон, кој 273 00:13:07,600 --> 00:13:10,120 е прифаќање на многу познати награда во компјутерски науки, 274 00:13:10,120 --> 00:13:13,495 и тој даде говор неколку години Пред, во суштина на оваа иста тема. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Барајќи луѓе на прашањето, треба навистина 277 00:13:20,520 --> 00:13:23,480 доверба, во крајна линија, софтвер кој сте биле дадени? 278 00:13:23,480 --> 00:13:26,100 На пример, сите ние имаме Пишувам програми, 279 00:13:26,100 --> 00:13:27,820 и ние сме биле составувањето на нив со ѕвекот. 280 00:13:27,820 --> 00:13:31,830 И да го вашето знаење, сте писмени сите програми за CS50 каде што има 281 00:13:31,830 --> 00:13:35,310 задната врата на сорти, има начин дека лошо момче, ако водење на вашата програма, 282 00:13:35,310 --> 00:13:37,410 би можел да го преземе вашиот компјутер? 283 00:13:37,410 --> 00:13:38,310 Веројатно не, нели? 284 00:13:38,310 --> 00:13:40,180 Марио и алчен, и кредит. 285 00:13:40,180 --> 00:13:41,680 Овие се сите прилично мали програми. 286 00:13:41,680 --> 00:13:43,910 Ќе треба да биде прилично лошо ако, всушност, 287 00:13:43,910 --> 00:13:47,310 направи вашиот целиот компјутер ранливи по пишување 10 или 20 линии на код, 288 00:13:47,310 --> 00:13:49,690 или барем не се свесни за некои на безбедносните импликации. 289 00:13:49,690 --> 00:13:52,023 Сега велам дека шеговито, но ние сме случува да се види и денес 290 00:13:52,023 --> 00:13:54,600 и оваа недела тоа е всушност навистина, навистина лесно 291 00:13:54,600 --> 00:13:57,980 да биде лошо и да се направи дури и кратки програми ранливи. 292 00:13:57,980 --> 00:14:02,880 >> Но, за сега, барем, да сфатат дека прашањето се бара тука 293 00:14:02,880 --> 00:14:04,850 е за ѕвекот на компајлерот. 294 00:14:04,850 --> 00:14:08,360 Зошто сме биле верувајќи ѕвекот во последните две или три недели? 295 00:14:08,360 --> 00:14:12,650 Кој е да се каже дека секој кој пишува ѕвекот немаа многу "ако" состојба таму 296 00:14:12,650 --> 00:14:17,680 што во суштина се инјектира некои нули и оние во секоја програма се подготвува 297 00:14:17,680 --> 00:14:21,180 кои ќе ги споделите со него или неа пристап вашиот компјутер кога сте во сон 298 00:14:21,180 --> 00:14:23,580 и вашиот лаптоп капак е отворен и вашиот компјутер се извршува? 299 00:14:23,580 --> 00:14:24,080 Нели? 300 00:14:24,080 --> 00:14:28,350 Имаме овој вид на чест систем право сега каде се надеваме дека ѕвекот е legit. 301 00:14:28,350 --> 00:14:30,000 Верувате дека апаратот е legit. 302 00:14:30,000 --> 00:14:34,430 Верувате дека буквално секоја програма на вашиот Mac или PC е сигурен. 303 00:14:34,430 --> 00:14:37,510 И како што сугерира оваа едноставна грешка, дури и ако тоа не е злопамтило, 304 00:14:37,510 --> 00:14:40,580 тоа е апсолутно не веројатно да биде случај. 305 00:14:40,580 --> 00:14:42,350 >> Значи треба да се плаши како пекол. 306 00:14:42,350 --> 00:14:45,560 Искрено, не постои едноставна решение на овој и други 307 00:14:45,560 --> 00:14:48,185 од еден вид на општествена свест на зголемување на комплексноста 308 00:14:48,185 --> 00:14:50,310 дека ние сме зграда на врвот на нашите компјутерски системи, 309 00:14:50,310 --> 00:14:53,740 и како се повеќе ранливи ние многу добро може да биде. 310 00:14:53,740 --> 00:14:55,570 >> Сега со тоа, рече, Збег. 311 00:14:55,570 --> 00:14:59,889 Па Збег е проблем постави три, и Збег е игра од недалечното минато 312 00:14:59,889 --> 00:15:02,180 кои може да се сети, но за нас во проблем постави три, 313 00:15:02,180 --> 00:15:04,450 тоа ни овозможува да се земе работите назад до еден степен 314 00:15:04,450 --> 00:15:08,880 така што кога ние пишуваме програми, дури и во терминален прозорец како овој, 315 00:15:08,880 --> 00:15:14,670 ние всушност може да работи, во крајна линија, графички програми не 316 00:15:14,670 --> 00:15:17,800 за разлика од оние што ги имаше Пристап до гребење. 317 00:15:17,800 --> 00:15:20,910 Значи ова е на вработените имплементација на Збег, 318 00:15:20,910 --> 00:15:23,930 што е само оваа тула кршење игра, што се движите лопатка назад 319 00:15:23,930 --> 00:15:27,590 и назад, и ќе го погоди топката против оние обоените цигли до врвот. 320 00:15:27,590 --> 00:15:30,020 Па ова ни носат вид на врати таму каде 321 00:15:30,020 --> 00:15:33,180 бевме во можност да биде многу брзо со нула, а сега со Ц, 322 00:15:33,180 --> 00:15:35,800 спроведување на нашите сопствени графички кориснички интерфејси. 323 00:15:35,800 --> 00:15:38,960 >> Но повеќе од тоа, овој проблем сет претставува првиот 324 00:15:38,960 --> 00:15:41,000 во која ние си даваат сте еден куп на код. 325 00:15:41,000 --> 00:15:43,940 И всушност, јас донесе експлицитна внимание на ова, затоа што особено 326 00:15:43,940 --> 00:15:47,090 за оние кои се помалку удобно, овој Проблемот се постави, барем на прв поглед, 327 00:15:47,090 --> 00:15:49,170 се случува да се чувствуваат како ние ги направивме до еден степен. 328 00:15:49,170 --> 00:15:51,540 Бидејќи ние сме ви даде, за некои од пребарување 329 00:15:51,540 --> 00:15:54,930 и сортирање на проблеми во pset, еден куп на код кој што напиша, 330 00:15:54,930 --> 00:15:56,680 и неколку коментари кои велат "да" 331 00:15:56,680 --> 00:15:58,221 каде што треба да се пополни во празни места. 332 00:15:58,221 --> 00:16:00,020 Па не е премногу страшно, но тоа е прв пат 333 00:16:00,020 --> 00:16:03,370 ние ви предавање код кој треба да се Првиот читаат, разбираат, а потоа додадете на 334 00:16:03,370 --> 00:16:04,290 и заврши тоа. 335 00:16:04,290 --> 00:16:05,940 >> А потоа со Збег, ние ќе го стори истото, 336 00:16:05,940 --> 00:16:08,740 ви даваат неколку десетици повеќе линии на кодот кој, искрено, да ви даде 337 00:16:08,740 --> 00:16:11,490 многу на рамката за играта, но запре кратко 338 00:16:11,490 --> 00:16:14,304 спроведување на тули и топката и лопатка, 339 00:16:14,304 --> 00:16:15,970 но ние не се имплементираат некои други карактеристики. 340 00:16:15,970 --> 00:16:18,280 Па дури и дека на прв поглед, повторно, особено ако помалку удобно, 341 00:16:18,280 --> 00:16:21,480 може да изгледа особено тешка и мислите дека има толку многу нови функции 342 00:16:21,480 --> 00:16:24,070 што треба да заврши вашиот ум околу себе, и тоа е вистина. 343 00:16:24,070 --> 00:16:26,281 Но, имајте на ум, тоа е слично на гребење. 344 00:16:26,281 --> 00:16:28,780 Шансите се не сте ги користите сите сложувалката парчиња во гребење. 345 00:16:28,780 --> 00:16:31,120 Шансите се дека не се грижи да заврши вашиот ум околу сите нив 346 00:16:31,120 --> 00:16:33,617 затоа што сите го зеде беше брз поглед да се разбере, ох, 347 00:16:33,617 --> 00:16:35,450 тоа е она што можам да направам со што загатка парче. 348 00:16:35,450 --> 00:16:38,260 И навистина, во проблемот поставени 3 спецификации, ние ќе ви укаже 349 00:16:38,260 --> 00:16:41,370 на документација која ќе ве запознаам со некои нови функции, 350 00:16:41,370 --> 00:16:43,570 и на крајот на програмирање конструира што ги користите. 351 00:16:43,570 --> 00:16:47,610 Услови, јамки, променливи и функции 352 00:16:47,610 --> 00:16:50,720 ќе бидат идентични со она што сум го видел досега. 353 00:16:50,720 --> 00:16:53,560 >> Па навистина, она што ние ќе им даде вас е некои мостра кодот кој 354 00:16:53,560 --> 00:16:56,110 Ви овозможува да се создаде прозорец тоа не изгледа за разлика од ова, 355 00:16:56,110 --> 00:16:59,540 и на крајот ја претвори во нешто сосема вака. 356 00:16:59,540 --> 00:17:02,250 Па ги искористат предностите на CS50, разговараат канцеларија часа и повеќе, 357 00:17:02,250 --> 00:17:05,290 и да ги преземат утеха во фактот дека на износот на кодот треба да се напише 358 00:17:05,290 --> 00:17:06,760 е, всушност, не толку многу. 359 00:17:06,760 --> 00:17:10,359 Првиот предизвик е само да се аклиматизирам се на некои кодот што сум напишал. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Прашања на pset3, Shellshock, или на друг начин? 362 00:17:15,810 --> 00:17:19,226 >> ПУБЛИКАТА: Тоа изгледаше како минува низ со Збег 363 00:17:19,226 --> 00:17:22,154 дека кодот е речиси објектно-ориентиран стил, 364 00:17:22,154 --> 00:17:24,675 но мислев Ц беше објектно-ориентирана програма. 365 00:17:24,675 --> 00:17:26,050 ЗВУЧНИЦИ 1: Одличен прашање. 366 00:17:26,050 --> 00:17:28,258 Па во потрага преку дистрибуција код, кодот 367 00:17:28,258 --> 00:17:30,180 ние напиша за pset3, за оние кои се запознаени, тоа 368 00:17:30,180 --> 00:17:32,230 изгледа како да е малку објектно-ориентирана. 369 00:17:32,230 --> 00:17:33,800 Краткиот одговор е, тоа е. 370 00:17:33,800 --> 00:17:38,130 Тоа е приближување на тоа како ќе може да направи објектно-ориентиран код користење 371 00:17:38,130 --> 00:17:41,850 јазик како C, но тоа е сепак на крајот процедурални. 372 00:17:41,850 --> 00:17:44,900 Нема методи во внатрешноста на променливи, како што ќе видите. 373 00:17:44,900 --> 00:17:46,180 Но, тоа е потсетува на тоа. 374 00:17:46,180 --> 00:17:48,780 И ние ќе се види дека функцијата повторно кога ќе го добиеме во PHP и го вклучите Javascript- 375 00:17:48,780 --> 00:17:49,946 кон крајот на семестарот. 376 00:17:49,946 --> 00:17:53,667 Но, за сега, мислам на тоа како навестување на она што е да дојде. 377 00:17:53,667 --> 00:17:54,250 Добро прашање. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Во ред. 380 00:17:56,550 --> 00:17:59,730 Па се спојат вид беше како левата работи последен пат. 381 00:17:59,730 --> 00:18:03,250 И се спојат вид е кул во смисла дека тоа беше толку многу побрзо, 382 00:18:03,250 --> 00:18:07,100 најмалку врз основа на површен тестови што го правевме минатата недела, отколку, да речеме, меур 383 00:18:07,100 --> 00:18:08,710 сортирање, селекција вид, вметнување вид. 384 00:18:08,710 --> 00:18:11,780 И она што беше уредно премногу е само како посочно и чисто 385 00:18:11,780 --> 00:18:12,810 можете да го изразиме. 386 00:18:12,810 --> 00:18:15,840 И што да кажеме дека тоа е горниот граница на трчање време на спојување 387 00:18:15,840 --> 00:18:16,340 вид? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Да? 390 00:18:18,495 --> 00:18:19,360 >> ПУБЛИКАТА: N најавите n? 391 00:18:19,360 --> 00:18:20,819 >> ЗВУЧНИЦИ 1: n најавите n, во право. n најавите n. 392 00:18:20,819 --> 00:18:23,776 А ние ќе се вратам на она што навистина значи или каде што доаѓа од, 393 00:18:23,776 --> 00:18:25,570 но ова е подобро од она трчање време 394 00:18:25,570 --> 00:18:28,440 што сме го виделе за меур селекција и вметнување вид? 395 00:18:28,440 --> 00:18:30,610 Па n квадрат. N на квадрат е поголем од овој, 396 00:18:30,610 --> 00:18:34,650 па дури и ако тоа не е очигледно, знаат дека најавите n е помал од n, 397 00:18:34,650 --> 00:18:36,910 Значи, ако правиш n пати нешто помал од n, 398 00:18:36,910 --> 00:18:38,680 тоа се случува да биде помал од n квадрат. 399 00:18:38,680 --> 00:18:40,130 Тоа е малку на интуиција таму. 400 00:18:40,130 --> 00:18:42,190 Но, ние плати цената за тоа. 401 00:18:42,190 --> 00:18:47,000 Тоа беше побрзо, но една тема која започна да се појават минатата недела беше ова Губитокот. 402 00:18:47,000 --> 00:18:49,804 Добив подобри перформанси временски, но она што 403 00:18:49,804 --> 00:18:52,470 морав да помине на други страна, со цел да се постигне тоа? 404 00:18:52,470 --> 00:18:53,591 >> ПУБЛИКАТА: Мемориски. 405 00:18:53,591 --> 00:18:54,465 ЗВУЧНИЦИ 1: Кажи повторно? 406 00:18:54,465 --> 00:18:55,173 ПУБЛИКАТА: Мемориски. 407 00:18:55,173 --> 00:18:57,040 ЗВУЧНИЦИ 1: Меморија, или простор поопшто. 408 00:18:57,040 --> 00:18:59,040 И тоа не беше супер очигледно со нашите луѓе, 409 00:18:59,040 --> 00:19:02,240 но се сети дека нашите волонтери се повлекува напред и излегувајќи 410 00:19:02,240 --> 00:19:04,780 назад иако има низа тука, и како да има 411 00:19:04,780 --> 00:19:07,130 втор низа тука тие би можеле да ги користат, затоа што 412 00:19:07,130 --> 00:19:09,080 потребни некаде да се спојат овие луѓе. 413 00:19:09,080 --> 00:19:11,480 Ние не само може да ги трампа во место. 414 00:19:11,480 --> 00:19:13,800 Па се спојат вид потпора повеќе простор, кој 415 00:19:13,800 --> 00:19:15,620 ние не треба со на други алгоритми, 416 00:19:15,620 --> 00:19:17,410 но главата е дека тоа е многу побрзо. 417 00:19:17,410 --> 00:19:20,780 И искрено, во реалниот свет простор овие days-- RAM меморија, хард диск space-- 418 00:19:20,780 --> 00:19:25,030 е релативно евтина, и така тоа е не е нужно лоша работа. 419 00:19:25,030 --> 00:19:28,320 >> Значи, да се земе брз поглед, малку повеќе методично, во она што ние го сторивме 420 00:19:28,320 --> 00:19:30,220 и зошто рече дека е n најавите n. 421 00:19:30,220 --> 00:19:33,260 Значи тука се осум броеви и осум волонтери имавме последен пат. 422 00:19:33,260 --> 00:19:35,718 И првото нешто што се спојуваат Вид ни кажа да направам е што? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 ПУБЛИКАТА: Поделба на два дела. 425 00:19:38,010 --> 00:19:38,663 ЗВУЧНИЦИ 1: Кажи повторно? 426 00:19:38,663 --> 00:19:39,650 ПУБЛИКАТА: Поделба на два дела. 427 00:19:39,650 --> 00:19:40,610 ЗВУЧНИЦИ 1: Поделба на два дела, во право. 428 00:19:40,610 --> 00:19:42,818 Ова е многу потсетува на книгата на телефонот, на поделбата 429 00:19:42,818 --> 00:19:44,220 и го освои поопшто. 430 00:19:44,220 --> 00:19:45,640 Па ние погледна на левата половина. 431 00:19:45,640 --> 00:19:48,700 А потоа еднаш рековме, вид на левата половина од елементите, 432 00:19:48,700 --> 00:19:49,690 она што не можеме следната кажам? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Сортирате левата половина од левата половина, што ни овозможи да, 435 00:19:54,860 --> 00:19:57,570 по делење на два дела, се фокусира на четири и два. 436 00:19:57,570 --> 00:20:01,280 >> Како да го решите листа сега, во жолта, на големината на две, употребувајќи го спојуваат Сортирај? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 И ја делат на половина, и сортирање на левата половина. 439 00:20:04,580 --> 00:20:07,100 И ова беше местото каде што работи доби малку глупаво кратко. 440 00:20:07,100 --> 00:20:10,720 Како да сортирате листата што е на големина на една, како овој број четири овде? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Тоа е подредени. 443 00:20:13,210 --> 00:20:14,200 Ќе завршиш. 444 00:20:14,200 --> 00:20:17,300 >> Но тогаш како ќе го решите листа на големина на една кога тоа е број два? 445 00:20:17,300 --> 00:20:21,640 Па, истото, но сега она што беше третиот и клучен чекор во Merge Сортирај? 446 00:20:21,640 --> 00:20:24,020 Ти мораше да се логирате на левата половина и десната половина. 447 00:20:24,020 --> 00:20:26,580 И штом ќе го направи тоа, ние погледна на четири, ние погледна две. 448 00:20:26,580 --> 00:20:28,750 Решивме сите во право, очигледно два прво место, 449 00:20:28,750 --> 00:20:31,840 па ние се стави две во својата место, по што четири. 450 00:20:31,840 --> 00:20:35,010 И сега мора да се вид на премотам касетата, и ова е вид на карактеристични 451 00:20:35,010 --> 00:20:37,570 на алгоритам како Merge Вид, ја премотам касетата во меморијата. 452 00:20:37,570 --> 00:20:40,240 Она што беше следната линија на приказната? 453 00:20:40,240 --> 00:20:41,780 Што треба да се фокусира на следно? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 На десната половина на левата половина, што е шест и осум. 456 00:20:47,350 --> 00:20:50,320 >> Значи, дозволете ми само чекор во текот на овој без belaboring точка премногу. 457 00:20:50,320 --> 00:20:53,330 Шест и осум, а потоа шест е сортирани, осум се подредени. 458 00:20:53,330 --> 00:20:57,190 Се спојат заедно, како што, и сега следниот голем чекор 459 00:20:57,190 --> 00:21:00,990 е, се разбира, сортирање десната половина од првиот чекор на овој алгоритам. 460 00:21:00,990 --> 00:21:02,870 Значи ние се фокусира на еден, три, седум, пет. 461 00:21:02,870 --> 00:21:04,540 Ние потоа се фокусираат на левата половина. 462 00:21:04,540 --> 00:21:09,400 Левата половина од тоа, на десната половина на тоа, а потоа се спојат во еден и три. 463 00:21:09,400 --> 00:21:13,100 Потоа на десната половина, а потоа левата половина на неа, а потоа на десната половина од тоа. 464 00:21:13,100 --> 00:21:15,985 Се спојат во, и сега што чекор останува? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Се спојат големите левата половина и големите десната половина, па оди таму долу, 467 00:21:22,460 --> 00:21:27,330 потоа две, а потоа три, а потоа четири, потоа пет, а потоа шест, а потоа седум, а потоа осум. 468 00:21:27,330 --> 00:21:31,990 >> Па сега зошто е тоа на крајот открива, особено ако n и логаритмите повеќе 469 00:21:31,990 --> 00:21:35,487 генерално доста да избега, барем во поновата историја? 470 00:21:35,487 --> 00:21:37,070 Па, се забележи на висината на оваа работа. 471 00:21:37,070 --> 00:21:41,230 Ние имавме осум елементи, и ние поделена тоа од страна на две, од страна на две, од страна на две. 472 00:21:41,230 --> 00:21:44,590 Значи се најавите база две од осум ни дава три. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 И да ми верувате дека ако малку маглива на тоа. 475 00:21:48,540 --> 00:21:54,710 Но се најавите база две од осумте е три, па ние го направивме три слоеви на спојување. 476 00:21:54,710 --> 00:21:57,170 И кога ќе се спои елементи, како многу елементи 477 00:21:57,170 --> 00:21:58,950 се гледаме на секоја од овие редови? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Вкупно n, нели? 480 00:22:01,437 --> 00:22:04,020 Бидејќи да се логирате на горниот ред, иако ние го сторивме тоа парче, 481 00:22:04,020 --> 00:22:05,990 ние на крајот допре секој број еднаш. 482 00:22:05,990 --> 00:22:09,054 А во вториот ред, да спојат овие списоци на големината две, 483 00:22:09,054 --> 00:22:10,470 моравме да допре секој елемент еднаш. 484 00:22:10,470 --> 00:22:12,690 А потоа тука навистина јасно во последниот ред, 485 00:22:12,690 --> 00:22:15,430 моравме да се допре секоја од овие елементи еднаш, но само еднаш, 486 00:22:15,430 --> 00:22:18,400 па тука лежи, тогаш, нашиот n најавите n. 487 00:22:18,400 --> 00:22:21,780 >> И сега само да се направат работите малку повеќе формални за само еден миг, ако 488 00:22:21,780 --> 00:22:24,260 беа до сега анализира овој на еден вид на повисоко ниво 489 00:22:24,260 --> 00:22:28,340 и да се обидат да се одлучи, добро како може да се обратите за изразување на 490 00:22:28,340 --> 00:22:31,780 трчање време на овој алгоритам само со гледање на неа, и не 491 00:22:31,780 --> 00:22:33,590 со користење на contrived пример? 492 00:22:33,590 --> 00:22:36,590 Па, колку време ќе ви кажам чекор како оваа во жолта ќе ги преземе, 493 00:22:36,590 --> 00:22:37,173 ако n <2 врати? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Тоа е голема О на што? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Па јас гледам еден, па уште еден чекор, можеби два чекори, бидејќи тоа е ако 498 00:22:44,540 --> 00:22:47,110 а потоа се врати, но тоа е постојана време, нели? 499 00:22:47,110 --> 00:22:49,960 Па рековме О (1), и тоа е како ќе го изразат тоа. 500 00:22:49,960 --> 00:22:51,480 Т, само да се работи време. 501 00:22:51,480 --> 00:22:54,150 n е големината на влез, па t (n), само стилизиран начин 502 00:22:54,150 --> 00:22:56,330 на велејќи дека работи време подадената на големина n 503 00:22:56,330 --> 00:23:00,220 ќе биде од редот на постојана време, во O (1). 504 00:23:00,220 --> 00:23:01,970 >> Но во спротивно, она што за ова? 505 00:23:01,970 --> 00:23:05,660 Како би ја изразуваат трчање време на овој жолта линија? 506 00:23:05,660 --> 00:23:06,250 Т на што? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Можете вид на може да измамник тука и одговори на моето прашање циклично. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Значи, ако трчање време во принцип ние само велат дека е T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 И сега сте вид на punting тука и велејќи дека, добро, само ги сортирате левата половина, 513 00:23:22,490 --> 00:23:23,920 а потоа ги сортирате десната половина. 514 00:23:23,920 --> 00:23:27,520 Како може ние симболично претставуваат трчање време на овој жолта линија? 515 00:23:27,520 --> 00:23:28,020 Т на што? 516 00:23:28,020 --> 00:23:29,360 Што е големината на влез? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 N текот на две. 519 00:23:31,057 --> 00:23:32,140 Зошто не можам да го кажам тоа? 520 00:23:32,140 --> 00:23:36,449 И тогаш ова е уште една T (n / 2), а потоа повторно, ако јас се спојат две сортирани половини, 521 00:23:36,449 --> 00:23:38,615 колку елементи одам мора да допре вкупно? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 За да можам да го изразат тоа, само за да биде вид на фенси, 525 00:23:42,790 --> 00:23:44,430 како трчање време, воопшто. 526 00:23:44,430 --> 00:23:51,140 T (n) е само трчање време на T (n / 2), плус T (n / 2), лево и десно половина половина, 527 00:23:51,140 --> 00:23:55,360 плус О (n), што е веројатно n чекори, но можеби, ако јас сум со користење на два прста, 528 00:23:55,360 --> 00:23:57,960 тоа е двојно повеќе чекори, но тоа е линеарна. 529 00:23:57,960 --> 00:24:00,440 Тоа е некои број на чекори дека е фактор на n, 530 00:24:00,440 --> 00:24:02,270 па ние би можеле да го изразат тоа што е оваа. 531 00:24:02,270 --> 00:24:05,550 И ова е местото каде што сега ние ќе залог на назад на нашата гимназија по математика учебник 532 00:24:05,550 --> 00:24:10,290 ние сме дека повторување на крајот завршува изедначување ова, n пати најавите n, 533 00:24:10,290 --> 00:24:12,530 ако навистина прават математика повеќе формално. 534 00:24:12,530 --> 00:24:13,950 >> Па тоа е само две перспективи. 535 00:24:13,950 --> 00:24:17,500 Еден бројно со хард-кодирани репрезентативен примерок 536 00:24:17,500 --> 00:24:21,140 користејќи осум броеви, и повеќе општ поглед на тоа како стигнавме таму. 537 00:24:21,140 --> 00:24:25,670 Но, она што е навистина интересно овде е, пак, овој поим на велосипед. 538 00:24:25,670 --> 00:24:26,900 Јас не сум се користи за петелки. 539 00:24:26,900 --> 00:24:29,860 Јас сум вид на дефинирање на нешто во однос на себе, 540 00:24:29,860 --> 00:24:31,950 не само со овој математичка функција, 541 00:24:31,950 --> 00:24:34,860 но исто така и во смисла на овој псевдо код. 542 00:24:34,860 --> 00:24:38,260 Оваа псевдо код е рекурзивен со тоа што две од своите редови 543 00:24:38,260 --> 00:24:42,310 во суштина го кажувам да одат се користат за решавање на помали 544 00:24:42,310 --> 00:24:45,400 проблемот на помала големина, а потоа повторно и повторно 545 00:24:45,400 --> 00:24:48,820 и повторно се додека ние го омаловажавам до овој т.н. база случај. 546 00:24:48,820 --> 00:24:52,810 >> Значи, да всушност подготви повеќе привлечни се-далеку од тоа како што следи. 547 00:24:52,810 --> 00:24:58,420 Дозволете ми да одат во gedit и ги погледнеме некои од денешните изворниот код, 548 00:24:58,420 --> 00:24:59,930 особено овој пример тука. 549 00:24:59,930 --> 00:25:03,709 Сигма 0, која очигледно додава бројките со n. 550 00:25:03,709 --> 00:25:05,750 Да видиме што е познато и непознати тука. 551 00:25:05,750 --> 00:25:08,690 Прво имаме неколку вклучува, па ништо ново таму. 552 00:25:08,690 --> 00:25:09,190 Прототип. 553 00:25:09,190 --> 00:25:11,370 Јас сум малку маглива на ова по неколку дена, 554 00:25:11,370 --> 00:25:13,790 но што велиме прототип на функција е? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 ПУБЛИКАТА: [Беззвучен]. 557 00:25:16,015 --> 00:25:16,905 ЗВУЧНИЦИ 1: Што е тоа? 558 00:25:16,905 --> 00:25:17,800 ПУБЛИКАТА: Ние го најавува. 559 00:25:17,800 --> 00:25:18,883 ЗВУЧНИЦИ 1: Ние го најавува. 560 00:25:18,883 --> 00:25:22,290 Значи сте настава ѕвекот, еј, всушност не спроведување на ова сеуште, 561 00:25:22,290 --> 00:25:25,740 но некаде во оваа датотека, веројатно, ќе биде функција наречена што? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Сигма. 564 00:25:27,540 --> 00:25:30,540 И ова е само ветување дека тоа се случува да изгледа вака. 565 00:25:30,540 --> 00:25:33,720 Тоа се случува да се земе цел број како input-- и јас може да биде поексплицитни 566 00:25:33,720 --> 00:25:36,570 и велат int n --and тоа е ќе се врати int, 567 00:25:36,570 --> 00:25:39,900 но запирка средства, мм, ќе добие околу за спроведување на овој малку подоцна. 568 00:25:39,900 --> 00:25:40,989 Повторно, ѕвекот е нем. 569 00:25:40,989 --> 00:25:43,280 Тоа е само ќе треба да се знае што ви го кажам врвот до дното, 570 00:25:43,280 --> 00:25:45,765 па ние треба барем да даде тоа навестување на она што е да дојде. 571 00:25:45,765 --> 00:25:47,330 >> Сега да ги погледнеме главните тука. 572 00:25:47,330 --> 00:25:50,040 Ајде да дојдете тука и види она што главната прави. 573 00:25:50,040 --> 00:25:53,780 Тоа не е толку долго на функцијата и всушност конструкција тука е познато. 574 00:25:53,780 --> 00:25:57,590 Јас декларирате променлива n, а потоа Јас отегчавам корисникот повторно и повторно 575 00:25:57,590 --> 00:26:01,880 за позитивен цел број со користење getInt, и единствениот излез од овој циклус 576 00:26:01,880 --> 00:26:03,280 еднаш на корисникот почитуваат. 577 00:26:03,280 --> 00:26:05,670 Направите додека, ние се користи за да отегчавам на корисникот на тој начин. 578 00:26:05,670 --> 00:26:06,670 Сега ова е интересно. 579 00:26:06,670 --> 00:26:08,510 Јас прогласи int наречен "одговор". 580 00:26:08,510 --> 00:26:11,420 Јас го вратената вредност се додели на функција наречена "Сигма". 581 00:26:11,420 --> 00:26:15,200 Јас не знам што се уште, но Се сеќавам прогласување пред една момент. 582 00:26:15,200 --> 00:26:18,310 И тогаш јас сум поминува во вредност, која на корисникот внесе во, n, 583 00:26:18,310 --> 00:26:20,420 а потоа јас го пријавите одговорот. 584 00:26:20,420 --> 00:26:22,260 Па ајде да дојдете назад за само еден миг. 585 00:26:22,260 --> 00:26:28,620 Ајде да одиме напред во овој директориум, осигурајте се сигма 0, а всушност ја извршите оваа програма 586 00:26:28,620 --> 00:26:30,490 и да видиме што се случува. 587 00:26:30,490 --> 00:26:35,930 Значи, ако јас одам напред и да ја стартувате оваа програма, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 и јас напишете во позитивна цел број како две, Сигма, 589 00:26:40,139 --> 00:26:43,180 како грчки симбол имплицира, е само случува да додадете до сите броеви од 590 00:26:43,180 --> 00:26:44,320 нула на до две. 591 00:26:44,320 --> 00:26:46,560 Значи 0 плус 1 плус 2. 592 00:26:46,560 --> 00:26:48,830 Значи ова се надевам дека треба да ми даде 3. 593 00:26:48,830 --> 00:26:49,750 Тоа е се што прави. 594 00:26:49,750 --> 00:26:52,690 И слично на тоа, ако јас ја извршите оваа повторно и јас го даде бројот три, 595 00:26:52,690 --> 00:26:56,721 тоа е 3 плус 2, па тоа е 5, плус 1 треба да ми даде 6. 596 00:26:56,721 --> 00:26:59,470 А потоа, ако јас се навистина луди и почнете да пишувате во поголеми броеви, 597 00:26:59,470 --> 00:27:01,290 тоа треба да ми даде поголем и поголем износ. 598 00:27:01,290 --> 00:27:02,250 Па тоа е се. 599 00:27:02,250 --> 00:27:04,010 >> Значи она што не сигма изгледа? 600 00:27:04,010 --> 00:27:05,430 Па, тоа е прилично јасна. 601 00:27:05,430 --> 00:27:08,940 Тоа е како да се имплементира ова во изминатите неколку недели. 602 00:27:08,940 --> 00:27:11,120 "Int" ќе биде тип на враќање. 603 00:27:11,120 --> 00:27:14,330 Сигма е името, и тоа трае променлива m наместо n. 604 00:27:14,330 --> 00:27:15,940 Ќе се смени до врвот. 605 00:27:15,940 --> 00:27:17,340 Тогаш ова е само здрав разум чек. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Ќе видиме зошто во еден момент. 608 00:27:19,950 --> 00:27:24,220 Сега Изјавувам друга променлива, сума, да се иницијализира на нула. 609 00:27:24,220 --> 00:27:28,140 Тогаш имам За јамка процесирањето, очигледно за јасност, 610 00:27:28,140 --> 00:27:33,810 од i = 1 на до некоја = m, кое е без оглед на корисникот внесе во, а потоа 611 00:27:33,810 --> 00:27:35,690 подигање на збирот вака. 612 00:27:35,690 --> 00:27:37,360 А потоа се врати сумата. 613 00:27:37,360 --> 00:27:38,440 >> Значи неколку прашања. 614 00:27:38,440 --> 00:27:42,370 Еден, тврдам во мојот коментар дека ова избегнува ризикот од бесконечна јамка. 615 00:27:42,370 --> 00:27:45,620 Зошто би преминува во негативен број предизвикаат, потенцијално, бесконечна јамка? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> ПУБЛИКАТА: Вие никогаш не ќе стигнам м. 618 00:27:51,290 --> 00:27:52,880 >> ЗВУЧНИЦИ 1: Никогаш не се постигне м. 619 00:27:52,880 --> 00:27:55,880 Но м е донесен во, па ајде сметаат едноставен пример. 620 00:27:55,880 --> 00:27:58,510 Ако m е донесен од страна на корисникот како негативна. 621 00:27:58,510 --> 00:28:00,059 Без оглед на главните. 622 00:28:00,059 --> 00:28:01,850 Главната нè штити од тоа исто така, па јас сум само 623 00:28:01,850 --> 00:28:04,680 се навистина анален со сигма исто така да бидете сигурни дека 624 00:28:04,680 --> 00:28:06,540 дека влезот не може да биде негативен. 625 00:28:06,540 --> 00:28:10,130 Значи, ако m е негативен, нешто како негативна. 626 00:28:10,130 --> 00:28:11,930 Што ќе се случи? 627 00:28:11,930 --> 00:28:14,390 Па, јас ќе се се иницијализира на еден, 628 00:28:14,390 --> 00:28:19,060 и тогаш ќе биде помалку од или еднакво на m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Стојат од страна. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Дека was-- за да не, ајде да Никта оваа приказна. 633 00:28:29,370 --> 00:28:32,780 Јас не побара тоа прашање, бидејќи ризикот дека јас сум алудирајќи на 634 00:28:32,780 --> 00:28:38,360 нема да се случи, затоа што е секогаш ќе биде поголема than-- ред, 635 00:28:38,360 --> 00:28:39,871 Го повлекувам тоа прашање. 636 00:28:39,871 --> 00:28:40,370 Во ред. 637 00:28:40,370 --> 00:28:42,030 Ајде да се фокусира само на овој дел овде. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Зошто Изјавувам некои надвор од јамка? 640 00:28:48,830 --> 00:28:52,010 Известување на линија 49 Јас сум прогласена з внатрешноста на јамка, 641 00:28:52,010 --> 00:28:54,950 но онлајн 48 Јас сум прогласена за некои надвор. 642 00:28:54,950 --> 00:28:55,695 Да. 643 00:28:55,695 --> 00:28:56,611 ПУБЛИКАТА: [Беззвучен]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 ЗВУЧНИЦИ 1: Секако. 646 00:28:59,400 --> 00:29:03,360 Значи прво и основно јас секако не сакаат да пријават и се иницијализира Збирот 647 00:29:03,360 --> 00:29:06,130 на нула во внатрешноста на циклус на секоја итерација, 648 00:29:06,130 --> 00:29:09,370 бидејќи ова јасно ќе победи Целта на сумирање на броеви. 649 00:29:09,370 --> 00:29:11,770 Јас би ги менува вредноста назад до нула. 650 00:29:11,770 --> 00:29:17,992 И, исто така, она што е уште повеќе arcane Причината за истата дизајн одлука? 651 00:29:17,992 --> 00:29:18,954 Да. 652 00:29:18,954 --> 00:29:20,279 >> ПУБЛИКАТА: [Беззвучен]. 653 00:29:20,279 --> 00:29:21,070 ЗВУЧНИЦИ 1: Токму така. 654 00:29:21,070 --> 00:29:24,060 Сакам да го пристап надвор на јамка премногу за тоа што линија? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 На 53. 657 00:29:26,400 --> 00:29:29,910 И врз основа на нашето правило на палецот од неколку предавања пред, 658 00:29:29,910 --> 00:29:33,680 променливи се scoped, навистина, на кадрави загради, кои ги опфаќаат. 659 00:29:33,680 --> 00:29:38,190 Значи, ако јас не ја декларираат Збирот внатре на овие надворешните големи загради, 660 00:29:38,190 --> 00:29:40,250 Јас не може да го користи во согласност 53. 661 00:29:40,250 --> 00:29:43,160 Стави некој друг начин, ако јас прогласи сума во тука, или дури и во рамките на 662 00:29:43,160 --> 00:29:45,410 За телефонска линија, не можев да го пристап во 53. 663 00:29:45,410 --> 00:29:47,150 Променливата ефикасно ќе исчезнат. 664 00:29:47,150 --> 00:29:48,579 Па неколку причини таму. 665 00:29:48,579 --> 00:29:50,370 Но сега да се вратиме и да видиме што се случува. 666 00:29:50,370 --> 00:29:51,730 Па сигма добива се нарекува. 667 00:29:51,730 --> 00:29:55,640 Тоа додава до 1 плус 2 или 1 плус 2 плус 3, а потоа се враќа на вредноста, 668 00:29:55,640 --> 00:29:59,660 продавници тоа во одговорот и printf тука Затоа гледам на екранот. 669 00:29:59,660 --> 00:30:03,079 Значи ова е она што ние ќе го наречеме итеративен пристап, каде повторување само 670 00:30:03,079 --> 00:30:03,870 значи со помош на телефонска линија. 671 00:30:03,870 --> 00:30:06,900 A За јамка, додека јамка, а направите додека јамка, само прави нешто повторно 672 00:30:06,900 --> 00:30:08,380 и повторно и повторно. 673 00:30:08,380 --> 00:30:13,505 >> Но сигма е вид на уредни функција во кој би можел да се имплементира поинаку. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Што за тоа, што само да се вид на ладно, 676 00:30:19,120 --> 00:30:21,880 дозволете ми да навистина се ослободи на многу забава 677 00:30:21,880 --> 00:30:24,380 бидејќи оваа функција е навистина едноставно. 678 00:30:24,380 --> 00:30:27,780 Ајде да омаловажавам одредување на само на своите четири основни линии 679 00:30:27,780 --> 00:30:30,410 и да се ослободи од сите коментари и големи загради. 680 00:30:30,410 --> 00:30:34,334 Ова е вид на умот-дува алтернатива имплементација. 681 00:30:34,334 --> 00:30:37,250 Добро, можеби не ум-дува, но тоа е вид на посекси, сите во право, 682 00:30:37,250 --> 00:30:39,920 да се погледне на овој многу повеќе посочно. 683 00:30:39,920 --> 00:30:43,120 Со само четири линии на код, Јас прв пат ја имаат оваа разумност проверка. 684 00:30:43,120 --> 00:30:45,732 Ако m е помалку од или еднакво на нула, сигма прави никаква смисла. 685 00:30:45,732 --> 00:30:48,190 Тоа само би требало да биде во овој случај за позитивни броеви, 686 00:30:48,190 --> 00:30:50,340 па јас сум само ќе врати нула произволно 687 00:30:50,340 --> 00:30:53,210 така што ние барем имаме некои т.н. база случај. 688 00:30:53,210 --> 00:30:54,430 >> Но, тука е убавината. 689 00:30:54,430 --> 00:30:59,930 Интегритет на оваа идеја, додавајќи дека броеви од 1 до n, или m во овој случај, 690 00:30:59,930 --> 00:31:02,630 може да се направи според начинот на полагање на префрлуваат одговорноста. 691 00:31:02,630 --> 00:31:04,947 Па, што е сума од 1 до м? 692 00:31:04,947 --> 00:31:05,780 Па, знаеш што? 693 00:31:05,780 --> 00:31:11,949 Тоа е исто како збир на м плус сума од 1 до m минус 1. 694 00:31:11,949 --> 00:31:12,740 И знаеш што? 695 00:31:12,740 --> 00:31:13,940 Што е сигма од м минус 1? 696 00:31:13,940 --> 00:31:17,860 Па, ако сте вид на следат овој логично, тоа е исто како м минус 1 697 00:31:17,860 --> 00:31:21,415 плус сигма од м минус 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Па можете да вид на just-- ова е како, ако сте само 700 00:31:26,012 --> 00:31:28,220 обидувајќи се да одиме на нерви на пријател и тие ви поставам едно прашање, 701 00:31:28,220 --> 00:31:31,344 можете вид на одговори со прашање, можете вид на може да ги задржи полагање на префрлуваат одговорноста. 702 00:31:31,344 --> 00:31:34,560 Но, она што е клучот е во тоа што ако продолжуваш правење на прашањето помали и помали 703 00:31:34,560 --> 00:31:36,910 и помали, ќе бидете не прашувајќи што е сигма 704 00:31:36,910 --> 00:31:39,116 на n, што е сигма од n, што е сигма од n? 705 00:31:39,116 --> 00:31:40,990 Прашувате што е сигма од n, што е сигма 706 00:31:40,990 --> 00:31:42,839 од n минус 1, што е сигма од n минус 2? 707 00:31:42,839 --> 00:31:44,880 На крајот на вашето прашање се случува да стане она што? 708 00:31:44,880 --> 00:31:50,250 Што е сигма од една или нула, некои многу мала вредност, 709 00:31:50,250 --> 00:31:52,220 и веднаш штом ќе се добие тоа, вашиот пријател, 710 00:31:52,220 --> 00:31:54,350 не се случува да побараат истото прашање повторно, 711 00:31:54,350 --> 00:31:55,975 сте само ќе да се каже, ох тоа е нула. 712 00:31:55,975 --> 00:31:58,490 Сме готови да игра овој вид глупаво циклична игра. 713 00:31:58,490 --> 00:32:02,950 >> Па рекурзијата е чин во програмирање на функција која себеси се нарекува. 714 00:32:02,950 --> 00:32:06,630 Оваа програма, кога состави и да ја стартувате, е ќе се однесуваат на ист начин, 715 00:32:06,630 --> 00:32:09,620 но она што е клучот е во тоа што во на функција наречена сигма, 716 00:32:09,620 --> 00:32:13,150 постои линија на код кадешто ние се јавувате, 717 00:32:13,150 --> 00:32:14,980 кои нормално би било лошо. 718 00:32:14,980 --> 00:32:21,160 На пример, што ако јас прв пат составена оваа, така бидете sigma-- 719 00:32:21,160 --> 00:32:22,710 направи сигма 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Позитивен цел број, ве молам, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Па што функција се чини дека биде, врз основа на еден тест, точни. 723 00:32:30,810 --> 00:32:34,917 Но, што ако јас се добие малку опасна и да го избришете т.н. база случај, 724 00:32:34,917 --> 00:32:37,750 и само велат, добро јас сум само што овој покомплицирано отколку што е. 725 00:32:37,750 --> 00:32:42,450 Ајде да се пресмета сигма со преземање на m и потоа додавање на 726 00:32:42,450 --> 00:32:44,564 во сигма од м минус еден? 727 00:32:44,564 --> 00:32:45,980 Па, што ќе се случи овде? 728 00:32:45,980 --> 00:32:47,140 Ајде да одзумирате. 729 00:32:47,140 --> 00:32:52,920 Ајде да го прекомпајлирате програма, освен тоа, повторно компајлирајте на програмата, 730 00:32:52,920 --> 00:33:00,450 а потоа подготвени ./sigma-1 зумирање, внесете позитивен цел број ве молам, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Колкумина од вас се подготвени да fess до види тоа? 733 00:33:04,430 --> 00:33:04,950 >> Во ред. 734 00:33:04,950 --> 00:33:06,690 Така што ова може да се случи за голем број на причини, 735 00:33:06,690 --> 00:33:09,148 и искрено оваа недела ние сме за да ви даде повеќе од нив. 736 00:33:09,148 --> 00:33:11,780 Но, во овој случај, обидете се на разумот наназад 737 00:33:11,780 --> 00:33:14,430 она што може да се случи овде? 738 00:33:14,430 --> 00:33:17,400 Сегментација грешка, ние, изјави минатата време, се однесува на еден сегмент на меморија. 739 00:33:17,400 --> 00:33:18,690 Нешто лошо се случило. 740 00:33:18,690 --> 00:33:21,550 Но, она што беше механички дека отиде криво 741 00:33:21,550 --> 00:33:25,000 тука, бидејќи на мојата отстранување на таа т.н. база случај, 742 00:33:25,000 --> 00:33:26,870 каде што се вратив на хард-кодирани вредност? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Што мислите беше во ред? 745 00:33:30,460 --> 00:33:31,219 Да. 746 00:33:31,219 --> 00:33:32,135 >> ПУБЛИКАТА: [Беззвучен]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 ЗВУЧНИЦИ 1: Ах. 749 00:33:36,970 --> 00:33:37,550 Добро прашање. 750 00:33:37,550 --> 00:33:39,508 Па големината на бројот дека сум бил сумирање 751 00:33:39,508 --> 00:33:41,920 доби толку голема што надминува големината на меморијата простор. 752 00:33:41,920 --> 00:33:44,640 Добра идеја, но не суштински ќе предизвика несреќата. 753 00:33:44,640 --> 00:33:48,230 Кои можат да предизвикаат број преливник, каде битовите само флип над 754 00:33:48,230 --> 00:33:51,760 и тогаш грешка навистина голем број за како негативен број, 755 00:33:51,760 --> 00:33:53,260 но тоа само по себе не ќе предизвика несреќата. 756 00:33:53,260 --> 00:33:55,509 Бидејќи на крајот на ден еден int се уште е 32 бита. 757 00:33:55,509 --> 00:33:57,640 Вие нема да случајно украде 33. малку. 758 00:33:57,640 --> 00:33:58,431 Но и добра мисла. 759 00:33:58,431 --> 00:33:58,984 Да. 760 00:33:58,984 --> 00:33:59,900 >> ПУБЛИКАТА: [Беззвучен]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 ЗВУЧНИЦИ 1: Методот никогаш не престане да работи, 763 00:34:02,300 --> 00:34:06,658 и навистина се нарекува повторно и повторно и повторно и повторно 764 00:34:06,658 --> 00:34:08,449 и повторно, и ниту еден од тие функции некогаш 765 00:34:08,449 --> 00:34:13,310 заврши, бидејќи нивната единствена линија на код себеси повикува повторно и повторно 766 00:34:13,310 --> 00:34:14,219 и повторно. 767 00:34:14,219 --> 00:34:16,080 И она што е навистина случува овде, а сега 768 00:34:16,080 --> 00:34:18,100 вид на може да се подготви овој сликовито. 769 00:34:18,100 --> 00:34:20,899 Дозволете ми да одам во текот на слика за само еден миг. 770 00:34:20,899 --> 00:34:22,940 Оваа слика, која на крајот ќе месо од 771 00:34:22,940 --> 00:34:26,336 во повеќе детали, за она што се случува внатрешноста на меморијата на вашиот компјутер. 772 00:34:26,336 --> 00:34:28,460 И излегува дека на на долниот дел од оваа слика 773 00:34:28,460 --> 00:34:29,709 е нешто што се нарекува на магацинот. 774 00:34:29,709 --> 00:34:31,920 Ова е еден дел од меморија, парче на RAM меморија, 775 00:34:31,920 --> 00:34:33,920 тоа е само користи во секое време функција се нарекува. 776 00:34:33,920 --> 00:34:36,239 Во секое време ви, програмер, јавете се на функција, 777 00:34:36,239 --> 00:34:38,860 оперативниот систем, како Mac OS, Windows или Linux, 778 00:34:38,860 --> 00:34:41,920 зграпчува еден куп на бајти, можеби неколку килобајти, можеби неколку мегабајти 779 00:34:41,920 --> 00:34:44,590 меморија, ги рацете за вас, а потоа им овозможува на 780 00:34:44,590 --> 00:34:47,650 ќе се кандидира на вашиот функција со користење на без оглед на променливи што ви треба. 781 00:34:47,650 --> 00:34:50,699 И ако тогаш се јавите на друг функција и друга функција, 782 00:34:50,699 --> 00:34:53,590 ќе добие уште една парче на меморија и уште парче од меморијата. 783 00:34:53,590 --> 00:34:57,090 >> И, навистина, ако овие зелени коцки од Annenberg претставуваат дека меморијата, 784 00:34:57,090 --> 00:34:59,870 тука е она што се случува првиот кога ќе се јавите функција сигма. 785 00:34:59,870 --> 00:35:04,510 Тоа е како ставање на послужавник вака на она што е првично празен оџакот. 786 00:35:04,510 --> 00:35:07,142 Но, тогаш, ако тоа послужавник се нарекува себеси, така да се каже, 787 00:35:07,142 --> 00:35:08,850 повикувајќи друг пример на СИГМА, тоа е 788 00:35:08,850 --> 00:35:11,640 како да прашуваш оперативниот систем, ooh, треба малку повеќе меморија, 789 00:35:11,640 --> 00:35:12,520 дај ми го тоа. 790 00:35:12,520 --> 00:35:14,840 И тогаш таа добива наредени на на врвот. 791 00:35:14,840 --> 00:35:18,030 Но, она што е клучот овде е дека првата лента е сеуште тука, 792 00:35:18,030 --> 00:35:20,620 бидејќи тој се повикува оваа втората лента. 793 00:35:20,620 --> 00:35:23,500 Сега меѓувреме, сигма јавите сигма, тоа е како да прашуваш за повеќе меморија. 794 00:35:23,500 --> 00:35:25,830 Добива наредени на овде. 795 00:35:25,830 --> 00:35:29,350 сигма јавите сигма, тоа е друга лента што добива наредени тука. 796 00:35:29,350 --> 00:35:32,942 И ако продолжите да го прават тоа, на крајот, каков вид на сајтот овој визуелен 797 00:35:32,942 --> 00:35:35,525 за таа шема, што ќе се се случи со магацинот на коцки? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Тоа се случува да го надмине износот на меморијата на вашиот компјутер има. 800 00:35:41,160 --> 00:35:45,790 И штом оваа зелена лента надминува хоризонтална линија 801 00:35:45,790 --> 00:35:49,410 над магацинот и над зборот грамада, што ќе се вратиме во иднина, 802 00:35:49,410 --> 00:35:50,410 тоа е лоша работа. 803 00:35:50,410 --> 00:35:52,810 Грамада е различен сегмент на меморија, 804 00:35:52,810 --> 00:35:55,190 и ако нека овие пепелниците купот и купот на, 805 00:35:55,190 --> 00:35:57,800 ви се случува да се надмине свој сегмент на меморија, 806 00:35:57,800 --> 00:36:00,420 и програма навистина се случува да се сруши. 807 00:36:00,420 --> 00:36:02,930 >> Сега како настрана, оваа идеја на рекурзијата, според тоа, 808 00:36:02,930 --> 00:36:06,500 јасно може да доведе до проблеми, но тоа не е нужно лоша работа. 809 00:36:06,500 --> 00:36:08,840 Бидејќи сметаат дека, по сите, how-- и можеби 810 00:36:08,840 --> 00:36:11,700 Ова се некои добивање навикнати да --how домот или како едноставна 811 00:36:11,700 --> 00:36:14,890 дека спроведувањето на Сигма беше. 812 00:36:14,890 --> 00:36:17,440 И ние нема да ги користат рекурзија сите дека многу во CS50, 813 00:36:17,440 --> 00:36:20,780 но во CS51, и навистина било класа каде што можете да манипулира со структури на податоци 814 00:36:20,780 --> 00:36:23,640 како дрвја или семејни стебла, кои имаат некои хиерархија, 815 00:36:23,640 --> 00:36:26,000 тоа е супер, супер корисни. 816 00:36:26,000 --> 00:36:29,750 Сега, како настрана, така што ќе како стремат компјутерски научници 817 00:36:29,750 --> 00:36:33,180 се запознаени со некои од Гугл домашните шеги, ако одите на Google 818 00:36:33,180 --> 00:36:36,345 и ќе се погледне до она што е дефиниција на, да речеме, рекурзија, влезе. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 УХ-нели. 821 00:36:41,110 --> 00:36:42,670 Како настрана, јас го зафрла неколку. 822 00:36:42,670 --> 00:36:45,470 Ова беше како 10 минути маене ова утро. 823 00:36:45,470 --> 00:36:52,890 Ако, исто така Гугл "накриво" известување со наведнување на главата slightly-- 824 00:36:52,890 --> 00:36:55,120 и тогаш ова е можеби повеќето грозоморно на сите 825 00:36:55,120 --> 00:36:57,286 бидејќи некој поминал како нивниот ден спроведување на овој 826 00:36:57,286 --> 00:36:59,880 неколку години ago-- ајде. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Ох, wait-- тоа е грешка. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Па се извршува на еден од Најголемата веб-сајтови во светот 831 00:37:11,410 --> 00:37:13,510 се овие глупави малку велигденски јајца. 832 00:37:13,510 --> 00:37:16,690 Тие веројатно се консумираат nontrivial бројот на линии на код 833 00:37:16,690 --> 00:37:19,280 само така што ќе може да има малку забава работи како што. 834 00:37:19,280 --> 00:37:22,140 Но барем сега ќе се некои од оние домашните шеги. 835 00:37:22,140 --> 00:37:28,330 >> Сега ајде да ги разгледаме во некои од бели лаги ние сме кажувам на крајот, 836 00:37:28,330 --> 00:37:30,707 и да почне да лупам назад некои слоеви технички 837 00:37:30,707 --> 00:37:32,790 така што навистина се разбере она што се случува 838 00:37:32,790 --> 00:37:34,860 и може да се разбере некои од заканите, 839 00:37:34,860 --> 00:37:38,060 како Shellshock, дека сега започна да станува 840 00:37:38,060 --> 00:37:41,110 на чело на секого внимание, барем во медиумите. 841 00:37:41,110 --> 00:37:45,810 Па тука е многу едноставна функција што не враќа ништо, празнина. 842 00:37:45,810 --> 00:37:46,790 Нејзиното име е трампа. 843 00:37:46,790 --> 00:37:50,880 Таа ги зема во две променливи и тоа не враќа ништо. 844 00:37:50,880 --> 00:37:52,260 Зема во a и b. 845 00:37:52,260 --> 00:37:53,337 Така брз демонстрација. 846 00:37:53,337 --> 00:37:54,170 Ние донесе овие горе. 847 00:37:54,170 --> 00:37:56,100 Ние, како може да потрае малку се скрши тука за само еден миг 848 00:37:56,100 --> 00:37:57,250 и имаат малку нешто да се напие. 849 00:37:57,250 --> 00:38:00,120 Ако некој не би ум приклучување мене се тука за само еден миг. 850 00:38:00,120 --> 00:38:01,830 Како за вас во канелени кошула? 851 00:38:01,830 --> 00:38:02,335 Ајде до. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Само еден денес. 854 00:38:05,260 --> 00:38:06,251 Ви благодарам, иако. 855 00:38:06,251 --> 00:38:08,000 Добро, и ние имаме кои доаѓаат тука? 856 00:38:08,000 --> 00:38:08,660 Што е вашето име? 857 00:38:08,660 --> 00:38:09,360 >> ЗВУЧНИЦИ 4: Лаура. 858 00:38:09,360 --> 00:38:09,740 >> ЗВУЧНИЦИ 1: Лаура. 859 00:38:09,740 --> 00:38:10,370 Ајде до. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Па Лаура, многу едноставна предизвик денес. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Убаво да се Ио се исполнат. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Во ред. 866 00:38:16,910 --> 00:38:21,179 Значи имаме малку млеко овде и имаме некои сок од портокал овде 867 00:38:21,179 --> 00:38:23,345 и некои чаши дека ние позајмени од Annenberg денес. 868 00:38:23,345 --> 00:38:24,178 >> ЗВУЧНИЦИ 4: позајмени. 869 00:38:24,178 --> 00:38:27,240 ЗВУЧНИЦИ 1: И ќе одам напред и да ви даде половина чаша ова. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Во ред. 872 00:38:28,800 --> 00:38:30,750 И ние ќе ви даде половина чаша млеко. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 О, и само така што ќе може се сеќавам што тоа беше како, 875 00:38:35,890 --> 00:38:38,860 Се сетив да се донесе ова и за денес. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Во ред. 878 00:38:42,530 --> 00:38:45,470 Ако не би ум, ајде да видиме, ние може да ги стави над вашата очила 879 00:38:45,470 --> 00:38:46,560 ако сакаш. 880 00:38:46,560 --> 00:38:48,710 Ова ќе биде на светот од очите на Laura. 881 00:38:48,710 --> 00:38:49,210 Во ред. 882 00:38:49,210 --> 00:38:53,820 Значи вашата цел, со оглед две чаши течни тука, млеко и сок од портокал, 883 00:38:53,820 --> 00:38:58,370 е се разменуваат две содржини, така што на сок од портокал оди во млеко чаша 884 00:38:58,370 --> 00:39:00,710 и млекото оди во сок од портокал куп. 885 00:39:00,710 --> 00:39:02,359 >> ЗВУЧНИЦИ 4: Дали можам да добијам друг чаша? 886 00:39:02,359 --> 00:39:05,650 ЗВУЧНИЦИ 1: Јас сум толку мило те праша, иако тоа би било многу подобро снимка 887 00:39:05,650 --> 00:39:06,710 ако не сте го праша. 888 00:39:06,710 --> 00:39:10,620 Но да, можеме да ви понудиме една третина чаша тоа е празен, се разбира. 889 00:39:10,620 --> 00:39:11,120 Во ред. 890 00:39:11,120 --> 00:39:12,300 Па се разменуваат содржината таму. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Многу убаво. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Многу добар. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Го правиш ова извонредно внимателно. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 И чекор три. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Во ред. 901 00:39:31,350 --> 00:39:31,930 Одличен. 902 00:39:31,930 --> 00:39:33,930 Голема аплауз ќе биде добро за Лаура. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Во ред. 905 00:39:37,000 --> 00:39:40,790 Имаме малку разделба подарок за вас, но дозволете ми да ги преземат овие. 906 00:39:40,790 --> 00:39:42,620 Ви благодарам многу. 907 00:39:42,620 --> 00:39:46,170 Така едноставен пример, иако, да се покаже дека ако не 908 00:39:46,170 --> 00:39:48,300 сакате да се разменуваат содржината на два контејнери, 909 00:39:48,300 --> 00:39:52,360 или ајде да ги наречеме променливи, ви треба некои привремено чување 910 00:39:52,360 --> 00:39:56,710 на сцената еден од содржината во толку дека всушност можете да го направите на swap. 911 00:39:56,710 --> 00:40:01,790 Па навистина, ова изворниот код тука во C е претставник на токму тоа. 912 00:40:01,790 --> 00:40:06,340 Ако сок од портокал е и млеко беше б, и сакавме да се разменуваат со две, 913 00:40:06,340 --> 00:40:08,990 може да се обиде нешто креативно со истурање еден во друг, 914 00:40:08,990 --> 00:40:11,031 но тоа веројатно не би заврши особено добро. 915 00:40:11,031 --> 00:40:15,260 И така ние се користи од трети чаша, повик тоа мали, Т-М-Па од Конвенцијата, 916 00:40:15,260 --> 00:40:19,370 и го стави на содржината на ОВ во тоа, тогаш се разменуваат една чаша, 917 00:40:19,370 --> 00:40:22,610 тогаш стави ОВ во оригинални чаша, на тој начин 918 00:40:22,610 --> 00:40:25,320 постигнување, токму онака како што Laura не, трампа. 919 00:40:25,320 --> 00:40:26,850 >> Значи, да го стори токму тоа. 920 00:40:26,850 --> 00:40:30,110 Дозволете ми да оди напред и да се отвори до еден пример што е 921 00:40:30,110 --> 00:40:32,720 всушност, наречен "бр разменуваат ", затоа што тоа не е 922 00:40:32,720 --> 00:40:36,180 едноставно направено како што мислат. 923 00:40:36,180 --> 00:40:41,190 Значи во оваа програма, да се забележи дека Јас сум со користење stdio.h, нашиот стар пријател. 924 00:40:41,190 --> 00:40:43,130 Имам прототип за swap до таму, кои 925 00:40:43,130 --> 00:40:45,450 значи нејзино спроведување на веројатно долу, 926 00:40:45,450 --> 00:40:48,050 и да видиме што оваа главна програмата ќе го направи за мене. 927 00:40:48,050 --> 00:40:52,020 Јас прв пат прогласи int x добива еден, а int y добива две. 928 00:40:52,020 --> 00:40:54,930 Значи мислам на оние што ОВ и млеко, соодветно. 929 00:40:54,930 --> 00:40:57,100 А потоа јас само имаат printf велејќи дека x е ова 930 00:40:57,100 --> 00:41:00,120 и y е ова, само за да можам да визуелно да видиме што се случува. 931 00:41:00,120 --> 00:41:03,810 Тогаш сум printf тврдејќи дека сум Замена на две, 932 00:41:03,810 --> 00:41:07,100 а потоа јас испечатите тврдат дека тие се заменети, 933 00:41:07,100 --> 00:41:09,300 и јас испечатите x и y се повторно. 934 00:41:09,300 --> 00:41:13,010 Значи овде во трампа е токму она што Лаура не, 935 00:41:13,010 --> 00:41:16,240 и токму она што го видов на на екранот пред една момент. 936 00:41:16,240 --> 00:41:19,380 >> Значи, да оди напред и да бидат длабоко разочарани. 937 00:41:19,380 --> 00:41:24,690 Не прават трампа, и да ја стартувате без swap, зумирање во на излез тука. 938 00:41:24,690 --> 00:41:28,320 Внесете x е 1, y е 2, Замена заменети. 939 00:41:28,320 --> 00:41:32,700 x е уште 1, и y се уште е 2. 940 00:41:32,700 --> 00:41:37,630 Значи иако, искрено, ова изгледа точно се допаѓа, иако повеќе технички, 941 00:41:37,630 --> 00:41:40,730 она што Лаура не, не чини да се работи. 942 00:41:40,730 --> 00:41:42,130 Значи, зошто е тоа така? 943 00:41:42,130 --> 00:41:46,630 Па, излегува дека кога ние пишуваме програма како оваа 944 00:41:46,630 --> 00:41:51,590 што има и главната, истакна тука, а потоа уште една функција, како и размената, 945 00:41:51,590 --> 00:41:54,230 Нагласени тука, што го нарекува, светот 946 00:41:54,230 --> 00:41:57,030 изгледа малку нешто како овие коцки пред една момент. 947 00:41:57,030 --> 00:42:00,440 Кога главната прво ќе се вика, тоа е како да прашуваш оперативен систем 948 00:42:00,440 --> 00:42:04,030 за малку меморија за сите локални променливи како x и y дека главната има, 949 00:42:04,030 --> 00:42:05,660 и тие завршуваат тука. 950 00:42:05,660 --> 00:42:10,920 Но, ако главната повици се разменуваат, како и главните минува да се разменуваат два аргументи, a и b, 951 00:42:10,920 --> 00:42:16,410 сок од портокал и млеко, тоа не е како предавање на сок од портокал и млеко 952 00:42:16,410 --> 00:42:17,500 Лора. 953 00:42:17,500 --> 00:42:21,300 Што компјутер го прави тоа, тоа е поминува копии од сок од портокал 954 00:42:21,300 --> 00:42:27,110 и копии од млеко за Лаура, така што она што е во крајна линија во внатрешноста на оваа лента 955 00:42:27,110 --> 00:42:32,510 е вредноста еден и два, или ОВ и млеко, но копии од него, 956 00:42:32,510 --> 00:42:34,790 така што во овој момент во приказната, има 957 00:42:34,790 --> 00:42:36,930 е ОВ и млеко во секоја од овие коцки. 958 00:42:36,930 --> 00:42:39,260 Има еден и два во секоја од овие коцки, 959 00:42:39,260 --> 00:42:41,720 и swap функција е навистина работат. 960 00:42:41,720 --> 00:42:46,090 Тоа им Замена внатре на вториот највисок послужавник, 961 00:42:46,090 --> 00:42:48,147 но тоа Замена нема влијание. 962 00:42:48,147 --> 00:42:49,980 И врз основа на само некои основниот принцип ние сме 963 00:42:49,980 --> 00:42:52,970 зборуваше за порано, и навистина Пред само неколку минути, што 964 00:42:52,970 --> 00:42:58,770 може да се објасни зошто се менува a и b во внатрешноста на swap 965 00:42:58,770 --> 00:43:05,560 нема ефект на x и y, иако Јас помина x и y на swap функција. 966 00:43:05,560 --> 00:43:08,750 Што е клучен збор што simplistically може да се објасни? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Мислам дека јас го слушнав тука? 969 00:43:12,627 --> 00:43:13,335 ПУБЛИКАТА: Враќање. 970 00:43:13,335 --> 00:43:14,085 ЗВУЧНИЦИ 1: Враќање? 971 00:43:14,085 --> 00:43:14,590 Не се вратат. 972 00:43:14,590 --> 00:43:15,895 Ајде да одиме со еден друг. 973 00:43:15,895 --> 00:43:16,395 Што е тоа? 974 00:43:16,395 --> 00:43:17,080 >> ПУБЛИКАТА: [Беззвучен]. 975 00:43:17,080 --> 00:43:20,000 >> ЗВУЧНИЦИ 1: Добро, така што можеме да return-- направи враќање работа во приказна, 976 00:43:20,000 --> 00:43:21,914 но таму е уште поедноставно објаснување. 977 00:43:21,914 --> 00:43:22,580 ПУБЛИКАТА: Обем. 978 00:43:22,580 --> 00:43:23,288 ЗВУЧНИЦИ 1: Обем. 979 00:43:23,288 --> 00:43:24,300 Ќе го земам обем. 980 00:43:24,300 --> 00:43:27,290 Значи обемот, се сеќавам каде нашите x и y објавени. 981 00:43:27,290 --> 00:43:30,840 Тие се прогласени внатре на главниот право тука. 982 00:43:30,840 --> 00:43:33,200 a и b, пак, се ефикасно прогласени за 983 00:43:33,200 --> 00:43:35,930 во внатрешноста на swap, не е сосема во на големи загради, но сепак 984 00:43:35,930 --> 00:43:37,690 во општата област на swap. 985 00:43:37,690 --> 00:43:40,560 И така навистина, a и b постојат само во овој послужавник 986 00:43:40,560 --> 00:43:44,850 од Annenberg, ова Вториот парче од код. 987 00:43:44,850 --> 00:43:49,500 Значи ние сме навистина промена на копија, но тоа не е навистина сето тоа корисно. 988 00:43:49,500 --> 00:43:52,190 >> Па ајде да ги разгледаме во ова малку пониско ниво. 989 00:43:52,190 --> 00:43:55,430 Одам да се врати во Извор директориум, 990 00:43:55,430 --> 00:43:58,330 и јас одам да се прво зумирате тука, и само 991 00:43:58,330 --> 00:44:02,290 да потврди дека сум во оваа поголем терминал, 992 00:44:02,290 --> 00:44:04,430 На програмата се уште се однесуваме како тоа. 993 00:44:04,430 --> 00:44:06,840 Да претпоставиме сега дека ова не е намерна. 994 00:44:06,840 --> 00:44:10,090 Јасно сакав трампа на работа, па таа се чувствува како бубачка. 995 00:44:10,090 --> 00:44:12,780 Сега би можел да започне додавајќи многу printf да мојот код, 996 00:44:12,780 --> 00:44:16,010 печатење х овде, y над тука, тука, б овде. 997 00:44:16,010 --> 00:44:18,220 Но, искрено, тоа е веројатно она што сте биле прави за неколку недели 998 00:44:18,220 --> 00:44:20,190 сега, во работното време и дома кога работат 999 00:44:20,190 --> 00:44:22,150 на psets обидува да најде некои грешки. 1000 00:44:22,150 --> 00:44:25,560 Но ќе видите, ако веќе не сте, тој проблем постави три се воведува 1001 00:44:25,560 --> 00:44:31,630 на команда наречен GDB, каде GDB, ГНУ дебагерот, 1002 00:44:31,630 --> 00:44:34,040 себе има бројни карактеристики кои всушност може да 1003 00:44:34,040 --> 00:44:38,160 нека се разбере ситуации вака, но повеќе убедливо, 1004 00:44:38,160 --> 00:44:39,940 решавање на проблеми и да се најде грешки. 1005 00:44:39,940 --> 00:44:40,940 Па јас ќе одам да го направите тоа. 1006 00:44:40,940 --> 00:44:44,770 Наместо ./noswap, јас сум наместо случува да се кандидира GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Со други зборови, јас ќе одам да се кандидира ми програмата не е во баш, нашиот нов пријател 1009 00:44:51,200 --> 00:44:51,850 денес. 1010 00:44:51,850 --> 00:44:53,970 Одам да се кандидира ми програма noswap внатре 1011 00:44:53,970 --> 00:44:56,900 на овој друг програма наречена GDB, која е дебагерот, кој 1012 00:44:56,900 --> 00:45:01,035 е програма која е дизајнирана да им помогне на сте луѓето ги најдете и избришете грешки. 1013 00:45:01,035 --> 00:45:03,410 Значи, ако јас хит Стартувај тука, има на крволочен количина на текст 1014 00:45:03,410 --> 00:45:04,868 дека навистина никогаш не треба да ја прочитате. 1015 00:45:04,868 --> 00:45:07,290 Тоа е во суштина одвраќање од брза, која 1016 00:45:07,290 --> 00:45:10,030 Одам да ја погоди Control-L да се нагоре на врвот таму. 1017 00:45:10,030 --> 00:45:11,800 Ова е GDB прашува. 1018 00:45:11,800 --> 00:45:15,550 Ако сакате да ја извршите оваа програма сега, како оваа мала измамник лист на денешната 1019 00:45:15,550 --> 00:45:21,860 слајд покажува, Run е првиот команди дека со цел да се воведе. 1020 00:45:21,860 --> 00:45:25,150 И јас сум само ќе да напишеш се кандидира до тука внатрешноста на GDB, 1021 00:45:25,150 --> 00:45:26,811 и навистина се стрча мојата програма. 1022 00:45:26,811 --> 00:45:29,310 Сега има некои дополнителни излези на екранот вака, 1023 00:45:29,310 --> 00:45:31,910 но тоа е само да се биде анален GDB и ни кажува што се случува. 1024 00:45:31,910 --> 00:45:34,451 Вие навистина не треба да се грижите за овие детали во моментов. 1025 00:45:34,451 --> 00:45:36,890 Но, она што е навистина кул за GDB, ако го направам ова again-- 1026 00:45:36,890 --> 00:45:42,100 Контрола-L отвора screen-- да си одам напред и тип "скрши главни", со што, 1027 00:45:42,100 --> 00:45:45,743 кога ќе притиснете Ентер, поставување она што е наречен брејк на noswap.c, 1028 00:45:45,743 --> 00:45:51,270 линија 16, каде што е GDB сфатиле мојата програма, всушност, 1029 00:45:51,270 --> 00:45:53,070 е, мојот функцијата всушност е. 1030 00:45:53,070 --> 00:45:55,070 Ова ќе ги игнорираат за сега но тоа е адреса 1031 00:45:55,070 --> 00:45:57,310 во меморијата конкретно на оваа функција. 1032 00:45:57,310 --> 00:46:00,240 Па сега кога ќе внесете ден, забележи она што е кул овде. 1033 00:46:00,240 --> 00:46:05,650 Мојата програма крши на линија јас изјави GDB за да го паузирате извршување на. 1034 00:46:05,650 --> 00:46:09,850 Па јас не треба да сега ги променам моите кодот, додадете некои printf е, прекомпајлирате тоа, повторување 1035 00:46:09,850 --> 00:46:13,300 тоа, промена, да додадете некои printf е, освен тоа, повторно компајлирајте ја, таа работи. 1036 00:46:13,300 --> 00:46:18,100 Јас само може да оди преку мојата програма чекор по чекор по чекор на човечки брзина, 1037 00:46:18,100 --> 00:46:20,880 не на Интел-во вид на брзина. 1038 00:46:20,880 --> 00:46:24,580 >> Па сега забележите оваа линија се појавува овде, и ако се вратам 1039 00:46:24,580 --> 00:46:27,800 во мојата програма во gedit, забележите дека тоа е всушност 1040 00:46:27,800 --> 00:46:29,280 самиот првата линија на кодот. 1041 00:46:29,280 --> 00:46:31,240 Има линија 16 во gedit. 1042 00:46:31,240 --> 00:46:34,610 Има линија 16 во GDB, па дури и иако ова црно и бело интерфејс 1043 00:46:34,610 --> 00:46:37,760 не е скоро како корисник пријателски, тоа значи 1044 00:46:37,760 --> 00:46:41,680 таа линија 16 не е извршена сеуште, но тоа е за да се биде. 1045 00:46:41,680 --> 00:46:46,220 Па ако навистина сум тип на печатење x, не printf, само печати x, 1046 00:46:46,220 --> 00:46:50,730 Јас се некои лажни вредност има на нула, бидејќи x се уште не е иницијализирана. 1047 00:46:50,730 --> 00:46:54,760 Па ќе одам до напишеш, или, ако сакате да биде фенси, само N за следната. 1048 00:46:54,760 --> 00:46:59,090 Но, кога ќе тип следната влезат, сега забележите што се движи кон линијата 17. 1049 00:46:59,090 --> 00:47:02,840 Па логично, ако сум егзекутирани линија 16 и јас сега пишувате печатење x, 1050 00:47:02,840 --> 00:47:03,640 што треба да се види? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Еден. 1053 00:47:05,520 --> 00:47:07,820 >> А сега ова е значително збунувачки. 1054 00:47:07,820 --> 00:47:11,260 2 $ е само стилизиран начин, ако сакате да се однесуваат на таа вредност подоцна, 1055 00:47:11,260 --> 00:47:12,510 може да се каже "долар потпише две." 1056 00:47:12,510 --> 00:47:13,480 Тоа е како назад референца. 1057 00:47:13,480 --> 00:47:14,570 Но, за сега, само да го игнорираат. 1058 00:47:14,570 --> 00:47:17,070 Она што е интересно е она што е на правото на еднакви знак. 1059 00:47:17,070 --> 00:47:21,000 И сега, ако сум тип следната повторно и печатење на Y, јас треба да се види 2. 1060 00:47:21,000 --> 00:47:23,870 Јас може да исто така, сега се печати x еднаш, и искрено, 1061 00:47:23,870 --> 00:47:27,130 ако јас сум добивање малку збунет како да каде сум, јас да напишете листа за листа 1062 00:47:27,130 --> 00:47:30,590 и само да видиме некои контекст околу момент јас сум всушност во. 1063 00:47:30,590 --> 00:47:35,180 И сега јас да напишете следната, а x е 1. 1064 00:47:35,180 --> 00:47:36,300 Сега сум тип следната. 1065 00:47:36,300 --> 00:47:37,710 Ох, y е 2. 1066 00:47:37,710 --> 00:47:40,750 И повторно, тоа е збунувачки, бидејќи излез GDB на 1067 00:47:40,750 --> 00:47:43,044 се commingled со мојот излез. 1068 00:47:43,044 --> 00:47:45,710 Но, ако се има предвид, од страна на обѕрне назад и напред во вашиот код 1069 00:47:45,710 --> 00:47:47,740 или врска од страна од страна можеби, ќе 1070 00:47:47,740 --> 00:47:51,020 види дека навистина сум само Менувајќи мојата програма. 1071 00:47:51,020 --> 00:47:54,620 >> Но се забележи она што се случува следно, буквално. 1072 00:47:54,620 --> 00:47:56,380 Еве линија 22. 1073 00:47:56,380 --> 00:48:01,315 Дозволете ми да одат преку него, а со тоа да се пресели на до 23, и ако јас се печати х сега, уште еден. 1074 00:48:01,315 --> 00:48:03,890 И ако јас y печати сега, уште еден. 1075 00:48:03,890 --> 00:48:05,820 Така што ова не е корисна вежба. 1076 00:48:05,820 --> 00:48:07,450 Значи, да се повтори ова. 1077 00:48:07,450 --> 00:48:10,069 Дозволете ми да се вратам до врвот и видот се кандидира повторно. 1078 00:48:10,069 --> 00:48:12,110 И тоа е велејќи дека програмата тоа е се дебагира 1079 00:48:12,110 --> 00:48:14,109 почна веќе, започна од почетокот. 1080 00:48:14,109 --> 00:48:15,420 Да, да го направиме тоа повторно. 1081 00:48:15,420 --> 00:48:22,000 И овој пат да го направиме следниот, следната, следниот, следната, следниот, 1082 00:48:22,000 --> 00:48:24,180 но сега работите се интересни. 1083 00:48:24,180 --> 00:48:27,760 Сега сакам да влезете во swap, па јас не тип следната. 1084 00:48:27,760 --> 00:48:34,380 Јас тип чекор, и сега забележите дека ми скокна на noswap.c линија 33. 1085 00:48:34,380 --> 00:48:37,240 Ако јас се вратиме на прегледувачот, што е линија 33? 1086 00:48:37,240 --> 00:48:40,500 Тоа е првиот вистински линија код во внатрешноста на swap. 1087 00:48:40,500 --> 00:48:44,150 Што е убаво, бидејќи сега можам вид на ѕиркаат наоколу и да се љубопитни 1088 00:48:44,150 --> 00:48:46,052 за тоа што се случува навистина таму. 1089 00:48:46,052 --> 00:48:46,760 Дозволете ми да печатите мали. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Стој. 1092 00:48:48,800 --> 00:48:51,438 Зошто мали имаат некои луда лажен ѓубре вредност? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 ПУБЛИКАТА: Тоа не е иницијализиран. 1095 00:48:56,120 --> 00:48:57,150 ЗВУЧНИЦИ 1: Не е иницијализиран. 1096 00:48:57,150 --> 00:49:00,270 И навистина, кога ќе ја стартувате програмата, ти си даде цел куп на меморија 1097 00:49:00,270 --> 00:49:03,392 од оперативниот систем, но не се иницијализира никакви вредности, 1098 00:49:03,392 --> 00:49:05,600 па што битови сте гледате тука, иако тоа е 1099 00:49:05,600 --> 00:49:07,770 овој луд големи негативни број, едноставно значи 1100 00:49:07,770 --> 00:49:10,750 дека тие се остатоци од некои претходни користење на тоа RAM меморија, 1101 00:49:10,750 --> 00:49:13,050 иако не сум мене тоа се потребни уште. 1102 00:49:13,050 --> 00:49:17,086 Па сега јас ќе одам да се оди напред и видот следната, и ако јас сега пишувате печатење мали, 1103 00:49:17,086 --> 00:49:17,835 што треба да се види? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Без оглед на вредноста на беше, a е првиот аргумент, само 1106 00:49:23,360 --> 00:49:25,550 како X е првиот нешто се пренесува во, 1107 00:49:25,550 --> 00:49:30,450 па и x треба да бидат исти, па печати мали треба да ми се печати една. 1108 00:49:30,450 --> 00:49:36,360 >> Па што ќе видите во проблем сет три е еден туториал на сорти на GDB, 1109 00:49:36,360 --> 00:49:40,020 но сфати дека ова е почеток на изглед на алатка која, всушност, ќе 1110 00:49:40,020 --> 00:49:42,774 да ви помогне да ги реши проблемите толку многу поефикасно. 1111 00:49:42,774 --> 00:49:44,690 Она што ние сме на крајот случува да се направи во средата 1112 00:49:44,690 --> 00:49:48,180 е да започнете да лупам назад неколку слоеви и се отстранат некои помошни тркала. 1113 00:49:48,180 --> 00:49:50,496 Дека нешто што се нарекува стринг ние сме се користи за некое време, 1114 00:49:50,496 --> 00:49:53,370 ние си оди за да полека го одземат тоа од вас и да почнам да зборувам за 1115 00:49:53,370 --> 00:49:55,725 нешто повеќе езотерично познат како char *, 1116 00:49:55,725 --> 00:49:59,550 но ние си оди за да се направи ова убаво и нежно на прв, иако покажувачи, 1117 00:49:59,550 --> 00:50:02,730 како тие се нарекува, може да направи некои Многу лоши работи ако злоупотребувани, 1118 00:50:02,730 --> 00:50:06,040 од страна гледајќи во малку claymation од нашиот пријател Ник Parlante од Стенфорд 1119 00:50:06,040 --> 00:50:09,670 Универзитет, професор во компјутер науката кои се стави заедно овој преглед 1120 00:50:09,670 --> 00:50:11,075 на она што е да дојде оваа среда. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [Видео репродукција] 1123 00:50:13,400 --> 00:50:13,900 Еј, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Се разбудам. 1126 00:50:15,780 --> 00:50:17,240 Тоа е време за покажувачот забава. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Што е тоа? 1129 00:50:19,350 --> 00:50:21,150 Учат за покажувачи? 1130 00:50:21,150 --> 00:50:22,050 Ох, стрина! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END видео репродукција] 1133 00:50:23,730 --> 00:50:25,396 ЗВУЧНИЦИ 1: Тоа што го чека во среда. 1134 00:50:25,396 --> 00:50:26,440 Ќе се видиме тогаш. 1135 00:50:26,440 --> 00:50:27,106 [Видео репродукција] 1136 00:50:27,106 --> 00:50:30,420 -И сега, длабоки мисли, од Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Зошто сме ние учење Ц? 1139 00:50:35,900 --> 00:50:36,785 Зошто не А +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Смеа] 1142 00:50:40,910 --> 00:50:42,160 >> [END видео репродукција]