1 00:00:00,000 --> 00:00:00,030 2 00:00:00,030 --> 00:00:00,460 >> Давид Малан: У реду. 3 00:00:00,460 --> 00:00:01,094 Вратили смо се. 4 00:00:01,094 --> 00:00:04,260 Дакле, у овом сегменту о програмима који Мислио сам да бих је мешавина ствари. 5 00:00:04,260 --> 00:00:06,340 Један, до мало нешто Хандс-Он, 6 00:00:06,340 --> 00:00:08,690 мада користећи више разигран програмирање енвиронмент-- 7 00:00:08,690 --> 00:00:11,620 онај који је демонстративни од управо то врсте идеја 8 00:00:11,620 --> 00:00:14,220 смо причали, али мало више формално. 9 00:00:14,220 --> 00:00:18,200 Два, погледати неке од су више техничке начине 10 00:00:18,200 --> 00:00:21,520 да би програмер ствари решити Проблеми попут трага проблем 11 00:00:21,520 --> 00:00:24,530 да смо гледали раније и такође више фундаментално 12 00:00:24,530 --> 00:00:26,020 Занимљиво проблем сортирање. 13 00:00:26,020 --> 00:00:28,840 >> Ми смо мислили од старта да је именик је поредани, 14 00:00:28,840 --> 00:00:31,980 али то само по себи је заправо нека врста тежак проблем са много различитих начина 15 00:00:31,980 --> 00:00:32,479 да га реши. 16 00:00:32,479 --> 00:00:34,366 Тако ћемо користити их као класа проблема 17 00:00:34,366 --> 00:00:36,740 Представник ствари које могу бити решени у целини. 18 00:00:36,740 --> 00:00:38,980 А онда ћемо причати о у неким детаљима који 19 00:00:38,980 --> 00:00:42,360 се зову податке струцтурес-- одгајивач начин као што су повезане листе 20 00:00:42,360 --> 00:00:46,290 и хасх табеле и дрвеће које програмер би заправо 21 00:00:46,290 --> 00:00:48,890 користе и генерално користи на табли да сликам 22 00:00:48,890 --> 00:00:51,840 слика онога што он или она предвиђа за имплементацију 23 00:00:51,840 --> 00:00:52,980 неки комад софтвера. 24 00:00:52,980 --> 00:00:55,130 >> Дакле, хајде да урадимо руке-на делу први. 25 00:00:55,130 --> 00:01:00,090 Дакле, само се руке прљаве са неким животну средину тзв сцратцх.мит.еду. 26 00:01:00,090 --> 00:01:02,636 То је алат који користимо у нашем додипломски класи. 27 00:01:02,636 --> 00:01:04,510 Иако је дизајниран за децу од 12 и више, 28 00:01:04,510 --> 00:01:07,570 ми га користити за горе део тог поприлицно 29 00:01:07,570 --> 00:01:10,020 пошто је то лепо, забавно графички начин учења 30 00:01:10,020 --> 00:01:12,160 нешто мало о програмирању. 31 00:01:12,160 --> 00:01:17,600 Па иду у тај УРЛ, где сте Требало би да видите страницу сасвим овако, 32 00:01:17,600 --> 00:01:23,330 и само напред и кликните Придружите Огреби у горњем десном углу 33 00:01:23,330 --> 00:01:28,300 и изаберите корисничко име и лозинком и коначно добити себе 34 00:01:28,300 --> 00:01:29,970 аццоунт-- сцратцх.мит.еду. 35 00:01:29,970 --> 00:01:32,165 36 00:01:32,165 --> 00:01:34,665 Мислио сам да ово користим као прилика први показати ово. 37 00:01:34,665 --> 00:01:39,120 Питање је током паузе шта код стварно изгледа. 38 00:01:39,120 --> 00:01:41,315 И причали смо током паузе за Ц, 39 00:01:41,315 --> 00:01:45,060 у партицулар-- нарочито нижи ниво у старијој језику. 40 00:01:45,060 --> 00:01:47,750 И ја сам урадио брзо Гоогле претрагу да пронађете Ц кода 41 00:01:47,750 --> 00:01:51,574 за бинарни потрази, алгоритма који смо користи за претраживање тај телефонски књигу раније. 42 00:01:51,574 --> 00:01:54,240 Овај пример, наравно, не тражи именик. 43 00:01:54,240 --> 00:01:57,840 Само тражи гомилу Бројеви у меморији рачунара. 44 00:01:57,840 --> 00:02:01,000 Али, ако желите да само да добијемо слику смислу онога што стварног програмирања 45 00:02:01,000 --> 00:02:05,370 језика изгледа, изгледа мало овако нешто. 46 00:02:05,370 --> 00:02:09,759 Дакле, то је око 20 плус, 30-так линија кода, 47 00:02:09,759 --> 00:02:12,640 али разговор се имали за време паузе 48 00:02:12,640 --> 00:02:16,000 је о томе како ово заправо бива претворила у нуле и јединице 49 00:02:16,000 --> 00:02:19,200 а ако не можеш тек тако вратити да обрађује и иде од нула и јединица 50 00:02:19,200 --> 00:02:20,210 враћа се код. 51 00:02:20,210 --> 00:02:22,620 >> Нажалост, процес тако трансформативан 52 00:02:22,620 --> 00:02:24,890 да је много лакше рећи него учинити. 53 00:02:24,890 --> 00:02:29,400 Отишао сам напред и заправо претворио тај програм, Бинарни Тражи, 54 00:02:29,400 --> 00:02:32,700 у нуле и јединице Путем Програм под називом компајлер да 55 00:02:32,700 --> 00:02:34,400 десити овде имају право на мој Мац. 56 00:02:34,400 --> 00:02:37,850 И ако погледате на екрану овде, посебно фокусира 57 00:02:37,850 --> 00:02:43,520 на овим средњим шест стубова само, видећете само нула и јединица. 58 00:02:43,520 --> 00:02:48,290 И то су нуле и јединице које саставити тачно да трага програм. 59 00:02:48,290 --> 00:02:53,720 >> И тако сваки комад пет бита, сваки бајт од нула и јединица овде, 60 00:02:53,720 --> 00:02:57,310 представљају неки упутство типично унутар рачунара. 61 00:02:57,310 --> 00:03:00,730 И у ствари, ако сте чули маркетиншки слоган "Интел Инсиде" - да, 62 00:03:00,730 --> 00:03:04,610 Наравно, само значи да имају ЦПУ или мозак унутар рачунара. 63 00:03:04,610 --> 00:03:08,000 И шта то значи бити процесор да имате скуп инструкција, 64 00:03:08,000 --> 00:03:08,840 такорећи. 65 00:03:08,840 --> 00:03:11,620 >> Сваки процесор на свету, многи од им маде би Интел ових дана, 66 00:03:11,620 --> 00:03:13,690 разуме коначан број инструкција. 67 00:03:13,690 --> 00:03:18,690 И та упутства су тако низак ниво као додати ова два броја заједно, 68 00:03:18,690 --> 00:03:22,560 помножити ова два броја заједно, се овај податак одавде 69 00:03:22,560 --> 00:03:27,340 да овде у меморији, осим ово информације одавде довде у меморији, 70 00:03:27,340 --> 00:03:32,200 и тако фортх-- веома, веома ниског нивоа, скоро детаљи о електронском. 71 00:03:32,200 --> 00:03:34,780 Али са онима математички операције заједно 72 00:03:34,780 --> 00:03:37,410 са оним што смо раније разговарали, представљање података 73 00:03:37,410 --> 00:03:40,450 као нула и јединица, могу Ви изградити све 74 00:03:40,450 --> 00:03:44,180 да компјутер може да уради данас, без обзира да ли то је текстуални, графички, музички, 75 00:03:44,180 --> 00:03:45,580 или у супротном. 76 00:03:45,580 --> 00:03:49,450 >> Дакле, ово је веома лако добити изгубљен у корова на брзо. 77 00:03:49,450 --> 00:03:52,150 И ту је много синтаксне изазови 78 00:03:52,150 --> 00:03:56,630 при чему, ако направите најједноставнији, најглупљи типос нико програма 79 00:03:56,630 --> 00:03:57,860 ће радити уопште. 80 00:03:57,860 --> 00:04:00,366 И тако, уместо помоћу језика као Ц јутрос, 81 00:04:00,366 --> 00:04:02,240 Мислио сам да би било забавније да ствари раде 82 00:04:02,240 --> 00:04:04,840 нешто више визуелни, који док дизајниран за децу 83 00:04:04,840 --> 00:04:08,079 је заправо савршена манифестација од стварног програмирања 84 00:04:08,079 --> 00:04:10,370 лангуаге-- слуцајно коришћење слика уместо текста 85 00:04:10,370 --> 00:04:11,710 да представљају те идеје. 86 00:04:11,710 --> 00:04:15,470 >> Дакле, када сте заиста имати рачун на сцратцх.мит.еду, 87 00:04:15,470 --> 00:04:21,070 кликните на дугме Цреате у горњем левом углу сајта. 88 00:04:21,070 --> 00:04:24,620 И требало би да видите окружење као онај ћу да видим на свом екрану 89 00:04:24,620 --> 00:04:26,310 овде. 90 00:04:26,310 --> 00:04:29,350 А ми ћемо провести мало мало времена играјући овде. 91 00:04:29,350 --> 00:04:34,080 Да видимо да ли можемо да сви решити неки Проблеми заједно у следећи начин. 92 00:04:34,080 --> 00:04:39,420 >> Дакле, оно што ћете видети у ово енвиронмент-- и заправо пусти 93 00:04:39,420 --> 00:04:40,050 на мене. 94 00:04:40,050 --> 00:04:42,680 Да ли је неко није овде? 95 00:04:42,680 --> 00:04:45,070 Не овде? 96 00:04:45,070 --> 00:04:45,800 ОК. 97 00:04:45,800 --> 00:04:49,030 Па нека ми истакнем неколико карактеристике ове средине. 98 00:04:49,030 --> 00:04:55,024 >> Дакле, у горњем левом углу екрана, ми има фазу Сцратцх је, да тако кажем. 99 00:04:55,024 --> 00:04:57,440 Огреботина није само име овог програмског језика; 100 00:04:57,440 --> 00:05:00,356 Такође је име мачку која видиш по дефаулту тамо наранџасте боје. 101 00:05:00,356 --> 00:05:02,160 Он је на сцени, тако баш као што сам описао 102 00:05:02,160 --> 00:05:05,770 корњача раније као битак у правоугаони бели одбор окружење. 103 00:05:05,770 --> 00:05:09,800 свет ове мачке је ограничен у потпуности у том правоугаоника до врха тамо. 104 00:05:09,800 --> 00:05:12,210 >> У међувремену, на десној страни рука страна овде, то је 105 00:05:12,210 --> 00:05:15,610 само скрипте подручје, Бланк Слате ако хоћете. 106 00:05:15,610 --> 00:05:18,590 Ово је место где ћемо писати наши програми за тренутак. 107 00:05:18,590 --> 00:05:22,935 И градивни блокови који ћемо користе за писање ово програм-- слагалицу 108 00:05:22,935 --> 00:05:25,310 комада, ако сте вилл-- се они овде у средини, 109 00:05:25,310 --> 00:05:27,500 и они категорисана по функционалности. 110 00:05:27,500 --> 00:05:31,000 Тако, на пример, ја идем напред и показати бар једну од ових. 111 00:05:31,000 --> 00:05:33,690 Ја идем напред и кликните категорија Контрола до врха. 112 00:05:33,690 --> 00:05:35,720 >> Дакле, то су категорије до врха. 113 00:05:35,720 --> 00:05:39,410 Идем да кликнете на категорију Цонтрол. 114 00:05:39,410 --> 00:05:44,020 Уместо тога, ја ћу да кликнете на догађаје категорија, први човек на врху. 115 00:05:44,020 --> 00:05:47,790 А ако желите да пратите још као и ми то, ти си сасвим добродошли. 116 00:05:47,790 --> 00:05:52,180 Идем кликните и повуците ово Први, "када зелена застава кликне." 117 00:05:52,180 --> 00:05:58,410 А онда ћу да га баци само грубо на врху мојих празни листови папира. 118 00:05:58,410 --> 00:06:01,450 >> А шта је лепо око нуле је да овај слагалице, када 119 00:06:01,450 --> 00:06:04,560 блокирани са другим пуззле комада, ће буквално до 120 00:06:04,560 --> 00:06:06,460 шта ти пуззле пиецес рећи да уради. 121 00:06:06,460 --> 00:06:09,710 Тако, на пример, Огреби је право сада усред његовог света. 122 00:06:09,710 --> 00:06:14,660 Ја идем напред и изабрати Сада, рецимо, Захтјев категорија, 123 00:06:14,660 --> 00:06:18,000 ако желите да урадите саме-- Мотион категорију. 124 00:06:18,000 --> 00:06:20,430 А сада приметио сам једну целину гомила слагалице овде 125 00:06:20,430 --> 00:06:23,370 да, опет, некако оно што кажу. 126 00:06:23,370 --> 00:06:28,110 И ја идем напред и превуците и дроп Овај потез блок овамо. 127 00:06:28,110 --> 00:06:31,860 >> И приметио да чим се близу дна "зелене заставе 128 00:06:31,860 --> 00:06:34,580 кликне "дугме, обавештење како се појави бела линија, 129 00:06:34,580 --> 00:06:36,950 као да је то скоро магнетни, она жели да иде тамо. 130 00:06:36,950 --> 00:06:43,070 Само пусти, а он ће снап заједно и облици ће се подударати. 131 00:06:43,070 --> 00:06:46,620 А сада можете можда скоро погодите где идемо са овим. 132 00:06:46,620 --> 00:06:51,570 >> Ако погледате Сцратцх фази овде и погледајте на врху, 133 00:06:51,570 --> 00:06:55,142 видећете црвено светло, А стоп знак, и зелену заставу. 134 00:06:55,142 --> 00:06:57,100 И ја идем напред и гледали моје сцреен-- 135 00:06:57,100 --> 00:06:58,460 за тренутак, ако можеш. 136 00:06:58,460 --> 00:07:01,960 Идем да кликнете на зелена застава сада, 137 00:07:01,960 --> 00:07:07,850 и он се преселио како се чини, 10 корака или 10 пиксела, 10 тачака, на екрану. 138 00:07:07,850 --> 00:07:13,390 >> Па није то узбудљиво, али дозволите ми да предложи 139 00:07:13,390 --> 00:07:17,440 чак и без предаје ово, само користећи сопствена свој интуитион-- Лет 140 00:07:17,440 --> 00:07:22,560 ми предлажемо да смисли како да да Сцратцх шетњу десно са позорнице. 141 00:07:22,560 --> 00:07:28,700 Нека га направи пут за десну страну екран, скроз у десно. 142 00:07:28,700 --> 00:07:32,200 Дозволите ми да вам дам један тренутак или тако да се избори са тим. 143 00:07:32,200 --> 00:07:37,681 Можда ћете желети да погледате у другим категоријама блокова. 144 00:07:37,681 --> 00:07:38,180 У реду. 145 00:07:38,180 --> 00:07:41,290 Само да подсетимо, када имамо зелена застава кликне овде 146 00:07:41,290 --> 00:07:44,850 и померите 10 корака је само инструкција, сваки пут кад 147 00:07:44,850 --> 00:07:46,720 кликните на зелену заставу, шта се дешава? 148 00:07:46,720 --> 00:07:50,070 Па, да води мој програм. 149 00:07:50,070 --> 00:07:52,450 Тако да сам могао да урадим ово можда 10 пута ручно, 150 00:07:52,450 --> 00:07:55,130 али ово изгледа мало Мало хацкисх, да тако кажем, 151 00:07:55,130 --> 00:07:57,480 при чему Нисам баш решавања проблема. 152 00:07:57,480 --> 00:08:00,530 Ја само покушавам поново и опет и опет и опет 153 00:08:00,530 --> 00:08:03,180 док сам некако случајно постићи директиве 154 00:08:03,180 --> 00:08:05,560 да сам одлучио да раније постићи. 155 00:08:05,560 --> 00:08:08,200 >> Али ми знамо из наше Псеудокод раније да постоји 156 00:08:08,200 --> 00:08:11,870 Овај појам у програмирање петље, опет и опет ради нешто. 157 00:08:11,870 --> 00:08:14,888 И тако сам видео да гомила вас посегнуо за шта пуззле комад? 158 00:08:14,888 --> 00:08:17,870 159 00:08:17,870 --> 00:08:18,730 Репеат до. 160 00:08:18,730 --> 00:08:21,400 Тако да можемо да урадимо нешто као поновите поступак док. 161 00:08:21,400 --> 00:08:23,760 А шта си ти поновити до тачно? 162 00:08:23,760 --> 00:08:27,720 163 00:08:27,720 --> 00:08:28,540 >> ОК. 164 00:08:28,540 --> 00:08:31,974 И пусти ме једном која је нешто једноставније само на тренутак. 165 00:08:31,974 --> 00:08:33,140 Пусти ме напред и уради то. 166 00:08:33,140 --> 00:08:35,559 Приметите да, као што може имати открили под контролом, 167 00:08:35,559 --> 00:08:38,409 ту је ово понављање блок, који не изгледа као да је то велика. 168 00:08:38,409 --> 00:08:41,039 Нема много простора у између те две жуте линије. 169 00:08:41,039 --> 00:08:43,539 Али, као што неки од вас можда има приметио, ако драг анд дроп, 170 00:08:43,539 --> 00:08:45,150 приметити како расте за попуњавање облика. 171 00:08:45,150 --> 00:08:46,274 >> А чак можете стрпати више. 172 00:08:46,274 --> 00:08:48,670 То ће наставити да расте ако вучете и лебде над њим. 173 00:08:48,670 --> 00:08:51,110 И не знам шта је најбоље овде, па нека 174 00:08:51,110 --> 00:08:54,760 ми барем поновити пет пута, за пример, па да се вратимо на бину 175 00:08:54,760 --> 00:08:56,720 и кликните на зелену заставу. 176 00:08:56,720 --> 00:08:59,110 И сада приметили да није сасвим тамо. 177 00:08:59,110 --> 00:09:02,400 >> Сада неки од вас предложено, као Вицториа само није, поновити 10 пута. 178 00:09:02,400 --> 00:09:05,140 И то углавном ради да га скроз, 179 00:09:05,140 --> 00:09:10,510 али не би ли бити више робустан начин него произвољно смисли 180 00:09:10,510 --> 00:09:12,640 колико потеза да? 181 00:09:12,640 --> 00:09:17,680 Шта би могао бити бољи блок од понављања 10 пута бити? 182 00:09:17,680 --> 00:09:20,380 >> Да, па зашто не уради нешто заувек? 183 00:09:20,380 --> 00:09:24,390 А сада да пређемо ове слагалице комад унутра и ријеши се једног. 184 00:09:24,390 --> 00:09:28,300 Сада обратите пажњу без обзира где Огреби почиње, иде до ивице. 185 00:09:28,300 --> 00:09:30,700 И срећу МИТ, који чини Сцратцх, само 186 00:09:30,700 --> 00:09:33,190 осигурава да никада није потпуно нестаје. 187 00:09:33,190 --> 00:09:35,360 Увек можете да ухватите свој реп. 188 00:09:35,360 --> 00:09:37,680 >> И само интуитивно, Зашто стално помера? 189 00:09:37,680 --> 00:09:38,892 Шта се дешава овде? 190 00:09:38,892 --> 00:09:41,440 191 00:09:41,440 --> 00:09:43,824 Изгледа да је престала, али онда ако сам покупити и отпор 192 00:09:43,824 --> 00:09:45,240 он стално жели да иде тамо. 193 00:09:45,240 --> 00:09:46,123 Зашто је то? 194 00:09:46,123 --> 00:09:51,610 195 00:09:51,610 --> 00:09:54,360 Заиста, компјутер је буквално радити оно што ти ја кажем. 196 00:09:54,360 --> 00:09:58,380 Дакле, ако то раније рекли ураде након ствар заувек, крећу 10 корака, 197 00:09:58,380 --> 00:10:01,860 да ће наставити и иде док сам ударио црвени стоп знак 198 00:10:01,860 --> 00:10:04,620 и зауставити програм у потпуности. 199 00:10:04,620 --> 00:10:06,610 >> Дакле, чак и ако није ово, како бих могао 200 00:10:06,610 --> 00:10:09,510 да Сцратцх потез брже преко екрана? 201 00:10:09,510 --> 00:10:12,060 202 00:10:12,060 --> 00:10:13,280 Више корака, зар не? 203 00:10:13,280 --> 00:10:15,710 Дакле, уместо да раде 10 у исто време, зашто не бисмо 204 00:10:15,710 --> 00:10:20,100 само напред и променити да-- шта би пропосе-- 50? 205 00:10:20,100 --> 00:10:24,410 Дакле, сада ћу да кликнете на зелени застава, и заиста, он иде врло брзо. 206 00:10:24,410 --> 00:10:27,180 >> И то, наравно, само манифестација анимације. 207 00:10:27,180 --> 00:10:28,060 Шта је анимација? 208 00:10:28,060 --> 00:10:33,090 Само је ти показује људску А гомила непокретних слика заиста, 209 00:10:33,090 --> 00:10:34,160 стварно, стварно брзо. 210 00:10:34,160 --> 00:10:36,500 Па ако смо само говори га да се креће више корака, 211 00:10:36,500 --> 00:10:39,750 ми смо се само ефекат бити Промена где је на екрану 212 00:10:39,750 --> 00:10:42,900 све брже по јединици времена. 213 00:10:42,900 --> 00:10:46,454 >> Сада следећи изазов који сам предложио је да га одбијају ивицу. 214 00:10:46,454 --> 00:10:49,120 И не знајући шта слагалица комада екист-- јер је то у реду 215 00:10:49,120 --> 00:10:53,030 ако не добијете до фаза цхалленге-- што 216 00:10:53,030 --> 00:10:54,280 желиш да интуитивно радити? 217 00:10:54,280 --> 00:10:58,030 Како би смо га одбити и даље, између леве и десне стране? 218 00:10:58,030 --> 00:11:02,630 219 00:11:02,630 --> 00:11:03,810 >> Да. 220 00:11:03,810 --> 00:11:05,680 Тако да је потребна нека врста стања, и ми 221 00:11:05,680 --> 00:11:09,710 Изгледа да имају уређаја, тако да се говоре, у категорији Цонтрол. 222 00:11:09,710 --> 00:11:14,110 Која од ових блокова ми вероватно желети? 223 00:11:14,110 --> 00:11:15,200 Да, можда "ако, онда." 224 00:11:15,200 --> 00:11:18,780 Тако приметити да међу жутим блоковима имамо овде, ту је ово "ако" 225 00:11:18,780 --> 00:11:23,920 или ово "ако, други" блок који ће дозвољавају нам да донесе одлуку да се то уради 226 00:11:23,920 --> 00:11:25,000 или да то уради. 227 00:11:25,000 --> 00:11:27,380 А можете их чак гнездо да раде више ствари. 228 00:11:27,380 --> 00:11:34,910 Или ако не отишли ​​овде још, иди на Сенсинг категорији 229 00:11:34,910 --> 00:11:39,612 и-- да видимо да ли је то овде. 230 00:11:39,612 --> 00:11:43,050 231 00:11:43,050 --> 00:11:52,050 >> Па шта блок може бити од помоћи да открије да ли је са позорнице? 232 00:11:52,050 --> 00:11:56,740 Да, приметите да су неки од тих блокова може параметризед, да тако кажем. 233 00:11:56,740 --> 00:12:00,706 Они се могу некако прилагодити, не за разлику од ХТМЛ јуче са атрибутима, 234 00:12:00,706 --> 00:12:03,330 где ти атрибути врста прилагодити понашање ознаке. 235 00:12:03,330 --> 00:12:08,880 Слично томе овде, могу да узмем овај дирљиви блок и промена и поставити питање, 236 00:12:08,880 --> 00:12:11,500 да ли додирује миша показивач као курсора 237 00:12:11,500 --> 00:12:13,250 или сте додирују ивицу? 238 00:12:13,250 --> 00:12:15,210 >> Дакле, пусти ме унутра и ово. 239 00:12:15,210 --> 00:12:18,130 Идем да бисте умањили на тренутак. 240 00:12:18,130 --> 00:12:21,320 Да узмем ову слагалицу комад овде, овај слагалице то, 241 00:12:21,320 --> 00:12:24,570 и ја ћу јумбле их само на тренутак. 242 00:12:24,570 --> 00:12:27,620 Ја ћу прећи ово, променити то дирљив ивице, 243 00:12:27,620 --> 00:12:38,590 и ја ћу кретања урадити. 244 00:12:38,590 --> 00:12:40,490 Дакле, овде су неки састојци. 245 00:12:40,490 --> 00:12:42,570 Мислим да имам све што желим. 246 00:12:42,570 --> 00:12:47,710 >> Да ли би неко желео да предложи како сам може да се повеже ове можда врха до дна 247 00:12:47,710 --> 00:12:52,020 како би се решио проблем постојања Сцратцх потез десна на лево на право на 248 00:12:52,020 --> 00:12:57,020 лева на десно на лево, сваки време само одбијају зида? 249 00:12:57,020 --> 00:12:58,050 Оно што желим да урадим? 250 00:12:58,050 --> 00:13:01,097 Који блок треба да се повеже са "Када зелена застава кликнули прво"? 251 00:13:01,097 --> 00:13:04,060 252 00:13:04,060 --> 00:13:06,200 >> У реду, па почнимо са "заувек." 253 00:13:06,200 --> 00:13:07,170 Оно сто иде даље? 254 00:13:07,170 --> 00:13:10,290 Неко други. 255 00:13:10,290 --> 00:13:11,850 У реду, покрет кораке. 256 00:13:11,850 --> 00:13:12,350 У реду. 257 00:13:12,350 --> 00:13:14,470 Шта онда? 258 00:13:14,470 --> 00:13:15,120 Па онда ако. 259 00:13:15,120 --> 00:13:17,720 И приметио, иако изгледа сендвичу заједно чврсто, 260 00:13:17,720 --> 00:13:19,500 то ће само расти да попуне. 261 00:13:19,500 --> 00:13:21,500 То ће само скочити у којој желим то. 262 00:13:21,500 --> 00:13:25,920 >> И шта да ставим између иф и онда? 263 00:13:25,920 --> 00:13:27,180 Вероватно "ако додирнете ивицу." 264 00:13:27,180 --> 00:13:31,800 И обавештење, опет, то је превелик за то, али ће порасти за попуњавање. 265 00:13:31,800 --> 00:13:35,002 А онда окренути за 15 степени? 266 00:13:35,002 --> 00:13:35,710 Колико степени? 267 00:13:35,710 --> 00:13:38,800 268 00:13:38,800 --> 00:13:41,196 Да, па 180 ће окретати мене све обрнуто. 269 00:13:41,196 --> 00:13:42,570 Па да видимо да ли сам добро разумео. 270 00:13:42,570 --> 00:13:43,930 Пусти ме умањили. 271 00:13:43,930 --> 00:13:45,130 >> Пусти ме да ја Сцратцх горе. 272 00:13:45,130 --> 00:13:50,030 Тако да је мало искривљен сада, али то је у реду. 273 00:13:50,030 --> 00:13:52,231 Како могу да лако ресет га? 274 00:13:52,231 --> 00:13:59,879 275 00:13:59,879 --> 00:14:01,045 Идем да мало варају. 276 00:14:01,045 --> 00:14:04,074 277 00:14:04,074 --> 00:14:05,990 Па сам додао још један блок, само да буде јасно. 278 00:14:05,990 --> 00:14:08,424 Желим да укажем 90 степени десно по дифолту, 279 00:14:08,424 --> 00:14:10,840 па ја ћу му рећи да то програмски. 280 00:14:10,840 --> 00:14:11,632 И идемо. 281 00:14:11,632 --> 00:14:14,740 282 00:14:14,740 --> 00:14:15,740 Изгледа да су то урадили. 283 00:14:15,740 --> 00:14:19,980 То је мало чудно, јер хода наопако. 284 00:14:19,980 --> 00:14:21,250 Назовимо то бубу. 285 00:14:21,250 --> 00:14:22,120 То је грешка. 286 00:14:22,120 --> 00:14:27,320 Буба је грешка у програму, логичка грешка да ја, човек, направљен. 287 00:14:27,320 --> 00:14:28,985 Зашто се иде наопако? 288 00:14:28,985 --> 00:14:33,560 289 00:14:33,560 --> 00:14:35,250 Да ли МИТ-зајебеш или зар не? 290 00:14:35,250 --> 00:14:38,840 291 00:14:38,840 --> 00:14:42,550 >> Да, мислим, није МИТ фаулт. Дали су ми слагалица комад 292 00:14:42,550 --> 00:14:44,970 да каже да укључите неки број ступњева. 293 00:14:44,970 --> 00:14:47,672 И на Вицториа предлог, Ја сам окреће за 180 степени, 294 00:14:47,672 --> 00:14:48,880 што је право интуиција. 295 00:14:48,880 --> 00:14:53,700 Али окретање 180 степени буквално значи окретање за 180 степени, 296 00:14:53,700 --> 00:14:55,860 и то не баш оно што желим, очигледно. 297 00:14:55,860 --> 00:14:58,026 Јер барем је у ово дводимензионалне свет, 298 00:14:58,026 --> 00:15:00,740 тако да окретање се заиста дешава да га окренете доле. 299 00:15:00,740 --> 00:15:04,030 >> Вероватно желим да користим шта блок уместо тога, на основу онога што видите овде? 300 00:15:04,030 --> 00:15:11,890 301 00:15:11,890 --> 00:15:14,790 Како бисмо могли поправити ово? 302 00:15:14,790 --> 00:15:18,380 Да, тако да смо могли указати у супротном смеру. 303 00:15:18,380 --> 00:15:22,300 И заправо ни то неће бити довољно, 304 00:15:22,300 --> 00:15:26,410 јер можемо само тешко код да показује лево или десно. 305 00:15:26,410 --> 00:15:27,920 >> Знаш шта можемо да урадимо? 306 00:15:27,920 --> 00:15:30,160 Изгледа да имамо погодност блок овде. 307 00:15:30,160 --> 00:15:32,987 Ако зумирам, погледајте нешто што се овде? 308 00:15:32,987 --> 00:15:36,120 309 00:15:36,120 --> 00:15:40,020 Тако да изгледа као МИТ-хас ан апстракција изграђен овде. 310 00:15:40,020 --> 00:15:45,440 Овај блок изгледа еквивалент на које друге блокове, множина? 311 00:15:45,440 --> 00:15:49,510 >> Овај блок изгледа еквивалент целој овој трио блокова 312 00:15:49,510 --> 00:15:50,880 да имамо овде. 313 00:15:50,880 --> 00:15:54,670 Тако испада да могу поједноставити мој Програм за ослобађање од свега тога 314 00:15:54,670 --> 00:15:58,270 и само стави ово овде. 315 00:15:58,270 --> 00:16:01,620 А сада је још мало луд, и то је у реду за сада. 316 00:16:01,620 --> 00:16:03,370 Оставићемо то бити. 317 00:16:03,370 --> 00:16:06,000 Али мој програм је чак једноставнији, а то, такође, 318 00:16:06,000 --> 00:16:09,060 ће бити представник на циљ у программинг-- 319 00:16:09,060 --> 00:16:13,430 је идеално би ваш код док једноставно, што компактнија, 320 00:16:13,430 --> 00:16:15,650 док још увек као читљив могуће. 321 00:16:15,650 --> 00:16:20,310 Ви не желите да се то тако језгровит да је тешко разумети. 322 00:16:20,310 --> 00:16:22,826 >> Али приметио сам заменио три блока са једне, 323 00:16:22,826 --> 00:16:24,200 и то је вероватно добра ствар. 324 00:16:24,200 --> 00:16:27,280 Ја сам захваћене далеко појам провере да ли сте 325 00:16:27,280 --> 00:16:29,120 на граници са само једним блоком. 326 00:16:29,120 --> 00:16:31,520 Сада можемо да се забавимо са овим, у ствари. 327 00:16:31,520 --> 00:16:35,790 То не додати толико интелектуална вредност али разигран вредност. 328 00:16:35,790 --> 00:16:39,730 Ја идем напред и ухватите тај звук овде. 329 00:16:39,730 --> 00:16:42,900 330 00:16:42,900 --> 00:16:46,420 Тако да ме само напред, и пусти ме стоп програм за тренутак. 331 00:16:46,420 --> 00:16:52,070 Ја ћу снимити следеће, омогућавајући приступ микрофоном. 332 00:16:52,070 --> 00:16:53,181 >> Идемо. 333 00:16:53,181 --> 00:16:53,680 Јао. 334 00:16:53,680 --> 00:16:58,710 335 00:16:58,710 --> 00:17:01,140 Хајде да покушамо поново. 336 00:17:01,140 --> 00:17:02,279 Идемо. 337 00:17:02,279 --> 00:17:03,570 У реду, снимио сам погрешну ствар. 338 00:17:03,570 --> 00:17:04,580 Идемо. 339 00:17:04,580 --> 00:17:05,080 Јао. 340 00:17:05,080 --> 00:17:07,910 341 00:17:07,910 --> 00:17:08,800 Јао. 342 00:17:08,800 --> 00:17:09,300 У реду. 343 00:17:09,300 --> 00:17:10,791 Сада морам да се отарасим тога. 344 00:17:10,791 --> 00:17:11,290 У реду. 345 00:17:11,290 --> 00:17:13,950 >> Тако да сада имам снимање само "јао." 346 00:17:13,950 --> 00:17:18,040 Зато сада идем напред и зову "јао." 347 00:17:18,040 --> 00:17:20,270 Ја ћу да се вратим мојим скрипте, и сада 348 00:17:20,270 --> 00:17:25,460 Обавештење ту је блок који се зове плаи соунд "меов" или репродукцију звука "јао." 349 00:17:25,460 --> 00:17:28,920 Ја ћу ја то, и где да кажем за комичне ефекат? 350 00:17:28,920 --> 00:17:31,740 351 00:17:31,740 --> 00:17:37,860 Да, а сада је некако луд, јер сада ово блоцк-- 352 00:17:37,860 --> 00:17:42,050 како се овај "ако на ивици, Боунце "је врста самосталан. 353 00:17:42,050 --> 00:17:43,704 Зато морам да поправим ово. 354 00:17:43,704 --> 00:17:44,870 Пусти ме напред и уради то. 355 00:17:44,870 --> 00:17:48,630 Пусти ме да решим ово и да се вратим на нашем оригиналу, више намерна 356 00:17:48,630 --> 00:17:49,870 функционалност. 357 00:17:49,870 --> 00:18:01,080 Дакле, "ако додиривање ивица, онда" Желим да се окрену, као Викторија предложено, 358 00:18:01,080 --> 00:18:02,480 180 степени. 359 00:18:02,480 --> 00:18:05,497 И желим да играм звук "јао" тамо? 360 00:18:05,497 --> 00:18:11,800 361 00:18:11,800 --> 00:18:15,580 >> Да, приметио је напољу та жута блок. 362 00:18:15,580 --> 00:18:17,680 Тако да, такође, ће бити буба, али сам приметио. 363 00:18:17,680 --> 00:18:21,290 Па ћу га ја овде, и обавештење сада је унутар "ако". 364 00:18:21,290 --> 00:18:24,250 Дакле, "ако" је та врста Као руке попут блот анализе 365 00:18:24,250 --> 00:18:26,260 да ће само оно што је у њему. 366 00:18:26,260 --> 00:18:30,216 Па сад ако умањили у ризик анноиинг-- 367 00:18:30,216 --> 00:18:32,860 368 00:18:32,860 --> 00:18:36,470 >> Цомпутер: Јао, јао, јао. 369 00:18:36,470 --> 00:18:39,910 >> Давид Малан: И ће само наставити заувек. 370 00:18:39,910 --> 00:18:44,160 Сада само да убрза ствари овде, пусти ме само напред и отвори, 371 00:18:44,160 --> 00:18:50,460 хајде да говоре-- пусти ме на неке од своје ствари из класе. 372 00:18:50,460 --> 00:18:53,000 373 00:18:53,000 --> 00:19:00,220 И пусти ме отвори, рецимо, ово један је од стране једног од наших наставних другова 374 00:19:00,220 --> 00:19:01,500 Пре неколико година. 375 00:19:01,500 --> 00:19:04,732 Дакле, неки од вас можда сетити ова игра из прошлих времена, 376 00:19:04,732 --> 00:19:05,940 и то је заправо изузетна. 377 00:19:05,940 --> 00:19:08,190 Иако смо урадили Најједноставнији програма одмах, 378 00:19:08,190 --> 00:19:09,980 Хајде да размотримо шта ово заправо изгледа. 379 00:19:09,980 --> 00:19:10,650 Пусти ме хит представу. 380 00:19:10,650 --> 00:19:14,210 381 00:19:14,210 --> 00:19:18,980 >> Дакле, у овој игри, имамо жаба, и користећи стрелицу кеис-- 382 00:19:18,980 --> 00:19:23,340 узима веће кораке него што запамти Имам контролу над овим жабе. 383 00:19:23,340 --> 00:19:29,630 А циљ је да се преко заузет Пут без покретања у аутомобиле. 384 00:19:29,630 --> 00:19:34,735 И да видео-- ако одем овде, ја морати да сачека на евиденција за листање до. 385 00:19:34,735 --> 00:19:38,130 386 00:19:38,130 --> 00:19:39,274 Ово изгледа као буба. 387 00:19:39,274 --> 00:19:42,240 388 00:19:42,240 --> 00:19:43,495 Ово је нека врста грешке. 389 00:19:43,495 --> 00:19:45,980 390 00:19:45,980 --> 00:19:46,480 У реду. 391 00:19:46,480 --> 00:19:51,550 Ја сам на ово овде, тамо, а онда стално 392 00:19:51,550 --> 00:19:54,100 иде све док не добијете све жабе уз љиљанима јастучића. 393 00:19:54,100 --> 00:19:55,920 Сада ово може изгледати све сложенији, 394 00:19:55,920 --> 00:19:57,840 али хајде да покушамо да се пробије ово доле ментално 395 00:19:57,840 --> 00:20:00,040 и вербално у блокове саставне. 396 00:20:00,040 --> 00:20:03,910 Па вероватно постоји слагалица комад који још нисмо видели 397 00:20:03,910 --> 00:20:07,440 али то је одговор на типке, у ствари сам ударио на тастатури. 398 00:20:07,440 --> 00:20:11,660 >> Тако да је вероватно нека врста блок који каже, ако кључни једнако горе, 399 00:20:11,660 --> 00:20:15,965 онда нешто са Сцратцх-- Можда покрет 10 корака на овај начин. 400 00:20:15,965 --> 00:20:20,240 Ако се притисне тастер, померите 10 корака На овај начин, или леви тастер, померите 10 корака 401 00:20:20,240 --> 00:20:21,710 На овај начин, 10 кораке да. 402 00:20:21,710 --> 00:20:23,644 Ја сам јасно је мачку у жабу. 403 00:20:23,644 --> 00:20:26,060 Дакле, то је само где је костим, као Греб позиви То-- смо 404 00:20:26,060 --> 00:20:28,440 само увезена слику жабе. 405 00:20:28,440 --> 00:20:29,570 >> Али шта друго што се дешава? 406 00:20:29,570 --> 00:20:32,794 Које друге линија кода, шта други пуззле пиецес 407 00:20:32,794 --> 00:20:35,460 јесте Блејк, наш демонстратор, користити у овом програму, очигледно? 408 00:20:35,460 --> 00:20:38,320 409 00:20:38,320 --> 00:20:42,730 Шта је све што мове-- шта програмирање изградити? 410 00:20:42,730 --> 00:20:44,950 >> Мотион, суре-- тако да мове блок, сигурно. 411 00:20:44,950 --> 00:20:49,330 А шта је то потез блок унутар, највероватније? 412 00:20:49,330 --> 00:20:52,850 Да, неки од петље, можда заувек блокира, можда понављање блоцк-- 413 00:20:52,850 --> 00:20:54,070 Понављам до блока. 414 00:20:54,070 --> 00:20:57,330 И то је оно што прави записе и Лили јастучићи и све остало потез 415 00:20:57,330 --> 00:20:57,990 напред-назад. 416 00:20:57,990 --> 00:21:00,270 То је само дешава бескрајно. 417 00:21:00,270 --> 00:21:03,180 >> Зашто су неки од аутомобила креће брже од осталих? 418 00:21:03,180 --> 00:21:06,607 Оно што је другачије у вези са тим програмима? 419 00:21:06,607 --> 00:21:09,690 Да, вероватно неки од њих узимају више корака одједном и неки од њих 420 00:21:09,690 --> 00:21:10,690 мање корака одједном. 421 00:21:10,690 --> 00:21:14,670 И визуелни ефекат је брза против споро. 422 00:21:14,670 --> 00:21:16,030 >> Шта мислиш да се догодило? 423 00:21:16,030 --> 00:21:19,700 Када сам добио жабу скроз преко пута и реке 424 00:21:19,700 --> 00:21:23,560 на на Лили Пад, нешто пажње догодило. 425 00:21:23,560 --> 00:21:26,540 Шта се догодило чим сам то урадио? 426 00:21:26,540 --> 00:21:27,210 Је престала. 427 00:21:27,210 --> 00:21:29,680 То жаба заустављен, и Имам другу жабу. 428 00:21:29,680 --> 00:21:33,155 Дакле, шта конструкција мора бити некада, шта функција? 429 00:21:33,155 --> 00:21:36,020 430 00:21:36,020 --> 00:21:38,660 >> Да, тако да је нека врста "Ако" стање тамо, такође. 431 00:21:38,660 --> 00:21:41,909 И испоставило оут-- нисмо видели ово-- али има других блокова у ту да 432 00:21:41,909 --> 00:21:45,300 може се рећи, ако сте дирљиво друга ствар на екрану, 433 00:21:45,300 --> 00:21:47,720 ако додирује Лили Пад ", затим". 434 00:21:47,720 --> 00:21:50,810 А онда је то када смо чине други жаба појави. 435 00:21:50,810 --> 00:21:54,969 Дакле, иако је ова игра сигурно веома од, иако на први поглед 436 00:21:54,969 --> 00:21:58,010 има толико тога ајде-- и Блаке није вхип то у два минута, 437 00:21:58,010 --> 00:22:00,390 вероватно је да неколико сати да створи ову игру 438 00:22:00,390 --> 00:22:03,850 на основу његовог сећања или видео верзије иестериеар према њој. 439 00:22:03,850 --> 00:22:07,940 Али све те ситнице догађа на екрану у изолацији 440 00:22:07,940 --> 00:22:11,550 своде на ове веома једноставне цонструцтс-- покрети или изјаве 441 00:22:11,550 --> 00:22:15,519 као што смо разговарали, петље и услови и то је то. 442 00:22:15,519 --> 00:22:17,060 Постоји неколико других одгајивача функције. 443 00:22:17,060 --> 00:22:19,130 Неки од њих су чисто естетски или акустична, 444 00:22:19,130 --> 00:22:20,964 као звуке сам играо. 445 00:22:20,964 --> 00:22:23,380 Али у највећем делу, ви има на том језику, Сцратцх, 446 00:22:23,380 --> 00:22:25,350 све основно блокови то ти 447 00:22:25,350 --> 00:22:29,280 има у Ц, Јава, ЈаваСцрипт, Пхп, Руби, Питхон 448 00:22:29,280 --> 00:22:32,960 и било који број других језика. 449 00:22:32,960 --> 00:22:36,720 Било каква питања у вези нуле? 450 00:22:36,720 --> 00:22:37,220 У реду. 451 00:22:37,220 --> 00:22:40,303 Тако да неће ронити у дубље у Сцратцх, иако сте добродошли овог викенда, 452 00:22:40,303 --> 00:22:42,860 посебно ако имате децу или нећаке и сестрића и што је, 453 00:22:42,860 --> 00:22:44,220 упознати их са Сцратцх. 454 00:22:44,220 --> 00:22:47,960 То је заправо предивно разиграно окружење са, како његови аутори кажу, 455 00:22:47,960 --> 00:22:49,120 веома високи плафони. 456 00:22:49,120 --> 00:22:51,670 Иако смо почели са врло детаљи на ниском нивоу, 457 00:22:51,670 --> 00:22:54,890 заиста може да уради доста с тим, а то је можда 458 00:22:54,890 --> 00:22:57,360 демонстрација управо то. 459 00:22:57,360 --> 00:23:02,920 >> Али хајде сада прећи на нешто више софистицирани проблеми, ако хоћете, 460 00:23:02,920 --> 00:23:05,870 познат као "претраживање" и "Сортирање," више уопште. 461 00:23:05,870 --> 00:23:09,500 Ми смо имали овај телефон књига еарлиер-- ево још један само за дисцуссион-- 462 00:23:09,500 --> 00:23:13,460 да смо били у могућности да претражујете ефикасније јер 463 00:23:13,460 --> 00:23:15,270 значајног претпоставке. 464 00:23:15,270 --> 00:23:17,655 И само да буде јасно, шта претпоставка је да одлука 465 00:23:17,655 --> 00:23:19,280 при претраживању кроз ову телефонски именик? 466 00:23:19,280 --> 00:23:23,342 467 00:23:23,342 --> 00:23:25,300 То Мајк Смит је у телефонски именик, иако сам 468 00:23:25,300 --> 00:23:27,410 моћи за руковање сценарио без њега 469 00:23:27,410 --> 00:23:30,720 тамо ако сам престао прерано. 470 00:23:30,720 --> 00:23:31,806 Књига је по абецеди. 471 00:23:31,806 --> 00:23:33,930 И то је веома великодушан претпоставка, јер то 472 00:23:33,930 --> 00:23:36,580 значи некога-- Некако сам сечења у кривину, 473 00:23:36,580 --> 00:23:40,580 као што сам брже јер некоме друго урадио доста напорног рада за мене. 474 00:23:40,580 --> 00:23:43,120 >> Али шта ако је телефон Књига је унсортед? 475 00:23:43,120 --> 00:23:47,050 Можда Спринт сам лењ, само бацила имена и бројеви свачије тамо 476 00:23:47,050 --> 00:23:50,120 можда у редоследу у којем су се пријавили за телефонски сервис. 477 00:23:50,120 --> 00:23:54,570 И колико времена то ме наћи некога као што је Мајк Смит? 478 00:23:54,570 --> 00:23:58,160 1.000 страна телефона боок-- колико страница морам да погледам кроз? 479 00:23:58,160 --> 00:23:58,905 >> Сви они. 480 00:23:58,905 --> 00:24:00,030 Ти си некако среће. 481 00:24:00,030 --> 00:24:03,420 Имате буквално да погледате сваки страна ако је телефон књига је само 482 00:24:03,420 --> 00:24:04,450 насумично поредани. 483 00:24:04,450 --> 00:24:06,910 Можда ти се посрећи и наћи Мике на првој страни, јер он 484 00:24:06,910 --> 00:24:08,826 је прва муштерија да нареди телефонску службу. 485 00:24:08,826 --> 00:24:10,760 Али је можда био последњи, такође. 486 00:24:10,760 --> 00:24:12,500 >> Тако насумично поредак није добро. 487 00:24:12,500 --> 00:24:16,750 Претпостављам да имамо да учини нешто телефонски именик или у општем методу података 488 00:24:16,750 --> 00:24:18,520 да смо добили. 489 00:24:18,520 --> 00:24:19,440 Како то да урадимо? 490 00:24:19,440 --> 00:24:21,360 >> Па, хајде да пробам једноставан пример овде. 491 00:24:21,360 --> 00:24:24,290 Пусти ме напред и баците неколико бројева на табли. 492 00:24:24,290 --> 00:24:35,480 Претпоставимо бројеве које имамо су, рецимо, четири, два, један, и три. 493 00:24:35,480 --> 00:24:38,390 И, Бен, сложити бројеве за нас. 494 00:24:38,390 --> 00:24:39,017 >> Добро. 495 00:24:39,017 --> 00:24:39,850 Како си то урадио? 496 00:24:39,850 --> 00:24:42,731 497 00:24:42,731 --> 00:24:43,230 У реду. 498 00:24:43,230 --> 00:24:44,710 Дакле, почните са најмањим вредност и највиша, 499 00:24:44,710 --> 00:24:46,084 и то је стварно добро интуиција. 500 00:24:46,084 --> 00:24:48,080 И схватити да смо ми људи су заправо прилично 501 00:24:48,080 --> 00:24:49,913 добар у решавању проблема овако бар 502 00:24:49,913 --> 00:24:51,810 када су подаци релативно мали. 503 00:24:51,810 --> 00:24:54,860 Чим почнете да стотине бројева, хиљаде бројева, 504 00:24:54,860 --> 00:24:58,440 милиони бројева Бен вероватно не бих могла сасвим тако брзо, 505 00:24:58,440 --> 00:25:00,620 под претпоставком да је било празнине у броју. 506 00:25:00,620 --> 00:25:03,450 Прилично лако да бројим до милион иначе, троши само време. 507 00:25:03,450 --> 00:25:07,150 >> Тако да је алгоритам звучи као Бен користи управо сада 508 00:25:07,150 --> 00:25:08,930 је потрага за најмањим бројем. 509 00:25:08,930 --> 00:25:12,900 Дакле, иако ми људи може да у много информација визуелно, 510 00:25:12,900 --> 00:25:14,830 компјутер је у ствари мало више ограничен. 511 00:25:14,830 --> 00:25:17,560 Рачунар може само погледај један бајт у исто време 512 00:25:17,560 --> 00:25:20,770 или можда четири бајта ат а једном-- ових дана можда 8 бајтова ат а једном-- 513 00:25:20,770 --> 00:25:24,450 али веома мали број бајтова у датом тренутку. 514 00:25:24,450 --> 00:25:28,480 >> Дакле, с обзиром да заиста имамо четири одвојене вредности овде- 515 00:25:28,480 --> 00:25:32,440 а можете мислити о Бен као да амове да је био рачунар тако 516 00:25:32,440 --> 00:25:36,450 да не може да види ништа друго од једног броја има у једном-- 517 00:25:36,450 --> 00:25:39,720 тако да ће генерално претпоставити, као у Енглески, ми ћемо читати са десна на лево. 518 00:25:39,720 --> 00:25:42,870 Дакле, први број Бен вероватно изгледало на било четири и онда веома брзо 519 00:25:42,870 --> 00:25:44,770 схватили да је прилично велика нумбер-- пусти ме да тражим. 520 00:25:44,770 --> 00:25:45,357 >> Има два. 521 00:25:45,357 --> 00:25:45,940 Сачекај минут. 522 00:25:45,940 --> 00:25:47,070 Два мања од четири. 523 00:25:47,070 --> 00:25:47,986 Идем да се сетим. 524 00:25:47,986 --> 00:25:49,070 Два је сада најмањи. 525 00:25:49,070 --> 00:25:50,417 Сада једног-- то је још боље. 526 00:25:50,417 --> 00:25:51,250 То је још мања. 527 00:25:51,250 --> 00:25:54,000 Ја ћу да заборавим два и само се сетите једног сада. 528 00:25:54,000 --> 00:25:56,550 >> И могао да престане да гледа? 529 00:25:56,550 --> 00:25:58,360 Па, могао је заснован на овим информацијама, 530 00:25:58,360 --> 00:26:00,477 али је боље претрагу остатак листе. 531 00:26:00,477 --> 00:26:02,060 Јер, шта ако нуле били на листи? 532 00:26:02,060 --> 00:26:03,643 Шта ако негативан били на листи? 533 00:26:03,643 --> 00:26:07,720 Он зна само да његов одговор је исправан ако је исцрпно 534 00:26:07,720 --> 00:26:08,729 Проверио целу листу. 535 00:26:08,729 --> 00:26:10,020 Тако да погледамо остатак ове. 536 00:26:10,020 --> 00:26:11,394 Три-- да је било губљење времена. 537 00:26:11,394 --> 00:26:13,540 Гот среће, али сам био ипак исправно да то учини. 538 00:26:13,540 --> 00:26:17,857 И сада он вероватно изабран најмањи број 539 00:26:17,857 --> 00:26:20,440 и само то врати на почетку листе, као што ћу радити овде. 540 00:26:20,440 --> 00:26:23,480 Шта си урадио следећи, иако ниси мислите о томе скоро 541 00:26:23,480 --> 00:26:25,962 у том смислу? 542 00:26:25,962 --> 00:26:27,670 Поновите поступак, па нека петље. 543 00:26:27,670 --> 00:26:28,920 Ту је и познато идеја. 544 00:26:28,920 --> 00:26:30,860 Дакле, овде је четири. 545 00:26:30,860 --> 00:26:32,110 То је тренутно најмањи. 546 00:26:32,110 --> 00:26:33,220 То је кандидат. 547 00:26:33,220 --> 00:26:33,900 Више не. 548 00:26:33,900 --> 00:26:34,770 Сада сам видела два. 549 00:26:34,770 --> 00:26:36,630 То је следећи најмањи елемент. 550 00:26:36,630 --> 00:26:40,800 Три-- то није мањи, тако Сада Бен може истргнути два. 551 00:26:40,800 --> 00:26:44,510 >> И сада понављамо процес, и наравно три буде извучена следећи. 552 00:26:44,510 --> 00:26:45,420 Поновите поступак. 553 00:26:45,420 --> 00:26:46,990 Четири буде извучена. 554 00:26:46,990 --> 00:26:50,140 А сада смо ван бројева, па морају уредити листа. 555 00:26:50,140 --> 00:26:51,960 >> И заиста, ово је формални алгоритам. 556 00:26:51,960 --> 00:26:56,610 Компјутерски научник би ово називају "селекције врсту," 557 00:26:56,610 --> 00:27:00,880 идеја је била Сортирај А лист итеративели-- поново 558 00:27:00,880 --> 00:27:03,807 и опет и опет избора најмањи број. 559 00:27:03,807 --> 00:27:06,140 А шта је лепо у вези је то је тако проклето интуитивно. 560 00:27:06,140 --> 00:27:07,470 То је тако једноставно. 561 00:27:07,470 --> 00:27:11,100 И можете поновити исти операција опет и опет. 562 00:27:11,100 --> 00:27:12,150 То је једноставно. 563 00:27:12,150 --> 00:27:17,170 >> У овом случају то је био брз, али колико то заправо траје? 564 00:27:17,170 --> 00:27:19,880 Хајде да се чини и Осећам се мало више досадан. 565 00:27:19,880 --> 00:27:24,150 Дакле, један, два, три, четири, пет шест, седам, осам, девет, 10, 11, 12, 13, 14, 566 00:27:24,150 --> 00:27:26,160 15, 16 произвољан број. 567 00:27:26,160 --> 00:27:28,780 Само сам хтео више ово Време од само четири. 568 00:27:28,780 --> 00:27:30,780 Дакле, ако имам једну целину гомила бројева је сада-- 569 00:27:30,780 --> 00:27:32,420 чак ни не битно оно што су- ЛЕТ'С 570 00:27:32,420 --> 00:27:34,380 размислите о томе шта ово алгоритам заиста изгледа. 571 00:27:34,380 --> 00:27:35,857 >> Претпостављам да су бројеви тамо. 572 00:27:35,857 --> 00:27:38,190 Опет, није битно шта они су, али су случајно. 573 00:27:38,190 --> 00:27:39,679 Пријављујем Бен алгоритам. 574 00:27:39,679 --> 00:27:41,220 Морам да изаберете најмањи број. 575 00:27:41,220 --> 00:27:41,761 Шта да радим? 576 00:27:41,761 --> 00:27:44,240 И ја ћу физички уради ово време да се делује ван. 577 00:27:44,240 --> 00:27:46,099 Гледајући, гледајући, гледа, гледа, гледа. 578 00:27:46,099 --> 00:27:48,140 Само се ја не да крај листе може 579 00:27:48,140 --> 00:27:51,230 Схватам најмањи број је два овај пут. 580 00:27:51,230 --> 00:27:52,720 Један није на листи. 581 00:27:52,720 --> 00:27:54,400 Па сам спустио два. 582 00:27:54,400 --> 00:27:55,590 >> Шта даље да радим? 583 00:27:55,590 --> 00:27:58,600 Гледајући, гледајући, гледајући, гледајући. 584 00:27:58,600 --> 00:28:02,250 Сада сам нашао број седам, јер има недостаци у овим нумберс-- 585 00:28:02,250 --> 00:28:03,300 али само произвољна. 586 00:28:03,300 --> 00:28:03,800 У реду. 587 00:28:03,800 --> 00:28:06,030 Тако да сада могу спустити седам. 588 00:28:06,030 --> 00:28:08,860 Гледајући гледајући, гледајући. 589 00:28:08,860 --> 00:28:11,030 >> Сада претпостављам, од Наравно, да је Бен не 590 00:28:11,030 --> 00:28:14,780 има додатни РАМ, екстра меморије, јер, наравно, 591 00:28:14,780 --> 00:28:16,080 Гледам истог броја. 592 00:28:16,080 --> 00:28:18,246 Сигурно сам могао сетио све те бројеве, 593 00:28:18,246 --> 00:28:19,930 и то је апсолутно тачно. 594 00:28:19,930 --> 00:28:22,610 Али, ако Бен сећа све бројева што је видео, 595 00:28:22,610 --> 00:28:24,430 он није заиста направио основни напредак 596 00:28:24,430 --> 00:28:26,170 јер већ има могућност претраживања 597 00:28:26,170 --> 00:28:27,540 кроз бројеве на табли. 598 00:28:27,540 --> 00:28:29,373 Сећање све од Бројеви не помаже, 599 00:28:29,373 --> 00:28:32,490 јер је још увек може као рачунар само погледати, што смо рекли, један број 600 00:28:32,490 --> 00:28:33,080 у време. 601 00:28:33,080 --> 00:28:35,760 Тако да нема нека врста варалице тамо да можете искористити. 602 00:28:35,760 --> 00:28:39,170 >> Дакле, у стварности, као што сам држати у потрази листу, 603 00:28:39,170 --> 00:28:44,200 Буквално да се само наставити напред и назад кроз њега, черупање се 604 00:28:44,200 --> 00:28:45,710 следећи најмањи број. 605 00:28:45,710 --> 00:28:48,810 И као што можете некако закључити из моје смијешне кретања, 606 00:28:48,810 --> 00:28:50,860 ово постаје веома досадан врло брзо, 607 00:28:50,860 --> 00:28:54,850 и чини ми се да се враћам и напред, назад и напред доста. 608 00:28:54,850 --> 00:29:03,220 Сада да будемо фер, ја не морам да идем толико, па, хајде да видео-- да буде фер, 609 00:29:03,220 --> 00:29:06,310 Не морају да пешаче прилично онолико корака сваки пут. 610 00:29:06,310 --> 00:29:09,200 Јер, наравно, као што сам одабрати бројеве из листе, 611 00:29:09,200 --> 00:29:11,860 преостали листа постаје краћи. 612 00:29:11,860 --> 00:29:14,240 >> Па Размислимо колико корака Ја сам у ствари 613 00:29:14,240 --> 00:29:16,010 траипсинг кроз сваки пут. 614 00:29:16,010 --> 00:29:18,950 У првом стању имали смо 16 бројева, 615 00:29:18,950 --> 00:29:22,210 и тако макималли-- хајде да Од овога дисцуссион-- 616 00:29:22,210 --> 00:29:25,640 Морао сам да погледам кроз 16 Бројеви наћи најмањи. 617 00:29:25,640 --> 00:29:28,420 Али када сам извукао најмањи број, како 618 00:29:28,420 --> 00:29:30,590 док је преосталих листи, наравно? 619 00:29:30,590 --> 00:29:31,420 Само 15. 620 00:29:31,420 --> 00:29:34,670 Дакле, колико бројева је Бен или морам да погледа кроз други пут око? 621 00:29:34,670 --> 00:29:36,832 15, само да одем и наћи најмањи. 622 00:29:36,832 --> 00:29:39,540 Али сада, наравно, списак је, такође, мањи него раније. 623 00:29:39,540 --> 00:29:42,540 Дакле, колико корака зар не узети следећи пут? 624 00:29:42,540 --> 00:29:49,970 14 и потом 13 и онда 12 плус тачка, тачка, тачка, док сам отишао са само једним. 625 00:29:49,970 --> 00:29:53,146 Тако да сада компјутер научник би питај, па, шта то сви једнаки? 626 00:29:53,146 --> 00:29:55,770 То је заправо једнако неким конкретним број који смо могли сигурно 627 00:29:55,770 --> 00:30:00,490 до аритметички, али желимо да говоримо о ефикасности алгоритама 628 00:30:00,490 --> 00:30:04,940 мало више формулаицалли, независно од колико је листа. 629 00:30:04,940 --> 00:30:06,240 >> И да знате шта? 630 00:30:06,240 --> 00:30:09,860 Ово је 16, али као што сам већ рекао, Назовимо величину проблема 631 00:30:09,860 --> 00:30:10,970 н, где је н одређени број. 632 00:30:10,970 --> 00:30:13,220 Можда је 16, можда је три, можда је милион. 633 00:30:13,220 --> 00:30:13,761 Не знам. 634 00:30:13,761 --> 00:30:14,390 Није ме брига. 635 00:30:14,390 --> 00:30:16,520 Оно што заиста желим је формула која могу 636 00:30:16,520 --> 00:30:19,420 користити за успоредбу овог алгоритма против других алгоритама 637 00:30:19,420 --> 00:30:22,350 да би неко тврди су бољи или гори. 638 00:30:22,350 --> 00:30:25,430 >> Тако испада, и само ја знам из основној школи, 639 00:30:25,430 --> 00:30:34,790 да је ово заправо ради се на исти ствар као н преко Н плус једна два. 640 00:30:34,790 --> 00:30:40,020 И то деси до изједначења, од Наравно, Н квадрат плус Н преко два. 641 00:30:40,020 --> 00:30:43,250 Дакле, ако сам желео формулу за колико корака 642 00:30:43,250 --> 00:30:46,330 били укључени у потрази уопште од Изнова и изнова тих бројева 643 00:30:46,330 --> 00:30:52,681 и опет и опет, ја бих то Н квадрат плус Н преко два. 644 00:30:52,681 --> 00:30:53,430 Али, знате шта? 645 00:30:53,430 --> 00:30:54,500 Ово само изгледа неуредно. 646 00:30:54,500 --> 00:30:56,470 Ја стварно желим општи утисак ствари. 647 00:30:56,470 --> 00:30:58,810 А ви се сећате из гимназија да 648 00:30:58,810 --> 00:31:00,660 је појам највишег термина реда. 649 00:31:00,660 --> 00:31:05,300 Који од ових услова, н квадрат, Н, или пола, 650 00:31:05,300 --> 00:31:07,550 има највећи утицај током времена? 651 00:31:07,550 --> 00:31:11,920 Што је већи Н добија, који од ових највише користи стварима? 652 00:31:11,920 --> 00:31:15,560 >> Другим речима, ако плуг у милион н на квадрат 653 00:31:15,560 --> 00:31:17,900 ће бити највероватније доминантан фактор, 654 00:31:17,900 --> 00:31:21,670 јер је милион пута Сама је много већи 655 00:31:21,670 --> 00:31:23,682 од плус један додатни милион. 656 00:31:23,682 --> 00:31:24,390 Дакле, знате шта? 657 00:31:24,390 --> 00:31:27,305 Ово је тако проклето велика број ако квадратни број. 658 00:31:27,305 --> 00:31:28,430 Ово стварно није важно. 659 00:31:28,430 --> 00:31:30,596 Ми ћемо крст који се и заборави на то. 660 00:31:30,596 --> 00:31:34,250 И тако је компјутерски научник бих да је ефикасност овог алгоритма 661 00:31:34,250 --> 00:31:37,850 о којој се ради од н скуаред-- Мислим истински приближан. 662 00:31:37,850 --> 00:31:40,810 То је нека врста грубо н на квадрат. 663 00:31:40,810 --> 00:31:44,130 Током времена, већа и већи Н добија, ово 664 00:31:44,130 --> 00:31:47,610 је добар процена за шта ефикасност или недостатак ефикасности 665 00:31:47,610 --> 00:31:49,400 овог алгоритма је заправо. 666 00:31:49,400 --> 00:31:52,040 И доносим то, наравно, од стварног математику. 667 00:31:52,040 --> 00:31:54,040 Али сада сам само махање моје руке, јер сам управо 668 00:31:54,040 --> 00:31:55,790 Желим општи смисао овог алгоритма. 669 00:31:55,790 --> 00:31:58,850 >> Дакле, користећи исту логику, у међувремену, Размотримо још један алгоритам 670 00:31:58,850 --> 00:32:01,162 већ гледали ат-- линеарно претрагу. 671 00:32:01,162 --> 00:32:02,870 Када сам тражио за телефонски боок-- 672 00:32:02,870 --> 00:32:05,980 не сортирање, претраживање преко телефона боок-- 673 00:32:05,980 --> 00:32:09,197 ми је говорила да је 1.000 корака, или 500 корака. 674 00:32:09,197 --> 00:32:10,280 Али хајде да генерализовати то. 675 00:32:10,280 --> 00:32:12,860 Ако постоји н странице у телефонски именик, што је 676 00:32:12,860 --> 00:32:17,250 прирастао време или Ефикасност линеарне претраге? 677 00:32:17,250 --> 00:32:19,750 То је реда колико корака да пронађете 678 00:32:19,750 --> 00:32:24,210 Мајк Смит користећи линеарно претрагу, Први алгоритам, или чак други? 679 00:32:24,210 --> 00:32:27,240 680 00:32:27,240 --> 00:32:31,710 >> У најгорем случају, Мике је на крају књиге. 681 00:32:31,710 --> 00:32:35,590 Дакле, ако је телефон књига има 1.000 страница, смо рекли прошли пут, у најгорем случају, 682 00:32:35,590 --> 00:32:38,380 можда ће бити потребно отприлике колико много страница да пронађу Мике? 683 00:32:38,380 --> 00:32:38,990 Као 1.000. 684 00:32:38,990 --> 00:32:39,830 То је горња граница. 685 00:32:39,830 --> 00:32:41,790 То је најгора могућа ситуација. 686 00:32:41,790 --> 00:32:44,410 Али опет, ми смо удаљава од бројева као што је 1.000 сада. 687 00:32:44,410 --> 00:32:45,730 То је само бр. 688 00:32:45,730 --> 00:32:47,470 >> Дакле, шта је логичан закључак? 689 00:32:47,470 --> 00:32:50,210 Проналажење Мике у телефону књига која има н странице 690 00:32:50,210 --> 00:32:55,280 може трајати, у веома најгорем случају, колико корака на реда н? 691 00:32:55,280 --> 00:32:58,110 И заиста компјутер научник бих 692 00:32:58,110 --> 00:33:02,340 да је покренут време, или перформансе или ефикасности 693 00:33:02,340 --> 00:33:07,470 или неефикасност, алгоритма као линеарна потрага реда н. 694 00:33:07,470 --> 00:33:10,010 И можемо применити исти логика преласка нешто 695 00:33:10,010 --> 00:33:13,170 као што сам урадио у другом алгоритам смо имали са телефонском именику, 696 00:33:13,170 --> 00:33:16,040 где смо две странице одједном. 697 00:33:16,040 --> 00:33:20,120 >> Дакле, 1.000 страна именик мигхт да нас 500 страница скретања, плус један 698 00:33:20,120 --> 00:33:21,910 ако се поново врате мало. 699 00:33:21,910 --> 00:33:26,590 Дакле, ако телефонски именик има н странице, али радимо две странице одједном, 700 00:33:26,590 --> 00:33:28,900 то је отприлике шта? 701 00:33:28,900 --> 00:33:33,190 Н преко две, тако да је као н преко два. 702 00:33:33,190 --> 00:33:38,490 Али сам направио да тражи малочас да је н преко два-- 703 00:33:38,490 --> 00:33:41,060 То је врста исто као и само н. 704 00:33:41,060 --> 00:33:44,050 То је само стални фактор, компјутерски научници би рекао. 705 00:33:44,050 --> 00:33:45,970 Хајде да се фокусира само на су варијабле, стварно-- 706 00:33:45,970 --> 00:33:47,780 највећи променљиве у једначини. 707 00:33:47,780 --> 00:33:52,530 >> Тако линеарно претраживање, без обзира да ли урадио један страна у исто време или две странице одједном, 708 00:33:52,530 --> 00:33:54,810 је нека врста основи исти. 709 00:33:54,810 --> 00:33:56,880 Још увек је по налогу н. 710 00:33:56,880 --> 00:34:01,930 Али ја тврдио са мојом сликом раније да трећи алгоритам није 711 00:34:01,930 --> 00:34:02,480 линеарна. 712 00:34:02,480 --> 00:34:03,605 То није био равна линија. 713 00:34:03,605 --> 00:34:08,659 Било је то закривљен линија, и алгебарски Формула било шта? 714 00:34:08,659 --> 00:34:11,812 Лог од н-- тако лог база два н. 715 00:34:11,812 --> 00:34:14,520 И не морамо ићи у превише много детаља о логаритми данас, 716 00:34:14,520 --> 00:34:17,394 али већина компјутерски научници не би чак ти рећи шта је база. 717 00:34:17,394 --> 00:34:20,639 Јер је то све само сталне факторе, да тако кажем, 718 00:34:20,639 --> 00:34:22,659 само мале бројчане разлике. 719 00:34:22,659 --> 00:34:31,179 Па то би био веома чест начин за посебно формално рачунар 720 00:34:31,179 --> 00:34:33,949 Научници у одбор или програмери белој табли 721 00:34:33,949 --> 00:34:36,889 заправо тврдећи који алгоритам да би користили 722 00:34:36,889 --> 00:34:39,500 или шта је ефикасност на њихов алгоритам је. 723 00:34:39,500 --> 00:34:42,960 >> И то не мора да буде нешто ви расправљати детаље, 724 00:34:42,960 --> 00:34:47,889 али добар програмер је неко који има солидну, формално позадину. 725 00:34:47,889 --> 00:34:50,120 Он је у стању да разговара са Ви у оваквом путу 726 00:34:50,120 --> 00:34:53,350 и заправо чине квалитативне аргументи као 727 00:34:53,350 --> 00:34:56,870 зашто један алгоритам или један комад софтвера 728 00:34:56,870 --> 00:35:00,165 супериоран на неки начин у другу. 729 00:35:00,165 --> 00:35:02,540 Зато што сте могли сигурно само покренути програм једне особе 730 00:35:02,540 --> 00:35:04,980 и броји секунди је потребно за сортирање неке бројеве, 731 00:35:04,980 --> 00:35:06,710 а можете покренути неки друге особе програм 732 00:35:06,710 --> 00:35:08,418 и изброји секунди је потребно. 733 00:35:08,418 --> 00:35:12,840 Али ово је више општи начин на који можете користити за анализу алгоритама, 734 00:35:12,840 --> 00:35:15,520 ако хоћете, само на папир или само усмено. 735 00:35:15,520 --> 00:35:18,430 Чак и без ради, без Чак покушава узорака улаза, 736 00:35:18,430 --> 00:35:20,180 само се уразумити кроз њега. 737 00:35:20,180 --> 00:35:24,670 И тако са ангажовањем програмер или ако да га или њу некако тврде да вам 738 00:35:24,670 --> 00:35:28,460 зашто је њихов алгоритам, њихова тајна сос за претраживање милијарде 739 00:35:28,460 --> 00:35:30,580 веб страница за ваш Компанија је бољи, ови 740 00:35:30,580 --> 00:35:33,302 су врсте аргумената они би идеално моћи да. 741 00:35:33,302 --> 00:35:35,010 Или бар су Врсте ствари 742 00:35:35,010 --> 00:35:40,211 да ће доћи у дискусији, у бар у веома формалне расправе. 743 00:35:40,211 --> 00:35:40,710 У реду. 744 00:35:40,710 --> 00:35:44,400 И Бен је предложио нешто зове избор врста. 745 00:35:44,400 --> 00:35:48,200 Али ја ћу предложити да постоји други начини да се ово уради, такодје. 746 00:35:48,200 --> 00:35:50,400 Оно што нисам волела о Беновом алгоритам 747 00:35:50,400 --> 00:35:54,400 је да је стално хода, или што да ходам, напред и назад 748 00:35:54,400 --> 00:35:56,930 и назад и напред и назад и напред. 749 00:35:56,930 --> 00:36:04,130 Шта ако уместо тога требало да урадим нешто попут ових бројева овде 750 00:36:04,130 --> 00:36:08,200 и ја смо се само баве са сваким број заузврат како сам га дао? 751 00:36:08,200 --> 00:36:10,780 >> Другим речима, овде је мој списак бројева. 752 00:36:10,780 --> 00:36:12,944 Четири, један, три, два. 753 00:36:12,944 --> 00:36:14,360 И ја ћу да урадите следеће. 754 00:36:14,360 --> 00:36:17,230 Ја ћу убацити бројеве где су радије припадају 755 00:36:17,230 --> 00:36:18,980 од одабира их једну по једну. 756 00:36:18,980 --> 00:36:20,820 Другим речима, овде је број четири. 757 00:36:20,820 --> 00:36:22,430 >> Ево мој оригинални списак. 758 00:36:22,430 --> 00:36:25,290 И ја ћу да се одржи у суштини нова листа овде. 759 00:36:25,290 --> 00:36:26,710 Дакле, ово је стара листа. 760 00:36:26,710 --> 00:36:28,560 Ово је нова листа. 761 00:36:28,560 --> 00:36:30,220 Видим да је број четири прва. 762 00:36:30,220 --> 00:36:34,500 Моја нова листа је иницијално празна, тако да је тривијално случај 763 00:36:34,500 --> 00:36:36,410 да четири сада ассортед листу. 764 00:36:36,410 --> 00:36:39,560 Само сам узела број сам дао, и ја га стављам у мом новом списку. 765 00:36:39,560 --> 00:36:41,460 >> Да ли је ово нова листа поредани? 766 00:36:41,460 --> 00:36:41,990 Да. 767 00:36:41,990 --> 00:36:45,090 То је глупо, јер постоји само један елеменат, али то је апсолутно поредани. 768 00:36:45,090 --> 00:36:46,390 Не постоји ништа на свом месту. 769 00:36:46,390 --> 00:36:49,290 То је још занимљивије, овај алгоритам, када сам прећи на следећи корак. 770 00:36:49,290 --> 00:36:50,550 >> Сада имам једну. 771 00:36:50,550 --> 00:36:55,430 Дакле, један, наравно, припада Ат тхе почетак или крај ове нове листе? 772 00:36:55,430 --> 00:36:56,360 Почетак. 773 00:36:56,360 --> 00:36:58,530 Па морам да урадим неки посао сада. 774 00:36:58,530 --> 00:37:01,410 Ја сам узимала неки слободе с мојим маркер 775 00:37:01,410 --> 00:37:03,120 за само цртање ствари где сам их желим, 776 00:37:03,120 --> 00:37:05,320 али то није стварно прецизан у рачунару. 777 00:37:05,320 --> 00:37:08,530 Компјутер, као што знамо, има РАМ или Рандом Аццесс Мемори, 778 00:37:08,530 --> 00:37:12,411 и то је један бајт и још један бајт и други бајт. 779 00:37:12,411 --> 00:37:14,910 И ако имате гигабајт РАМ-а, имате милијарду бајтова, 780 00:37:14,910 --> 00:37:16,680 али су физички су на једној локацији. 781 00:37:16,680 --> 00:37:19,540 Не можете тек крећу ствари унаоколо тако што ћете га цртање на табли 782 00:37:19,540 --> 00:37:20,750 где год желиш. 783 00:37:20,750 --> 00:37:24,090 Дакле, ако мој нови списак има четири локације у меморији, 784 00:37:24,090 --> 00:37:27,480 нажалост, четири је већ на погрешном месту. 785 00:37:27,480 --> 00:37:30,410 >> Тако да унесете број један Не могу само да скренем овде. 786 00:37:30,410 --> 00:37:31,901 Овај меморијски простор не постоји. 787 00:37:31,901 --> 00:37:35,150 То би било варање, и ја сам био варање ликовно за неколико минута 788 00:37:35,150 --> 00:37:35,800 овде. 789 00:37:35,800 --> 00:37:40,950 Дакле стварно, ако желим да ставим један овде, Морам да привремено копирање четири 790 00:37:40,950 --> 00:37:43,030 а затим ставити ону тамо. 791 00:37:43,030 --> 00:37:45,500 >> То је у реду, то је тачно, То је технички могуће, 792 00:37:45,500 --> 00:37:48,410 али схватите да је то додатни посао. 793 00:37:48,410 --> 00:37:50,460 Нисам само ставити број на месту. 794 00:37:50,460 --> 00:37:53,026 Први пут сам морао да померим број, а затим га ставити на место, 795 00:37:53,026 --> 00:37:54,650 па сам некако удвостручио своју количину посла. 796 00:37:54,650 --> 00:37:55,660 Дакле, имајте то на уму. 797 00:37:55,660 --> 00:37:57,120 >> Али ја сам сада завршио са овим елементом. 798 00:37:57,120 --> 00:37:59,056 Сада желим да зграбите број три. 799 00:37:59,056 --> 00:38:00,430 Где је, наравно, то припада? 800 00:38:00,430 --> 00:38:01,480 Између. 801 00:38:01,480 --> 00:38:03,650 Не могу варати више и само стави тамо, 802 00:38:03,650 --> 00:38:06,770 јер, опет, ове меморије је у физичке локације. 803 00:38:06,770 --> 00:38:10,900 Тако да морам да копира четири и ставити три овде. 804 00:38:10,900 --> 00:38:11,550 Није велика ствар. 805 00:38:11,550 --> 00:38:14,610 То је само један додатни корак Поново: осећа веома јефтин. 806 00:38:14,610 --> 00:38:16,445 >> Али сада сам прешао на њих. 807 00:38:16,445 --> 00:38:17,820 Њих двојица, наравно, припада овде. 808 00:38:17,820 --> 00:38:20,990 Сада можете почети да видите како рад се гомилају. 809 00:38:20,990 --> 00:38:23,520 Сада шта ја треба да урадим? 810 00:38:23,520 --> 00:38:28,570 Да, морам да померите четири, онда морам да копира три, 811 00:38:28,570 --> 00:38:31,200 а сада могу убацити два. 812 00:38:31,200 --> 00:38:34,460 А проблем са овим алгоритам, занимљиво, 813 00:38:34,460 --> 00:38:41,050 је да претпоставимо да имамо као екстремну случај где је рецимо осам, седам, 814 00:38:41,050 --> 00:38:45,150 шест, пет, четири, три, два, један. 815 00:38:45,150 --> 00:38:49,450 Ово је, у многим контекстима, најгори сценарио, 816 00:38:49,450 --> 00:38:51,570 јер је проклета ствар је буквално уназад. 817 00:38:51,570 --> 00:38:53,670 >> Није у питању заиста утицати Бен алгоритам, 818 00:38:53,670 --> 00:38:55,940 јер у избору Беновом врста он ће задржати 819 00:38:55,940 --> 00:38:58,359 иде напред и назад кроз листу. 820 00:38:58,359 --> 00:39:01,150 И зато што је увек у потрази кроз цео преосталих листи, 821 00:39:01,150 --> 00:39:02,858 није битно где су елементи. 822 00:39:02,858 --> 00:39:05,630 Али у овом случају са мојим уметање аппроацх-- да пробамо ово. 823 00:39:05,630 --> 00:39:08,616 >> Дакле, један, два, три, четири, пет, шест, седам, осам. 824 00:39:08,616 --> 00:39:11,630 Један два три четири, пет, шест, седам, осам. 825 00:39:11,630 --> 00:39:14,320 Ја ћу узети осам, и где да га ставим? 826 00:39:14,320 --> 00:39:17,260 Па, на почетку мог списка, јер ова нова листа је сортирана. 827 00:39:17,260 --> 00:39:18,760 И ја га прецртати. 828 00:39:18,760 --> 00:39:20,551 >> Где да ставим седам? 829 00:39:20,551 --> 00:39:21,050 Проклетство. 830 00:39:21,050 --> 00:39:23,174 Он мора да оде тамо, тако Морам да мало копирање. 831 00:39:23,174 --> 00:39:26,820 832 00:39:26,820 --> 00:39:28,480 А сада седам иде овде. 833 00:39:28,480 --> 00:39:29,860 Сада прелазим на шест. 834 00:39:29,860 --> 00:39:30,980 Сада је још више посла. 835 00:39:30,980 --> 00:39:32,570 >> Осам мора да иде овде. 836 00:39:32,570 --> 00:39:33,920 Седам мора да иде овде. 837 00:39:33,920 --> 00:39:35,450 Сада је шест може ићи овде. 838 00:39:35,450 --> 00:39:37,950 Сада сам узми пет. 839 00:39:37,950 --> 00:39:40,560 Сада осам мора да оде овде, седам мора да иде овде, 840 00:39:40,560 --> 00:39:43,650 шест мора да иде овде, и сада пет и понављања. 841 00:39:43,650 --> 00:39:46,610 И ја сам прилично се кретати стално. 842 00:39:46,610 --> 00:39:52,950 >> Тако да је на крају, ово алгоритхм-- ћемо зову га уметање сорт-- заправо 843 00:39:52,950 --> 00:39:55,020 има пуно посла, такође. 844 00:39:55,020 --> 00:39:56,970 То је само другачије врста посла него Бен. 845 00:39:56,970 --> 00:40:00,090 Бен рад си ме преварио напред и назад све време, 846 00:40:00,090 --> 00:40:03,510 избор следећи најмањи Елемент изнова и изнова. 847 00:40:03,510 --> 00:40:06,660 Тако да је ово веома визуелни врста посла. 848 00:40:06,660 --> 00:40:10,600 >> Овај други алгоритам, који је још увијек цоррецт-- да ће добити посао доне-- 849 00:40:10,600 --> 00:40:12,800 само мења количину посла. 850 00:40:12,800 --> 00:40:15,420 Изгледа да у почетку си уштеде, јер си само 851 00:40:15,420 --> 00:40:19,190 која се бави сваки елемент напред без ходања све 852 00:40:19,190 --> 00:40:20,930 пут кроз листу као Бен је. 853 00:40:20,930 --> 00:40:25,300 Али проблем је, посебно у овим црази случајевима где је то све уназад, 854 00:40:25,300 --> 00:40:27,830 ти си некако одлагање тежак посао 855 00:40:27,830 --> 00:40:30,360 док то не морате поправити своје грешке. 856 00:40:30,360 --> 00:40:33,919 >> Па ако можете замислити ово осам и седам и шест и пет 857 00:40:33,919 --> 00:40:36,710 а потом четири и три и два креће свој пут кроз листу, 858 00:40:36,710 --> 00:40:39,060 смо управо промени врста посла радимо. 859 00:40:39,060 --> 00:40:42,340 Уместо да се то уради На почетак мог итерације, 860 00:40:42,340 --> 00:40:45,250 Ја само то радио на крај сваког итерација. 861 00:40:45,250 --> 00:40:50,550 Тако испада да овог алгоритма, такође, уопштено назван сортирање уметањем, 862 00:40:50,550 --> 00:40:52,190 је такође реда од н на квадрат. 863 00:40:52,190 --> 00:40:56,480 То је заправо ништа боље, нема бољег уопште. 864 00:40:56,480 --> 00:41:00,810 >> Међутим, постоји трећи приступ Ја бих и да размотримо, 865 00:41:00,810 --> 00:41:02,970 који је ово. 866 00:41:02,970 --> 00:41:07,850 Претпостављам моју листу, због једноставности опет, четири, један, три, 867 00:41:07,850 --> 00:41:11,080 два-- само четири броја. 868 00:41:11,080 --> 00:41:13,300 Бен је имао добру интуицију, добро људској интуицији 869 00:41:13,300 --> 00:41:16,340 пре, којим смо фикед цела лист евентуалли-- сортирање уметањем. 870 00:41:16,340 --> 00:41:18,020 наговорили да нас заједно. 871 00:41:18,020 --> 00:41:22,530 Али хајде да размотри Најједноставнији начин да се поправи ову листу. 872 00:41:22,530 --> 00:41:24,110 >> Ова листа се не сортира. 873 00:41:24,110 --> 00:41:26,130 Зашто? 874 00:41:26,130 --> 00:41:31,920 На енглеском, објаснити зашто није заправо поредани. 875 00:41:31,920 --> 00:41:33,400 Шта то не значи да се сортирају? 876 00:41:33,400 --> 00:41:34,220 >> СТУДЕНТСКИ: Није узастопна. 877 00:41:34,220 --> 00:41:34,990 >> Давид Малан: Не узастопна. 878 00:41:34,990 --> 00:41:35,822 Дајте ми један пример. 879 00:41:35,822 --> 00:41:37,180 >> СТУДЕНТСКИ: Ставите их у ред. 880 00:41:37,180 --> 00:41:37,440 >> Давид Малан: У реду. 881 00:41:37,440 --> 00:41:38,790 Дај ми више конкретан пример. 882 00:41:38,790 --> 00:41:39,832 >> СТУДЕНТСКИ: растућим редоследом. 883 00:41:39,832 --> 00:41:41,206 Давид Малан: Не узлазним редоследом. 884 00:41:41,206 --> 00:41:42,100 Будем прецизнији. 885 00:41:42,100 --> 00:41:45,190 Не знам шта ви подразумевате под успону. 886 00:41:45,190 --> 00:41:47,150 Шта није у реду? 887 00:41:47,150 --> 00:41:49,930 >> СТУДЕНТСКИ: Најмањи од Бројеви није у првом простору. 888 00:41:49,930 --> 00:41:51,140 >> Давид Малан: Најмањи број је не у првом простору. 889 00:41:51,140 --> 00:41:52,120 Бити прецизнији. 890 00:41:52,120 --> 00:41:55,000 Поцињем да ухватим на. 891 00:41:55,000 --> 00:41:59,470 Ми рачунамо, али шта је у квару овде? 892 00:41:59,470 --> 00:42:00,707 >> СТУДЕНТСКИ: Нумерички секвенца. 893 00:42:00,707 --> 00:42:02,040 Давид Малан: Нумеричка секвенца. 894 00:42:02,040 --> 00:42:04,248 Свачија врста чувања то овдје-- врло висок ниво. 895 00:42:04,248 --> 00:42:07,450 Само ми буквално рећи шта је погрешно као пет-годишњи моћи. 896 00:42:07,450 --> 00:42:08,310 >> СТУДЕНТСКИ: Плус један. 897 00:42:08,310 --> 00:42:08,750 >> Давид Малан: Шта је то? 898 00:42:08,750 --> 00:42:09,610 >> СТУДЕНТСКИ: Плус један. 899 00:42:09,610 --> 00:42:11,235 >> Давид Малан: Како то мислиш плус један? 900 00:42:11,235 --> 00:42:12,754 901 00:42:12,754 --> 00:42:14,170 Дај ми другачији од пет година. 902 00:42:14,170 --> 00:42:16,840 903 00:42:16,840 --> 00:42:18,330 Шта није у реду, мама? 904 00:42:18,330 --> 00:42:19,940 Шта није у реду, тата? 905 00:42:19,940 --> 00:42:22,808 Шта ти мислиш да се не сортира? 906 00:42:22,808 --> 00:42:24,370 >> СТУДЕНТСКИ: То није право место. 907 00:42:24,370 --> 00:42:25,580 >> Давид Малан: Шта је не на правом месту? 908 00:42:25,580 --> 00:42:26,174 >> СТУДЕНТСКИ: Четири. 909 00:42:26,174 --> 00:42:27,090 Давид Малан: У реду, добро. 910 00:42:27,090 --> 00:42:29,110 Дакле, четири је не где би требало да буде. 911 00:42:29,110 --> 00:42:30,590 Посебно, је ли тако? 912 00:42:30,590 --> 00:42:33,000 Четири и једна, први два броја видим. 913 00:42:33,000 --> 00:42:34,930 Да ли је то у реду? 914 00:42:34,930 --> 00:42:36,427 Не, они су ван употребе, зар не? 915 00:42:36,427 --> 00:42:38,135 У ствари, мислим да сада о рачунару, такође. 916 00:42:38,135 --> 00:42:40,824 То може само погледати можда једном, можда две ствари на једном-- 917 00:42:40,824 --> 00:42:43,240 а заправо само једна ствар истовремено, али може бар 918 00:42:43,240 --> 00:42:45,790 погледај једну ствар онда Следећа ствар одмах поред њега. 919 00:42:45,790 --> 00:42:47,380 >> Тако је ово у реду? 920 00:42:47,380 --> 00:42:48,032 Наравно да не. 921 00:42:48,032 --> 00:42:48,740 Дакле, знате шта? 922 00:42:48,740 --> 00:42:51,020 Зашто не узмемо бебу кораци за причвршћивање овај проблем 923 00:42:51,020 --> 00:42:53,410 уместо да ради у овим модерним алгоритми попут Бен, где 924 00:42:53,410 --> 00:42:56,440 Он је на неки начин га фиксирање петље кроз листу 925 00:42:56,440 --> 00:42:59,670 уместо да ради оно што сам урадио, где Само сам то поправио док идемо? 926 00:42:59,670 --> 00:43:03,650 Хајде да се буквално сломити Појам ордер-- нумеричком редоследу, 927 00:43:03,650 --> 00:43:06,990 назовите га како год глупане-- у овим паровима поређења. 928 00:43:06,990 --> 00:43:07,590 >> Четири и један. 929 00:43:07,590 --> 00:43:09,970 Да ли је ово исправна наредба? 930 00:43:09,970 --> 00:43:11,310 Дакле, хајде да поправимо то. 931 00:43:11,310 --> 00:43:14,700 Један и четири, а затим ми ћемо само цопи то. 932 00:43:14,700 --> 00:43:15,560 У реду, добро. 933 00:43:15,560 --> 00:43:17,022 Сам поправио један и четири. 934 00:43:17,022 --> 00:43:18,320 Три и два? 935 00:43:18,320 --> 00:43:18,820 Не. 936 00:43:18,820 --> 00:43:21,690 Нека моје речи одговара прсте. 937 00:43:21,690 --> 00:43:23,695 Четири и три? 938 00:43:23,695 --> 00:43:27,930 >> То није у реду, па идем да до један, три, четири, два. 939 00:43:27,930 --> 00:43:28,680 Добро. 940 00:43:28,680 --> 00:43:32,310 Сада четири и два? 941 00:43:32,310 --> 00:43:33,370 Морамо да поправимо ово. 942 00:43:33,370 --> 00:43:36,700 Тако један, три, два, четири. 943 00:43:36,700 --> 00:43:39,820 Тако је то поредани? 944 00:43:39,820 --> 00:43:43,170 Не, али да ли је ближе поредани? 945 00:43:43,170 --> 00:43:48,930 >> То је, јер фиксни ово грешка, фиксна смо ову грешку, 946 00:43:48,930 --> 00:43:50,370 и ми фиксне ову грешку. 947 00:43:50,370 --> 00:43:52,420 Тако да фиксна три грешке вероватно. 948 00:43:52,420 --> 00:43:58,100 Још увек не изгледа сортирана, али је објективно ближе сортирана 949 00:43:58,100 --> 00:44:00,080 јер фиксни неке од тих грешака. 950 00:44:00,080 --> 00:44:02,047 >> Шта даље да радим? 951 00:44:02,047 --> 00:44:03,630 Некако дошла до краја листе. 952 00:44:03,630 --> 00:44:05,680 Учинило ми се да имају фиксне све грешке, али не. 953 00:44:05,680 --> 00:44:08,510 Јер у овом случају, неки бројеви можда у мехурићима се ближе 954 00:44:08,510 --> 00:44:10,410 у другим бројевима које су и даље у квару. 955 00:44:10,410 --> 00:44:12,951 Па хајде да то урадимо поново, и ја ћу само уради у месту овај пут. 956 00:44:12,951 --> 00:44:14,170 Један и три? 957 00:44:14,170 --> 00:44:14,720 Добро је. 958 00:44:14,720 --> 00:44:16,070 Три и два? 959 00:44:16,070 --> 00:44:17,560 Наравно не, па хајде да променимо. 960 00:44:17,560 --> 00:44:19,160 Дакле, два, три. 961 00:44:19,160 --> 00:44:21,340 Три и четири? 962 00:44:21,340 --> 00:44:24,370 А сада будимо Посебно педантан овде. 963 00:44:24,370 --> 00:44:26,350 Да ли је поредани? 964 00:44:26,350 --> 00:44:29,280 Ти људи знају да смо решили. 965 00:44:29,280 --> 00:44:30,400 >> Требало би да покушате поново. 966 00:44:30,400 --> 00:44:31,900 Па Оливија предлаже да покушам поново. 967 00:44:31,900 --> 00:44:32,530 Зашто? 968 00:44:32,530 --> 00:44:35,810 Јер рачунар нема луксуз наших људских очију 969 00:44:35,810 --> 00:44:38,080 да само гледајући натраг-- реду, готов сам. 970 00:44:38,080 --> 00:44:41,610 Како компјутер одреди да је листа сада сортиране? 971 00:44:41,610 --> 00:44:44,590 Механички. 972 00:44:44,590 --> 00:44:47,650 >> Морам да идем кроз још једном, и само ако 973 00:44:47,650 --> 00:44:51,190 не прави / нађете неку грешку могу онда закључити као компјутер, Да, 974 00:44:51,190 --> 00:44:51,980 ми смо добро иде. 975 00:44:51,980 --> 00:44:54,850 Дакле, један и два, два и три, три и четири. 976 00:44:54,850 --> 00:44:58,030 Сада сам дефинитивно могу рећи да је ово поредани, јер сам се никакве промене. 977 00:44:58,030 --> 00:45:01,940 Сада би било грешка и само глупо ако И, рачунар, 978 00:45:01,940 --> 00:45:05,640 опет питао те исте питања очекујући различите одговоре. 979 00:45:05,640 --> 00:45:07,110 не би требало да се деси. 980 00:45:07,110 --> 00:45:08,600 >> Па сада Листа је сортирана. 981 00:45:08,600 --> 00:45:12,630 На жалост, руннинг време Овај алгоритам је такође Н квадрат. 982 00:45:12,630 --> 00:45:13,130 Зашто? 983 00:45:13,130 --> 00:45:19,520 Јер имате н бројева, ау у најгорем случају морате да преместите н бројева 984 00:45:19,520 --> 00:45:23,637 н пута јер треба да наставимо назад на провери и потенцијално поправити 985 00:45:23,637 --> 00:45:24,220 ови бројеви. 986 00:45:24,220 --> 00:45:26,280 И можемо учинити више формална анализа, такође. 987 00:45:26,280 --> 00:45:29,530 >> Дакле, ово је све да кажем да сам узео три различита приступа, један 988 00:45:29,530 --> 00:45:32,210 од њих одмах интуитиван искључити шишмиш из Бен 989 00:45:32,210 --> 00:45:35,170 у мом предложена уметања врста на овај 990 00:45:35,170 --> 00:45:38,540 где сте некако изгубити из вида шума за дрвеће у почетку. 991 00:45:38,540 --> 00:45:41,760 Али онда, ако се корак уназад, Воила, ми смо фиксни појам сортирања. 992 00:45:41,760 --> 00:45:43,824 Дакле, ово је, усуђујем се рећи, нижи ниво можда 993 00:45:43,824 --> 00:45:45,740 него неки од њих остало алгоритми, али да 994 00:45:45,740 --> 00:45:48,550 види ако не може замислити ови путем овог. 995 00:45:48,550 --> 00:45:51,450 >> Дакле, ово је неки фини софтвер који неко 996 00:45:51,450 --> 00:45:56,110 написао користећи живописне барове да је урадити следеће за нас. 997 00:45:56,110 --> 00:45:57,736 Сваки од ових шипки представља број. 998 00:45:57,736 --> 00:46:00,026 Виши бар, већа број, мањи бар, 999 00:46:00,026 --> 00:46:00,990 мањи број. 1000 00:46:00,990 --> 00:46:05,880 Дакле, идеално желимо леп пирамида где се у малим и добија велики, 1001 00:46:05,880 --> 00:46:08,330 и то би значило да ове шипке су поредани. 1002 00:46:08,330 --> 00:46:11,200 Тако да идем напред и изабрати, на пример, Бен алгоритам 1003 00:46:11,200 --> 00:46:13,990 фирст-- избор врста. 1004 00:46:13,990 --> 00:46:16,220 >> И приметити шта ради. 1005 00:46:16,220 --> 00:46:18,670 Начин на који су они изабрали да Смештен алгоритам 1006 00:46:18,670 --> 00:46:22,090 је да, као што сам био ходање по мојој листи, 1007 00:46:22,090 --> 00:46:24,710 овај програм хода кроз листу бројева, 1008 00:46:24,710 --> 00:46:28,160 наглашавајући ин пинк сваком број да се гледа. 1009 00:46:28,160 --> 00:46:32,360 А шта је о сада да се деси? 1010 00:46:32,360 --> 00:46:35,154 >> Најмањи број који Ја или Бен фоунд изненада 1011 00:46:35,154 --> 00:46:36,820 бити померен на почетак листе. 1012 00:46:36,820 --> 00:46:40,037 И запазите јесу иселити број који је био тамо, 1013 00:46:40,037 --> 00:46:41,120 и то је сасвим у реду. 1014 00:46:41,120 --> 00:46:42,600 Нисам у том нивоу детаља. 1015 00:46:42,600 --> 00:46:44,308 Али морамо да ставимо тај број негде, 1016 00:46:44,308 --> 00:46:47,775 тако да смо га преселили у отворено место које је створио. 1017 00:46:47,775 --> 00:46:49,900 Па ћу убрзати горе, јер иначе 1018 00:46:49,900 --> 00:46:51,871 постаје веома досадан брзо. 1019 00:46:51,871 --> 00:46:55,800 1020 00:46:55,800 --> 00:46:58,600 Анимација спеед-- тамо идемо. 1021 00:46:58,600 --> 00:47:01,850 Па сад исти принцип Пријавио сам се, али ви 1022 00:47:01,850 --> 00:47:06,540 може да почне да се осећа алгоритма, ако ће, или погледајте га мало јасније. 1023 00:47:06,540 --> 00:47:13,190 А овај алгоритам има ефекат избора следећи најмањи елемент, 1024 00:47:13,190 --> 00:47:16,422 па ћеш почети да видим да појача са леве стране. 1025 00:47:16,422 --> 00:47:19,130 И на свакој итерацији, као што сам Предложени, јесте мало мање посла. 1026 00:47:19,130 --> 00:47:21,921 То не мора да иде до краја назад на левом крају листе, 1027 00:47:21,921 --> 00:47:23,900 јер је већ зна оне су поредани. 1028 00:47:23,900 --> 00:47:28,129 Тако некако изгледа као да је убрзава, иако је сваки корак 1029 00:47:28,129 --> 00:47:29,420 узимајући исту количину времена. 1030 00:47:29,420 --> 00:47:31,600 Има само мање преостале кораке. 1031 00:47:31,600 --> 00:47:35,240 И сада тај проблем може да осети алгоритам чишћење крај ње, 1032 00:47:35,240 --> 00:47:37,040 и заиста сада смо решили. 1033 00:47:37,040 --> 00:47:41,620 >> Дакле, сортирање уметањем је све урађено. 1034 00:47:41,620 --> 00:47:43,600 Морам да поново насумично низ. 1035 00:47:43,600 --> 00:47:45,940 И приметио могу само кееп ит случајности, 1036 00:47:45,940 --> 00:47:50,630 и ми ћемо добити апроксимацију исти приступ, сортирање уметањем. 1037 00:47:50,630 --> 00:47:55,050 Пусти ме да успорим да овде. 1038 00:47:55,050 --> 00:47:56,915 Почнимо да преко. 1039 00:47:56,915 --> 00:47:57,414 Зауставити. 1040 00:47:57,414 --> 00:48:00,662 1041 00:48:00,662 --> 00:48:02,410 >> Да прескочимо четири. 1042 00:48:02,410 --> 00:48:03,200 Ево га. 1043 00:48:03,200 --> 00:48:04,190 Рандомизе су низ. 1044 00:48:04,190 --> 00:48:05,555 И овде иде-- сортирање уметањем. 1045 00:48:05,555 --> 00:48:10,260 1046 00:48:10,260 --> 00:48:12,800 Плаи. 1047 00:48:12,800 --> 00:48:17,280 Приметите да то раде једни с Елемент се сусретне одмах, 1048 00:48:17,280 --> 00:48:20,282 али ако спада у погрешно обавештење место 1049 00:48:20,282 --> 00:48:21,740 сав посао који треба да се деси. 1050 00:48:21,740 --> 00:48:24,700 Морамо да мјењају стално више и више елемената да би се направио простор 1051 00:48:24,700 --> 00:48:27,340 за оне желимо да успостави. 1052 00:48:27,340 --> 00:48:30,740 >> Тако смо фокусирање на леви крај само листе. 1053 00:48:30,740 --> 00:48:34,460 Приметимо да нисмо ни погледао ат-- смо ми нису истакли у розе ништа 1054 00:48:34,460 --> 00:48:35,610 десно. 1055 00:48:35,610 --> 00:48:38,180 Ми само имамо посла са проблеми као што идемо, 1056 00:48:38,180 --> 00:48:40,430 али ми ствара пуно раде за себе и даље. 1057 00:48:40,430 --> 00:48:44,410 Па ако се убрза сада да иде до краја, 1058 00:48:44,410 --> 00:48:46,210 има другачију осећај да је заиста. 1059 00:48:46,210 --> 00:48:50,150 То је само фокусира на левој крају, али ради мало више посла као неедед-- 1060 00:48:50,150 --> 00:48:53,230 врста Смоотхинг ствари преко, поправљање ствари, 1061 00:48:53,230 --> 00:48:58,350 али посла на крају са сваки елемент једног по једног 1062 00:48:58,350 --> 00:49:07,740 док не дођете до добро то--, ми сви знамо како то иде до краја, 1063 00:49:07,740 --> 00:49:09,700 тако да је мало ундервхелминг можда. 1064 00:49:09,700 --> 00:49:12,830 >> Али је листа у енд-- споилер-- ће се сортирају. 1065 00:49:12,830 --> 00:49:15,300 Дакле, хајде да погледамо још један једном. 1066 00:49:15,300 --> 00:49:16,840 Не можемо да прескочимо сада. 1067 00:49:16,840 --> 00:49:18,000 Скоро смо стигли. 1068 00:49:18,000 --> 00:49:19,980 Два да оде, један. 1069 00:49:19,980 --> 00:49:22,680 И воила. 1070 00:49:22,680 --> 00:49:23,450 Одлично. 1071 00:49:23,450 --> 00:49:27,220 >> Дакле, сада ћемо направити једну последњу, ре-случајности са буббле врсте. 1072 00:49:27,220 --> 00:49:31,690 И пажњу, нарочито ако га успорити доле, то се стално своопинг преко. 1073 00:49:31,690 --> 00:49:36,830 Али приметио то само чини паровима цомпарисонс-- врста локалних решења. 1074 00:49:36,830 --> 00:49:39,050 Али чим стигнемо у крај листе у розе, 1075 00:49:39,050 --> 00:49:40,690 шта ће морати да се понови? 1076 00:49:40,690 --> 00:49:44,539 1077 00:49:44,539 --> 00:49:46,830 Да, то ће морати да почети испочетка, јер само 1078 00:49:46,830 --> 00:49:49,870 фиксни паровима грешке. 1079 00:49:49,870 --> 00:49:53,120 И да можда још открива друге. 1080 00:49:53,120 --> 00:49:58,950 И тако, ако убрза, ви ћете видимо да, колико је само име говори, 1081 00:49:58,950 --> 00:50:01,870 мањи елементс-- односно, веће елементс-- почињу 1082 00:50:01,870 --> 00:50:03,740 да буббле до врха, ако хоћете. 1083 00:50:03,740 --> 00:50:07,380 А мање елементи почињу да балон доле са леве стране. 1084 00:50:07,380 --> 00:50:10,780 И заиста, то је некако визуелни ефекат као и. 1085 00:50:10,780 --> 00:50:17,150 И тако ће завршити завршну обраду на веома сличан начин, такође. 1086 00:50:17,150 --> 00:50:19,160 >> Не морамо да боравим на овом једном. 1087 00:50:19,160 --> 00:50:21,010 Сада ћу отворити ово, такође. 1088 00:50:21,010 --> 00:50:24,040 Постоји неколико других алгоритми за сортирање у свету, од којих је неколико 1089 00:50:24,040 --> 00:50:25,580 Овде се заробљени. 1090 00:50:25,580 --> 00:50:29,960 А посебно за ученике који нису нужно визуелне или математички, 1091 00:50:29,960 --> 00:50:31,930 као што смо раније, можемо Такође ово аудиалли 1092 00:50:31,930 --> 00:50:34,210 ако повезати звук са овим. 1093 00:50:34,210 --> 00:50:36,990 И само за забаву, овде је неколико различитих алгоритама, 1094 00:50:36,990 --> 00:50:40,950 а један од њих посебно си ће приметити се зове "стапање врста." 1095 00:50:40,950 --> 00:50:43,250 >> То је заправо суштински боље алгоритам, 1096 00:50:43,250 --> 00:50:45,860 тако да спајање врста, један од оне које ћете видети, 1097 00:50:45,860 --> 00:50:49,170 није ред од н на квадрат. 1098 00:50:49,170 --> 00:50:57,280 То је по наредби од н пута дневник н, што је заправо мањи и стога 1099 00:50:57,280 --> 00:50:58,940 брже него оне друге три. 1100 00:50:58,940 --> 00:51:00,670 А ту је и пар други силли оне које ћемо видети. 1101 00:51:00,670 --> 00:51:01,933 >> Дакле, идемо са неким звуком. 1102 00:51:01,933 --> 00:51:06,620 1103 00:51:06,620 --> 00:51:10,490 Ово је сортирање уметањем, па опет то је само ради са елементима 1104 00:51:10,490 --> 00:51:13,420 како долазе. 1105 00:51:13,420 --> 00:51:17,180 То је балон врста, тако да је с обзиром им парова у исто време. 1106 00:51:17,180 --> 00:51:22,030 1107 00:51:22,030 --> 00:51:24,490 И опет, највећи елементи се кључа до врха. 1108 00:51:24,490 --> 00:51:38,098 1109 00:51:38,098 --> 00:51:41,710 >> Следеће избор врста. 1110 00:51:41,710 --> 00:51:45,420 Ово је Бен алгоритам, где опет је избор итеративно 1111 00:51:45,420 --> 00:51:46,843 следећи најмањи елемент. 1112 00:51:46,843 --> 00:51:49,801 1113 00:51:49,801 --> 00:51:53,900 И опет, сада могу да чујем то је убрзање, али само у оној мери 1114 00:51:53,900 --> 00:51:58,230 јер ради мање и мање радити на свакој итерацији. 1115 00:51:58,230 --> 00:52:04,170 Ово је бржи један, сортирање спајањем, која се сортирање кластера бројева 1116 00:52:04,170 --> 00:52:05,971 заједно, а затим их комбинујући. 1117 00:52:05,971 --> 00:52:07,720 Тако изгледаш-- лево половина је већ поредани. 1118 00:52:07,720 --> 00:52:14,165 >> Сада је сортирање праву половину, и сада ће их комбиновати у једну. 1119 00:52:14,165 --> 00:52:19,160 То је нешто што се зове "ГНОМЕ врста." 1120 00:52:19,160 --> 00:52:23,460 И можете некако види да иде напред-назад, 1121 00:52:23,460 --> 00:52:27,950 фиксирање рад мало овде и тамо пре него што прелази у новом послу. 1122 00:52:27,950 --> 00:52:32,900 1123 00:52:32,900 --> 00:52:33,692 И то је то. 1124 00:52:33,692 --> 00:52:36,400 Постоји још једна врста, која је стварно само за академске сврхе, 1125 00:52:36,400 --> 00:52:40,980 под називом "глуп врста," који се Ваши подаци, да сортира насумично, 1126 00:52:40,980 --> 00:52:43,350 и онда проверава да ли је сортирана. 1127 00:52:43,350 --> 00:52:47,880 А ако није, то ре-сортирању насумично, проверава да ли је то решено, 1128 00:52:47,880 --> 00:52:49,440 а ако не понавља. 1129 00:52:49,440 --> 00:52:52,660 И у теорији, пробабилистицалли ово ће завршити, 1130 00:52:52,660 --> 00:52:54,140 али након дужег мало времена. 1131 00:52:54,140 --> 00:52:56,930 Није највише ефикасан алгоритама. 1132 00:52:56,930 --> 00:53:02,550 Тако да било питања о онима посебни алгоритми или било шта 1133 00:53:02,550 --> 00:53:04,720 релатед тамо? 1134 00:53:04,720 --> 00:53:09,430 >> Па, хајде да сада задиркују, осим што све ове линије су да сам цртеж 1135 00:53:09,430 --> 00:53:15,090 и шта ја претпостављам компјутер може да испод хаубе. 1136 00:53:15,090 --> 00:53:18,650 Ја бих рекао да све ове бројке Стално дравинг-- морају да се 1137 00:53:18,650 --> 00:53:21,330 чува негде у меморији. 1138 00:53:21,330 --> 00:53:24,130 Ми ћемо се отарасити овог типа сада, такође. 1139 00:53:24,130 --> 00:53:30,110 >> Дакле, комад меморију у цомпутер-- тако РАМ-ДИММ 1140 00:53:30,110 --> 00:53:35,480 оно што смо тражили јуче, два меморијски модуле-- изгледа овако. 1141 00:53:35,480 --> 00:53:39,370 И свака од ових малих црних чипова је неки број бајтова, типично. 1142 00:53:39,370 --> 00:53:44,380 А онда су златне игле су као да је жице које га повезују са рачунаром 1143 00:53:44,380 --> 00:53:47,521 и зелени силицијум одбор је само шта држи све заједно. 1144 00:53:47,521 --> 00:53:48,770 Дакле, шта то заправо значи? 1145 00:53:48,770 --> 00:53:53,180 Ако некако извући ову исту слику, претпоставимо ради једноставности 1146 00:53:53,180 --> 00:53:55,280 да ово СО-ДИММ, Дуал меморијски модул, 1147 00:53:55,280 --> 00:54:00,530 је један гигабајт РАМ меморије, један гигабајт меморија, која је колико бајтова укупно? 1148 00:54:00,530 --> 00:54:02,100 Један гигабајт је колико бајтова? 1149 00:54:02,100 --> 00:54:04,860 1150 00:54:04,860 --> 00:54:06,030 Више од тога. 1151 00:54:06,030 --> 00:54:09,960 1.124 је килограм, 1.000. 1152 00:54:09,960 --> 00:54:11,730 Мега је милион. 1153 00:54:11,730 --> 00:54:14,570 Гига је милијарду. 1154 00:54:14,570 --> 00:54:15,070 >> Лажем? 1155 00:54:15,070 --> 00:54:16,670 Можемо чак прочитати етикету? 1156 00:54:16,670 --> 00:54:19,920 Ово је заправо 128 гигабајта, тако да је више. 1157 00:54:19,920 --> 00:54:22,130 Али ћемо се претварати ово је само један гигабајт. 1158 00:54:22,130 --> 00:54:25,640 Тако да значи да је милијарду бајтова меморије на располагању за мене 1159 00:54:25,640 --> 00:54:29,770 или 8 милијарди битова, али идемо сада причају о бајтова, 1160 00:54:29,770 --> 00:54:30,750 напредовати. 1161 00:54:30,750 --> 00:54:36,330 >> Дакле, шта то значи ово је један бајт, ово је још један бајт, 1162 00:54:36,330 --> 00:54:38,680 ово је још један бајт, и ако ми стварно желимо 1163 00:54:38,680 --> 00:54:43,280 да будемо прецизни морали бисмо драв милијарду мало квадрата. 1164 00:54:43,280 --> 00:54:44,320 Али шта то значи? 1165 00:54:44,320 --> 00:54:46,420 Па, пусти ме само зоом у на овој слици. 1166 00:54:46,420 --> 00:54:50,900 Ако имам нешто што изгледа овако сада, то је четири бајта. 1167 00:54:50,900 --> 00:54:53,710 >> И тако сам могао ставити четири броја овде. 1168 00:54:53,710 --> 00:54:54,990 Један два три четири. 1169 00:54:54,990 --> 00:55:00,170 Или бих могао ставити четири слова или симболе. 1170 00:55:00,170 --> 00:55:02,620 "Хеј!" Могао бих да стигнем тамо, јер сваки од слова, 1171 00:55:02,620 --> 00:55:04,370 разговарали смо раније, могу бити представљени 1172 00:55:04,370 --> 00:55:06,650 са осам бита или АСЦИИ или бајт. 1173 00:55:06,650 --> 00:55:09,370 Другим речима, можете пут 8 милијарди ствари унутра 1174 00:55:09,370 --> 00:55:11,137 овог једног штапа меморије. 1175 00:55:11,137 --> 00:55:14,345 Дакле, шта значи да се ствари вратити враћа се назад у меморији овако? 1176 00:55:14,345 --> 00:55:17,330 То је оно што програмер позвати хитну "низ." 1177 00:55:17,330 --> 00:55:21,250 У компјутерском програму, не мислиш о хардверу у основи, по себи. 1178 00:55:21,250 --> 00:55:24,427 Ти само мислиш о себи као да приступ милијарду бајтова укупно а, 1179 00:55:24,427 --> 00:55:26,010 и можете било шта желите са њом. 1180 00:55:26,010 --> 00:55:27,880 Али, ради лакшег то је генерално корисно 1181 00:55:27,880 --> 00:55:31,202 да би меморијске право један поред другог овако. 1182 00:55:31,202 --> 00:55:33,660 Дакле, ако сам зумира ово-- јер ми никако не иде 1183 00:55:33,660 --> 00:55:39,310 да скрене милијарду мало скуарес-- претпоставимо да је ова плоча представља 1184 00:55:39,310 --> 00:55:40,610 да штап меморије сада. 1185 00:55:40,610 --> 00:55:43,800 И ја ћу извући онолико колико мој маркера завршава ми дали овде. 1186 00:55:43,800 --> 00:55:46,420 1187 00:55:46,420 --> 00:55:52,300 Тако да сада имамо штап меморије на плочи 1188 00:55:52,300 --> 00:55:56,400 да има један, два, три, четири, пет, шест, један, два, три, четири, пет, шест, 1189 00:55:56,400 --> 00:56:01,130 севен---так 42 бајтова меморија на укупно екрану. 1190 00:56:01,130 --> 00:56:01,630 Хвала вам. 1191 00:56:01,630 --> 00:56:02,838 Да, јесте моја аритметика у праву. 1192 00:56:02,838 --> 00:56:05,120 Дакле 42 бајтова меморије овде. 1193 00:56:05,120 --> 00:56:06,660 Дакле, шта то заправо значи? 1194 00:56:06,660 --> 00:56:09,830 Па, компјутерски програмер би заправо уопште 1195 00:56:09,830 --> 00:56:12,450 да ове меморије као Адресабилна. 1196 00:56:12,450 --> 00:56:16,630 Другим речима, сваки од њих локације у меморији, у хардвер, 1197 00:56:16,630 --> 00:56:18,030 има јединствену адресу. 1198 00:56:18,030 --> 00:56:22,020 >> То није као сложен као један БРАТТЛЕ Скуаре, Цамбридге, МА., 02138. 1199 00:56:22,020 --> 00:56:23,830 Уместо тога, то је само број. 1200 00:56:23,830 --> 00:56:27,930 Ово је бајт број нула, ово је једна, ово је два, ово је три, 1201 00:56:27,930 --> 00:56:30,327 а ово је 41. 1202 00:56:30,327 --> 00:56:30,910 Сачекај минут. 1203 00:56:30,910 --> 00:56:32,510 Мислио сам рекао 42 малопре. 1204 00:56:32,510 --> 00:56:35,050 1205 00:56:35,050 --> 00:56:37,772 Почео сам да бројим на нули, тако да је заправо у праву. 1206 00:56:37,772 --> 00:56:40,980 Сада не морамо да заиста и извући као мрежу, а ако га извући као мрежа 1207 00:56:40,980 --> 00:56:43,520 Мислим да ствари стварно да помало збуњује. 1208 00:56:43,520 --> 00:56:46,650 Шта програмер би, у свом сопственом уму, 1209 00:56:46,650 --> 00:56:50,310 генерално мислите о овоме меморија као што је као траке, 1210 00:56:50,310 --> 00:56:53,340 као комад заштитне траке да само иде даље и даље заувек 1211 00:56:53,340 --> 00:56:54,980 или док не понестане меморије. 1212 00:56:54,980 --> 00:56:59,200 Дакле, чешће начин да се скрене и само мислим о меморији 1213 00:56:59,200 --> 00:57:03,710 би да је ово бите нула, један, два, три, а онда тачка, тачка, тачка. 1214 00:57:03,710 --> 00:57:07,650 И имате укупно 42 таквих бајтова, чак иако физички је заправо можда 1215 00:57:07,650 --> 00:57:09,480 бити нешто више овако. 1216 00:57:09,480 --> 00:57:12,850 >> Дакле, ако сада мислим о вашој меморије јер то, као траке, 1217 00:57:12,850 --> 00:57:17,640 ово је оно што програмер поново ће позвати низ меморије. 1218 00:57:17,640 --> 00:57:20,660 А када пожелите да заправо складишти нешто у меморији рачунара, 1219 00:57:20,660 --> 00:57:23,290 Ви обично до продавница ствари бацк-то-бацк ​​то бацк-то-бацк. 1220 00:57:23,290 --> 00:57:25,010 Тако смо говорили о бројевима. 1221 00:57:25,010 --> 00:57:30,880 И када сам хтео да реше проблеме као четири, један, три, два, 1222 00:57:30,880 --> 00:57:33,820 иако сам био само цртање само бројеви четири, један, три, 1223 00:57:33,820 --> 00:57:39,490 два на табли, компјутер би стварно имају овакав приступ у меморији. 1224 00:57:39,490 --> 00:57:43,347 >> А шта ће бити следећи до два у меморији рачунара? 1225 00:57:43,347 --> 00:57:44,680 Па, нема одговор на то. 1226 00:57:44,680 --> 00:57:45,770 Ми не знамо. 1227 00:57:45,770 --> 00:57:48,200 Па док Рачунар не треба, 1228 00:57:48,200 --> 00:57:51,440 то не мора да занима шта је следеће бројевима то не стало. 1229 00:57:51,440 --> 00:57:55,130 И када сам раније да рачунар рекао Можете погледати само на једној адреси у исто време, 1230 00:57:55,130 --> 00:57:56,170 ово је мало тога. 1231 00:57:56,170 --> 00:57:59,490 >> Не за разлику од записа плејер и глава читање 1232 00:57:59,490 --> 00:58:03,030 само бити у стању да погледате одређени жлеб у физичком старе школе запис 1233 00:58:03,030 --> 00:58:06,500 истовремено, слично могу рачунар захваљујући 1234 00:58:06,500 --> 00:58:09,810 своје ЦПУ и њеног Интел скуп инструкција, 1235 00:58:09,810 --> 00:58:12,480 међу чијим инструкција се чита из меморије 1236 00:58:12,480 --> 00:58:15,590 или сачувати на мемори-- рачунар може само 1237 00:58:15,590 --> 00:58:19,210 на једној локацији у а једном-- понекад комбинација њих, 1238 00:58:19,210 --> 00:58:21,770 али заиста само једна локација у исто време. 1239 00:58:21,770 --> 00:58:24,770 Дакле, када смо радили ови различити алгоритми, 1240 00:58:24,770 --> 00:58:28,110 Ја не само што су донијети вацуум-- четири, један, три, два. 1241 00:58:28,110 --> 00:58:30,849 Ти бројеви заправо припада негде физички у меморији. 1242 00:58:30,849 --> 00:58:32,890 Дакле, постоје мали мали транзистори или некакав 1243 00:58:32,890 --> 00:58:35,840 електронике испод хауба чување ове вредности. 1244 00:58:35,840 --> 00:58:40,460 >> И укупно, колико битова умешан сада, само да буде јасно? 1245 00:58:40,460 --> 00:58:45,580 Дакле, ово је четири бајта, или сада је укупно 32 бита. 1246 00:58:45,580 --> 00:58:49,280 Тако да заправо постоје 32 нуле и Они састављање ове четири ствари. 1247 00:58:49,280 --> 00:58:52,070 Има још овде, али Опет ми не бринемо о томе. 1248 00:58:52,070 --> 00:58:55,120 >> Дакле, хајде да питам неког другог Питање користи меморију, 1249 00:58:55,120 --> 00:58:57,519 јер то на крају дана је у супротности. 1250 00:58:57,519 --> 00:59:00,310 Без обзира шта бисмо могли да урадимо са рачунар, на крају дана 1251 00:59:00,310 --> 00:59:02,560 хардвер је и даље Исто испод хаубе. 1252 00:59:02,560 --> 00:59:04,670 Како би чувам реч овде? 1253 00:59:04,670 --> 00:59:09,710 Па, реч у компјутеру као "Хеј!" би се чувају само овако. 1254 00:59:09,710 --> 00:59:12,300 А ако желиш дужи реч, можете једноставно 1255 00:59:12,300 --> 00:59:19,120 преписати да и рећи нешто као "здраво" и продавница које овде. 1256 00:59:19,120 --> 00:59:23,930 >> И тако овде, такође, овај цонтигуоуснесс је заправо предност, 1257 00:59:23,930 --> 00:59:26,530 јер компјутер могу само читати са десна на лево. 1258 00:59:26,530 --> 00:59:28,680 Али овде је питање. 1259 00:59:28,680 --> 00:59:33,480 У контексту ове речи, Х-Е-Л-Л-О, знак узвика, 1260 00:59:33,480 --> 00:59:38,740 како би рачунар зна где је реч почиње и где се завршава реч? 1261 00:59:38,740 --> 00:59:41,690 1262 00:59:41,690 --> 00:59:43,800 У контексту бројева, како се рачунар 1263 00:59:43,800 --> 00:59:48,396 знам колико дуго редослед Бројеви или где почиње? 1264 00:59:48,396 --> 00:59:50,270 Па, испоставило се оут-- и нећемо ићи превише 1265 00:59:50,270 --> 00:59:54,970 у овом нивоу детаил-- рачунари крећу ствари унаоколо у меморији 1266 00:59:54,970 --> 00:59:57,800 буквално путем ове адресе. 1267 00:59:57,800 --> 01:00:02,080 Дакле, у рачунару, ако сте писање кода за чување ствари 1268 01:00:02,080 --> 01:00:05,800 као речи, шта си стварно ради куца 1269 01:00:05,800 --> 01:00:11,320 изрази који памте где у меморија рачунара ове речи су. 1270 01:00:11,320 --> 01:00:14,370 Дакле, пусти ме да је веома, врло једноставан пример. 1271 01:00:14,370 --> 01:00:18,260 >> Ја идем напред и отвори једноставан текст програма, 1272 01:00:18,260 --> 01:00:20,330 и ја ћу створити фајл под хелло.ц. 1273 01:00:20,330 --> 01:00:22,849 Већина ових информација ми Нећу ићи у веома детаљно, 1274 01:00:22,849 --> 01:00:25,140 али ја ћу написати Програм на том истом језику, 1275 01:00:25,140 --> 01:00:31,140 Ц. Ово је далеко више застрашујуће, Ја бих рекао, него Сцратцх, 1276 01:00:31,140 --> 01:00:32,490 али то је врло слично у духу. 1277 01:00:32,490 --> 01:00:34,364 У ствари, то коврџава брацес-- можете некако 1278 01:00:34,364 --> 01:00:37,820 мислим на оно што сам урадио, јер то. 1279 01:00:37,820 --> 01:00:39,240 >> Хајде да урадимо ово, заправо. 1280 01:00:39,240 --> 01:00:45,100 Када зелена застава кликне, урадите следеће. 1281 01:00:45,100 --> 01:00:50,210 Желим да одштампате "здраво." 1282 01:00:50,210 --> 01:00:51,500 Дакле, ово је сада Псеудокод. 1283 01:00:51,500 --> 01:00:53,000 Некако сам замагљују линије. 1284 01:00:53,000 --> 01:00:56,750 У Ц, овај језик ја говорим о, ова линија штампа здраво 1285 01:00:56,750 --> 01:01:01,940 заправо постаје "принтф" са неки заграде и полу-дебелог црева. 1286 01:01:01,940 --> 01:01:03,480 >> Али то је потпуно исти идеја. 1287 01:01:03,480 --> 01:01:06,730 И то врло разумљив "Када зелена застава кликне" постаје 1288 01:01:06,730 --> 01:01:10,182 Много више волшебни "маин празнина." 1289 01:01:10,182 --> 01:01:12,890 А ово стварно нема мапирање, па ја ћу игнорисати то. 1290 01:01:12,890 --> 01:01:17,210 Али великих заграда су као да је закривљене пуззле пиецес лике тхис. 1291 01:01:17,210 --> 01:01:18,700 >> Тако да можете некако претпостављам. 1292 01:01:18,700 --> 01:01:22,357 Чак и ако никада нисте програмирали раније, Шта овај програм вероватно не? 1293 01:01:22,357 --> 01:01:25,560 1294 01:01:25,560 --> 01:01:28,000 Вероватно штампа здраво са знаком узвика. 1295 01:01:28,000 --> 01:01:29,150 >> Дакле, хајде да покушамо да. 1296 01:01:29,150 --> 01:01:30,800 Идем да га спасе. 1297 01:01:30,800 --> 01:01:34,000 И то је, опет, веома стара школа окружење. 1298 01:01:34,000 --> 01:01:35,420 Не можете кликнути, ја не могу ја. 1299 01:01:35,420 --> 01:01:36,910 Морам да куцате команде. 1300 01:01:36,910 --> 01:01:41,320 Дакле, желим да водим програм, тако Можда ово, као хелло.ц. 1301 01:01:41,320 --> 01:01:42,292 То је документ сам побегао. 1302 01:01:42,292 --> 01:01:43,500 Али чекај, недостаје ми корак. 1303 01:01:43,500 --> 01:01:46,470 Оно што смо рекли је неопходна корак за језик као што је Ц? 1304 01:01:46,470 --> 01:01:49,470 Управо сам написао извор код, али шта ми је потребно? 1305 01:01:49,470 --> 01:01:50,670 Да, треба ми преводилац. 1306 01:01:50,670 --> 01:01:57,670 Дакле, на мој Мац овде, имам програм који се зове ГЦЦ ГНУ Ц компајлер, 1307 01:01:57,670 --> 01:02:03,990 који омогућава да урадим ово-- турн мој извор код у, ми ћемо га назвати, 1308 01:02:03,990 --> 01:02:04,930 машина код. 1309 01:02:04,930 --> 01:02:10,180 >> И видим да, Поново, као што следи, ови 1310 01:02:10,180 --> 01:02:14,090 су нуле и јединице И само направљена од мог изворног кода, 1311 01:02:14,090 --> 01:02:15,730 све нуле и јединице. 1312 01:02:15,730 --> 01:02:17,770 И ако желите да покренете мој програм-- се дешава 1313 01:02:17,770 --> 01:02:23,010 да се зове а.оут за историјски реасонс-- "здраво". 1314 01:02:23,010 --> 01:02:24,070 Могу га поново покренути. 1315 01:02:24,070 --> 01:02:25,690 Здраво здраво здраво. 1316 01:02:25,690 --> 01:02:27,430 И чини се да ради. 1317 01:02:27,430 --> 01:02:31,000 >> Али то значи негде у мом меморија рачунара су речи 1318 01:02:31,000 --> 01:02:35,279 Х-Е-Л-Л-О, знак узвика. 1319 01:02:35,279 --> 01:02:38,070 И испоставило се да, баш као страну, шта је компјутер би типично 1320 01:02:38,070 --> 01:02:40,550 учини да зна где ствари почињу и енд-- је 1321 01:02:40,550 --> 01:02:42,460 ће ставити посебан симбол овде. 1322 01:02:42,460 --> 01:02:46,064 А конвенција је ставио број нула на крају речи 1323 01:02:46,064 --> 01:02:48,230 тако да знате где је заправо завршава, тако да 1324 01:02:48,230 --> 01:02:52,750 не води штампање више и више ликови од тебе заиста намеравају. 1325 01:02:52,750 --> 01:02:55,400 >> Али понети овде, чак и мада је то прилично волшебни, 1326 01:02:55,400 --> 01:02:58,140 је да је на крају релативно једноставна. 1327 01:02:58,140 --> 01:03:04,550 Ви сте добили неку врсту траке, празна простор на којима можете писати писма. 1328 01:03:04,550 --> 01:03:07,150 Једноставно морају да имају Посебан симбол, као произвољно 1329 01:03:07,150 --> 01:03:10,316 број нула, ставити на крају твоје речи тако да рачунар зна, 1330 01:03:10,316 --> 01:03:13,410 Ох, ја треба да престану штампу после Видим узвичник. 1331 01:03:13,410 --> 01:03:16,090 Зато што је следећа ствар тамо је АСЦИИ вредност нула, 1332 01:03:16,090 --> 01:03:19,125 или нулти карактер као неко би га назвати. 1333 01:03:19,125 --> 01:03:21,500 Али нека врста проблема овде, и идемо вратити 1334 01:03:21,500 --> 01:03:23,320 на бројеве за тренутак. 1335 01:03:23,320 --> 01:03:28,720 Претпоставимо да радим, у ствари, има низ бројева, 1336 01:03:28,720 --> 01:03:30,730 и претпоставимо да је Програм пишем је 1337 01:03:30,730 --> 01:03:34,680 као разред књига за учитеља и наставницима. 1338 01:03:34,680 --> 01:03:38,720 И овај програм њега или њу дозвољава да унесете резултате својих ученика 1339 01:03:38,720 --> 01:03:39,960 на тестовима. 1340 01:03:39,960 --> 01:03:43,750 И претпоставимо да је ученик добија 100 на свом првом квизу, можда 1341 01:03:43,750 --> 01:03:49,920 као 80 на следећи, а затим и 75, затим 90 на четвртом квизу. 1342 01:03:49,920 --> 01:03:54,150 >> Дакле, у овом тренутку у причи, низ је величине четири. 1343 01:03:54,150 --> 01:03:58,470 Нема апсолутно више меморије у рачунар, али низ, да тако кажем, 1344 01:03:58,470 --> 01:04:00,350 је величине четири. 1345 01:04:00,350 --> 01:04:06,060 Претпоставимо сада да наставник жели доделити пети квиз на класу. 1346 01:04:06,060 --> 01:04:08,510 Па, једна од ствари које је или она ће морати да уради 1347 01:04:08,510 --> 01:04:10,650 сада је похранити додатну вредност овде. 1348 01:04:10,650 --> 01:04:15,490 Али ако низу наставник има створена у овом програму је величине за, 1349 01:04:15,490 --> 01:04:22,440 један од проблема са низа је то Ви не можете само задржати додајући да меморију. 1350 01:04:22,440 --> 01:04:26,470 Јер, шта ако други део је Програм има реч "хеј" тамо? 1351 01:04:26,470 --> 01:04:29,650 >> Другим речима, моје сећање може бити користи за било шта у програму. 1352 01:04:29,650 --> 01:04:33,250 И ако унапред сам откуцао у, хеј, Желим да улаз четири квиз резултата, 1353 01:04:33,250 --> 01:04:34,784 могу да наставе овде и овде. 1354 01:04:34,784 --> 01:04:37,700 И ако изненада се предомислите касније и рећи да желим пети квиз 1355 01:04:37,700 --> 01:04:40,872 Резултат, не можеш само стави га где год желите, 1356 01:04:40,872 --> 01:04:42,580 јер шта ако је ово меморија се користи 1357 01:04:42,580 --> 01:04:45,990 нешто елсе-- неки други програм или неки други обележје програма 1358 01:04:45,990 --> 01:04:46,910 да бежиш? 1359 01:04:46,910 --> 01:04:50,650 Тако да ћете морати да унапред како желите да сачувате податке, 1360 01:04:50,650 --> 01:04:54,480 јер сада си обојен се у дигитални угао. 1361 01:04:54,480 --> 01:04:57,280 >> Дакле, наставник може уместо тога кажу приликом писања програма 1362 01:04:57,280 --> 01:04:59,360 за чување његово оцене, знаш шта? 1363 01:04:59,360 --> 01:05:04,180 Ја ћу тражити, приликом писања мој програм, 1364 01:05:04,180 --> 01:05:12,070 да желим нула, један, два, три, четири, пет, шест, осам разреда укупно. 1365 01:05:12,070 --> 01:05:15,320 Дакле, један, два, три, четири, пет, шест, седам, осам. 1366 01:05:15,320 --> 01:05:18,612 Наставник може само преко расподјелу меморија приликом писања своје програм 1367 01:05:18,612 --> 01:05:19,570 и рећи, знаш шта? 1368 01:05:19,570 --> 01:05:22,236 Никад нећу да додели више од осам квизова у једном семестру. 1369 01:05:22,236 --> 01:05:23,130 То је лудо. 1370 01:05:23,130 --> 01:05:24,470 Никада нећу издвојити то. 1371 01:05:24,470 --> 01:05:28,270 Тако да на тај начин он или она има флексибилност у продавнице студентских резултата, 1372 01:05:28,270 --> 01:05:33,010 као 75, 90, и можда један екстра где студент добио додатне поене, 105. 1373 01:05:33,010 --> 01:05:36,130 >> Али ако наставник никада користи ове три простора, 1374 01:05:36,130 --> 01:05:38,860 ту је интуитиван за понети овде. 1375 01:05:38,860 --> 01:05:41,410 Он или она је само губљење простора. 1376 01:05:41,410 --> 01:05:44,790 Другим речима, ту је ово заједнички компромис у програмирању 1377 01:05:44,790 --> 01:05:48,241 где ни да издвоји тачно колико меморије год желите, 1378 01:05:48,241 --> 01:05:51,490 Тхе Упсиде оф а то је да сте супер еффициент-- нисте били расипници 1379 01:05:51,490 --> 01:05:54,640 у все-- али мана од којих шта ако се предомислите када је 1380 01:05:54,640 --> 01:05:58,780 користећи програм који желите да сачувате више података него сте првобитно планирано. 1381 01:05:58,780 --> 01:06:03,030 >> Можда је решење, онда, пишу програме на такав начин 1382 01:06:03,030 --> 01:06:05,605 да они користе више меморије него што заиста треба. 1383 01:06:05,605 --> 01:06:07,730 На овај начин не идеш покренути у том проблему, 1384 01:06:07,730 --> 01:06:09,730 али да си расипање. 1385 01:06:09,730 --> 01:06:12,960 И више меморије ваш програм користи, као што смо разговарали јуче, мање 1386 01:06:12,960 --> 01:06:15,410 меморија која је на располагању за друге програме, 1387 01:06:15,410 --> 01:06:18,790 прије ваш рачунар може да успори доле због виртуелне меморије. 1388 01:06:18,790 --> 01:06:22,670 И тако идеално решење може бити шта? 1389 01:06:22,670 --> 01:06:24,610 >> Под-алокацију изгледа лоше. 1390 01:06:24,610 --> 01:06:27,030 Овер-додели изгледа лоше. 1391 01:06:27,030 --> 01:06:31,120 Дакле, шта би могло бити боље решење? 1392 01:06:31,120 --> 01:06:32,390 Прерасподјелу. 1393 01:06:32,390 --> 01:06:33,590 Бити динамичнији. 1394 01:06:33,590 --> 01:06:37,520 Не на силу себи за избор априори, на почетку, оно што желите. 1395 01:06:37,520 --> 01:06:41,370 И сигурно не превише издвојити, да не би били расипнички. 1396 01:06:41,370 --> 01:06:45,770 >> И тако да се постигне тај циљ, ми Потребно је да баци ове податке структуру, 1397 01:06:45,770 --> 01:06:48,100 да тако кажем, далеко. 1398 01:06:48,100 --> 01:06:51,080 И шта програмер ће обично користе 1399 01:06:51,080 --> 01:06:55,940 нешто што се зове није Низ али листа повезана. 1400 01:06:55,940 --> 01:07:00,860 Другим речима, он или она ће почнемо да размишљамо о свом сећању 1401 01:07:00,860 --> 01:07:05,280 као врста облика који су може извући на следећи начин. 1402 01:07:05,280 --> 01:07:08,520 Ако желим да сачувате један број у програм-- тако да је септембар, 1403 01:07:08,520 --> 01:07:12,600 Дао сам моје студенте квиз; ја желим за складиштење први квиз ученика, 1404 01:07:12,600 --> 01:07:16,220 и они су добили 100 на То-- И ја ћу замолити рачунар, 1405 01:07:16,220 --> 01:07:19,540 путем програма сам писани, за једну меморију. 1406 01:07:19,540 --> 01:07:22,570 И ја ћу чувања резултата број 100 у њему, и то је то. 1407 01:07:22,570 --> 01:07:24,820 >> Затим неколико недеља касније кад добијем други квиз, 1408 01:07:24,820 --> 01:07:27,890 и да је време да куцате У том 90%, идем 1409 01:07:27,890 --> 01:07:32,129 то аск рачунар, хеј, рачунар, могу ли добити још једну комад меморије? 1410 01:07:32,129 --> 01:07:34,170 То ће ми дати ово празан комад меморије. 1411 01:07:34,170 --> 01:07:39,370 Ја ћу ставити у броју 90, али у свом програму некако или отхер-- 1412 01:07:39,370 --> 01:07:42,100 и нећемо бринути о синтакса на овоме-- ми треба 1413 01:07:42,100 --> 01:07:44,430 некако везати ове ствари заједно. 1414 01:07:44,430 --> 01:07:47,430 И ја ћу их ланце заједно са оно што изгледа као стрела овде. 1415 01:07:47,430 --> 01:07:50,050 >> Трећи квиз да се појави, Ја ћу рећи, хеј, рачунар, 1416 01:07:50,050 --> 01:07:51,680 дај ми још једну меморију. 1417 01:07:51,680 --> 01:07:54,660 И ја ћу спустити шта год да је, као 75, 1418 01:07:54,660 --> 01:07:56,920 и морам да ланац овом заједно сада некако. 1419 01:07:56,920 --> 01:08:00,290 Четврто квиз дође, и можда То је крајем семестра. 1420 01:08:00,290 --> 01:08:03,140 И тада ми је програм можда користи меморију 1421 01:08:03,140 --> 01:08:05,540 свуда, свуда физички. 1422 01:08:05,540 --> 01:08:08,170 И тако за сваки случај, ја сам намеру да ово напред 1423 01:08:08,170 --> 01:08:11,260 куиз-- сам заборавити шта је било; ја да је можда од 80 или нешто-- 1424 01:08:11,260 --> 01:08:12,500 начин овде. 1425 01:08:12,500 --> 01:08:15,920 >> Али то је у реду, јер сликовито Ја ћу повући ову линију. 1426 01:08:15,920 --> 01:08:19,063 Другим речима, у стварности, у хардверу рачунара, 1427 01:08:19,063 --> 01:08:20,979 први резултат могао завршити овде јер је 1428 01:08:20,979 --> 01:08:22,529 Право на почетку семестра. 1429 01:08:22,529 --> 01:08:25,810 Следећег би се могло завршити овде јер мало је времена прошло 1430 01:08:25,810 --> 01:08:27,210 и програм наставља да тече. 1431 01:08:27,210 --> 01:08:30,060 Следећи резултат, што је од 75, можда овде. 1432 01:08:30,060 --> 01:08:33,420 А последњи резултат може бити од 80, која је овде. 1433 01:08:33,420 --> 01:08:38,729 >> Дакле, у стварности, физички, ово може бити шта меморије рачунара изгледа. 1434 01:08:38,729 --> 01:08:41,569 Али ово није корисна ментална парадигма за компјутерски програмер. 1435 01:08:41,569 --> 01:08:44,649 Зашто би требало да занима где је врага ти подаци се не заврши? 1436 01:08:44,649 --> 01:08:46,200 Желите само за складиштење података. 1437 01:08:46,200 --> 01:08:49,390 >> Ово је нешто попут нашег разговора раније цртања коцку. 1438 01:08:49,390 --> 01:08:52,200 Шта тебе брига шта је угао коцке 1439 01:08:52,200 --> 01:08:53,740 и како да се окренемо се извући? 1440 01:08:53,740 --> 01:08:54,950 Желите само коцку. 1441 01:08:54,950 --> 01:08:57,359 Слично томе овде, ти Само желим да граде књизи. 1442 01:08:57,359 --> 01:08:59,559 Ти само желиш да мислим о ово као листу бројева. 1443 01:08:59,559 --> 01:09:01,350 Кога брига како је то имплементира у хардверу? 1444 01:09:01,350 --> 01:09:05,180 >> Дакле, апстракција сада је ово слика овде. 1445 01:09:05,180 --> 01:09:07,580 Ово је повезано листу, као програмер би то назвао, 1446 01:09:07,580 --> 01:09:10,640 утолико што имате листа, очигледно бројева. 1447 01:09:10,640 --> 01:09:14,990 Али то је повезано сликовито путем ових стрела, 1448 01:09:14,990 --> 01:09:18,510 и све ове стрелице су-- испод је хауба, ако сте радознали, 1449 01:09:18,510 --> 01:09:23,210 сећам се да наш физички хардвер има адресе нула, један, два, три, четири. 1450 01:09:23,210 --> 01:09:28,465 Све ове стрелице су је као мапа или правци, где ако 90 је-- сада 1451 01:09:28,465 --> 01:09:29,090 Морам да бројим. 1452 01:09:29,090 --> 01:09:31,750 >> Нула, један, два, три, четири, пет, шест, седам. 1453 01:09:31,750 --> 01:09:35,640 Изгледа да је 90 је у меморија адреса број седам. 1454 01:09:35,640 --> 01:09:38,460 Све ове стрелице су је као мала комад папира 1455 01:09:38,460 --> 01:09:42,439 који даје упутства до Програм који каже да прате ову карту 1456 01:09:42,439 --> 01:09:43,880 да се на локацију седам. 1457 01:09:43,880 --> 01:09:46,680 И тамо ћете наћи студента други квиз резултат. 1458 01:09:46,680 --> 01:09:52,100 У међувремену, 75-- ако наставим ово, ово је седам, осам, девет, 10, 11, 12, 1459 01:09:52,100 --> 01:09:54,240 13, 14, 15. 1460 01:09:54,240 --> 01:09:59,080 >> Овај други стрелица само представља мапа на меморијској локацији 15. 1461 01:09:59,080 --> 01:10:02,550 Али опет, програмер уопште не није стало до овог нивоа детаља. 1462 01:10:02,550 --> 01:10:05,530 И у већини сваком програму језика данас, програмер 1463 01:10:05,530 --> 01:10:10,490 неће ни знати где у меморији ови бројеви заправо. 1464 01:10:10,490 --> 01:10:14,830 Све он или она мора да брине само о да су некако повезани 1465 01:10:14,830 --> 01:10:18,390 у структури података као што је овај. 1466 01:10:18,390 --> 01:10:21,580 >> Али испоставило се да није да се превише технички. 1467 01:10:21,580 --> 01:10:27,430 Али само зато што можемо можда приуштити да имају ову дискусију овде, 1468 01:10:27,430 --> 01:10:33,630 Претпостављам да смо поново ово питање овде од низа. 1469 01:10:33,630 --> 01:10:35,780 Хајде да видимо да ли жалим иде овде. 1470 01:10:35,780 --> 01:10:42,950 Ово је 100, 90, 75, и 80. 1471 01:10:42,950 --> 01:10:44,980 >> Дозволите ми да кратко да ту тврдњу. 1472 01:10:44,980 --> 01:10:48,980 Ово је низ, а опет, истакнута карактеристика низа 1473 01:10:48,980 --> 01:10:52,400 је да све податке се вратио у бацк то бацк у мемори-- буквално 1474 01:10:52,400 --> 01:10:56,830 један бајт или можда четири бајтова, неки фиксни број бајтова далеко. 1475 01:10:56,830 --> 01:11:00,710 У повезане листе, које можемо извући овако, испод хаубе који 1476 01:11:00,710 --> 01:11:02,000 зна где су те ствари? 1477 01:11:02,000 --> 01:11:03,630 То не мора чак ни да тече овако. 1478 01:11:03,630 --> 01:11:06,050 Неки од података може бити назад лево горе. 1479 01:11:06,050 --> 01:11:07,530 Не знају. 1480 01:11:07,530 --> 01:11:15,430 >> И тако са низом, имате карактеристика позната као случајним приступом. 1481 01:11:15,430 --> 01:11:20,570 А шта директног приступа средствима је да рачунар може да скочи одмах 1482 01:11:20,570 --> 01:11:22,730 на било којој локацији у низу. 1483 01:11:22,730 --> 01:11:23,580 Зашто? 1484 01:11:23,580 --> 01:11:26,000 Јер компјутер зна да је прва локација 1485 01:11:26,000 --> 01:11:29,540 нула, један, два и три. 1486 01:11:29,540 --> 01:11:33,890 >> Па ако желим да идем из овај елемент на следећи елемент, 1487 01:11:33,890 --> 01:11:36,099 Ви буквално, у рачунара ум, само додајте једну. 1488 01:11:36,099 --> 01:11:39,140 Ако желите да одете на трећи елемент, само додајте једног-- следећег елемента, само 1489 01:11:39,140 --> 01:11:40,290 додате. 1490 01:11:40,290 --> 01:11:42,980 Међутим, у овој верзији приче, претпостављам 1491 01:11:42,980 --> 01:11:46,080 рачунар тренутно тражи у или се баве бројем 100. 1492 01:11:46,080 --> 01:11:49,770 Како добити на следећи разред у разреду књизи? 1493 01:11:49,770 --> 01:11:52,560 >> Морате узети седам кораци, који је произвољан. 1494 01:11:52,560 --> 01:11:58,120 Да се ​​на следећи, морате да потребно још осам корака да се до 15. 1495 01:11:58,120 --> 01:12:02,250 Другим речима, то није константа јаз између бројева, 1496 01:12:02,250 --> 01:12:04,857 и тако то само узима рачунар више времена је поента. 1497 01:12:04,857 --> 01:12:06,940 Рачунар мора да тражи кроз сећања како би 1498 01:12:06,940 --> 01:12:08,990 да пронађете оно што тражите. 1499 01:12:08,990 --> 01:12:14,260 >> Према томе, док низ има тенденцију да буде брзо подаци струцтуре-- јер тебе 1500 01:12:14,260 --> 01:12:17,610 могу буквално само до простом математиком и одвести тамо где желите додавањем једног, 1501 01:12:17,610 --> 01:12:21,300 за инстанце-- повезану листу, ви жртвовати ту особину. 1502 01:12:21,300 --> 01:12:24,020 Не можете само да од првог на други на трећем у четврти. 1503 01:12:24,020 --> 01:12:25,240 Морате да пратите мапу. 1504 01:12:25,240 --> 01:12:28,160 Морате узети више корака доћи до тих вредности, које 1505 01:12:28,160 --> 01:12:30,230 изгледа да се додавањем трошкова. 1506 01:12:30,230 --> 01:12:35,910 Дакле, ми плаћамо цену, али оно што је било функција која Дан је тражи овде? 1507 01:12:35,910 --> 01:12:38,110 Шта повезану листу очигледно нам омогућити да радимо, 1508 01:12:38,110 --> 01:12:40,240 што је порекло ова прича? 1509 01:12:40,240 --> 01:12:43,250 1510 01:12:43,250 --> 01:12:43,830 >> Баш тако. 1511 01:12:43,830 --> 01:12:46,220 Динамичка величина у томе. 1512 01:12:46,220 --> 01:12:48,040 Можемо додати овој листи. 1513 01:12:48,040 --> 01:12:51,430 Чак можемо смањити листу, тако да смо само користи више меморије 1514 01:12:51,430 --> 01:12:55,560 као што заправо желимо и тако никада нисмо превише алокацију. 1515 01:12:55,560 --> 01:12:58,470 >> Сада само да буде заиста НИТ-избирљива, постоји скривени трошкови. 1516 01:12:58,470 --> 01:13:01,980 Тако да не би требало да пусти ме убеди сте да је ово убедљив компромис. 1517 01:13:01,980 --> 01:13:04,190 Постоји још један скривени трошкови овде. 1518 01:13:04,190 --> 01:13:06,550 Корист, да буде јасно, је да се динамичност. 1519 01:13:06,550 --> 01:13:10,359 Ако желим још један елемент, могу само извући и ставите број тамо. 1520 01:13:10,359 --> 01:13:12,150 И онда могу да га повежем са сликом овде, 1521 01:13:12,150 --> 01:13:14,970 а овде, опет, ако имам насликао себе у ћошак, 1522 01:13:14,970 --> 01:13:19,410 ако нешто друго већ користи меморија овде, ја сам среће. 1523 01:13:19,410 --> 01:13:21,700 Ја сам се сликао у ћошак. 1524 01:13:21,700 --> 01:13:24,390 >> Али, оно што је скривено коштају на овој слици? 1525 01:13:24,390 --> 01:13:27,690 То није само количина времена да је потребно 1526 01:13:27,690 --> 01:13:29,870 да одем одавде до овде, који је седам корака, онда 1527 01:13:29,870 --> 01:13:32,820 осам корака, што је више од једног. 1528 01:13:32,820 --> 01:13:34,830 Шта је још један скривени трошкови? 1529 01:13:34,830 --> 01:13:35,440 Не само време. 1530 01:13:35,440 --> 01:13:44,790 1531 01:13:44,790 --> 01:13:49,940 Додатне информације неопходно за постизање ову слику. 1532 01:13:49,940 --> 01:13:53,210 >> Да, ту карту, ти мали комади папир, као што сам држати их описују као. 1533 01:13:53,210 --> 01:13:55,650 Ово арровс-- они нису слободни. 1534 01:13:55,650 --> 01:13:57,660 Цомпутер-- знате шта је компјутер има. 1535 01:13:57,660 --> 01:13:58,790 Она има нула и јединица. 1536 01:13:58,790 --> 01:14:03,170 Ако желите да представљају стрелу или мап или број, треба ти меморија. 1537 01:14:03,170 --> 01:14:05,950 Дакле, с друге цену коју плаћају за повезане листе, 1538 01:14:05,950 --> 01:14:09,070 заједнички информатика ресурс, је такође простор. 1539 01:14:09,070 --> 01:14:11,710 >> И заиста тако, тако често, међу компромиса 1540 01:14:11,710 --> 01:14:15,580 у пројектовању софтверског инжењерства системи је време и спаце-- 1541 01:14:15,580 --> 01:14:18,596 су два ваша састојака, два од ваших најскупљим састојака. 1542 01:14:18,596 --> 01:14:21,220 Ово је ме кошта више времена јер морам да пратим ову карту, 1543 01:14:21,220 --> 01:14:25,730 али то је такође ме кошта више простора јер морам да задржим ову карту око. 1544 01:14:25,730 --> 01:14:28,730 Дакле, нада, као што смо некако разговарали преко јуче и данас, 1545 01:14:28,730 --> 01:14:31,720 је да су користи ће надмашују трошкове. 1546 01:14:31,720 --> 01:14:33,870 >> Али нема јасно решење овде. 1547 01:14:33,870 --> 01:14:35,870 Можда је беттер-- ла брзо и прљаво, 1548 01:14:35,870 --> 01:14:38,660 као Карим предложено еарлиер-- бацити меморију на проблем. 1549 01:14:38,660 --> 01:14:42,520 Само купити више меморије, да мање тешко о решавању проблема, 1550 01:14:42,520 --> 01:14:44,595 и решити га на лакши начин. 1551 01:14:44,595 --> 01:14:46,720 И заиста раније, када Разговарали смо о компромисима, 1552 01:14:46,720 --> 01:14:49,190 није простор у рачунар и време. 1553 01:14:49,190 --> 01:14:51,810 То је било време програмер, који је још један ресурс. 1554 01:14:51,810 --> 01:14:54,829 >> Дакле, поново, то је ово балансирање покушавају да одлуче која од тих ствари 1555 01:14:54,829 --> 01:14:55,870 да ли сте спремни да потрошите? 1556 01:14:55,870 --> 01:14:57,380 Који је најјефтинији? 1557 01:14:57,380 --> 01:15:01,040 Који се добијају бољи резултати? 1558 01:15:01,040 --> 01:15:01,540 Да? 1559 01:15:01,540 --> 01:15:11,310 1560 01:15:11,310 --> 01:15:12,580 >> Заиста. 1561 01:15:12,580 --> 01:15:15,970 У том случају, ако сте представља бројеве у мапс-- 1562 01:15:15,970 --> 01:15:18,820 то се зове на многим језицима "показивачи" или "адресе" - 1563 01:15:18,820 --> 01:15:20,390 то је двоструко више простора. 1564 01:15:20,390 --> 01:15:24,390 То не мора да буде тако лоше као двоструки да сада смо само чување бројева. 1565 01:15:24,390 --> 01:15:27,410 Претпоставимо да смо складиштење записа о пацијентима ин а хоспитал-- 1566 01:15:27,410 --> 01:15:30,870 па Пирсон је имена, телефонске бројеве, бројеви социјалног осигурања, лекар 1567 01:15:30,870 --> 01:15:31,540 историја. 1568 01:15:31,540 --> 01:15:34,160 Ова кутија могла да буде много, много већи, у ком случају 1569 01:15:34,160 --> 01:15:38,000 мали мали показивач, адреса следећи елемент-- то није велика ствар. 1570 01:15:38,000 --> 01:15:40,620 То је тако крилни коштати није битно. 1571 01:15:40,620 --> 01:15:43,210 Али у овом случају, да, то је дуплирање. 1572 01:15:43,210 --> 01:15:45,290 Добро питање. 1573 01:15:45,290 --> 01:15:47,900 >> Хајде да причамо о времену а мало конкретније. 1574 01:15:47,900 --> 01:15:50,380 Шта је покренут време трагања ову листу? 1575 01:15:50,380 --> 01:15:53,640 Претпоставимо да сам хтео да претражите кроз све оцена студената, 1576 01:15:53,640 --> 01:15:55,980 и ту је н оцене У овом података структури. 1577 01:15:55,980 --> 01:15:58,830 Овде, такође, можемо да позајмимо вокабулар раније. 1578 01:15:58,830 --> 01:16:00,890 Ово је линеарна структура података. 1579 01:16:00,890 --> 01:16:04,570 >> Велико О од н је оно што је потребно да се до краја ове податке структуре, 1580 01:16:04,570 --> 01:16:08,410 вхереас-- и нисмо видели ово пре-- низ вам даје 1581 01:16:08,410 --> 01:16:13,555 оно што се зове константа време, што значи један корак или два корака или 10 степс-- 1582 01:16:13,555 --> 01:16:14,180 није битно. 1583 01:16:14,180 --> 01:16:15,440 То је фиксни број. 1584 01:16:15,440 --> 01:16:17,440 То нема никакве везе са величина низа. 1585 01:16:17,440 --> 01:16:20,130 А разлог за то, опет, са директним приступом. 1586 01:16:20,130 --> 01:16:23,180 Рачунар може само одмах скок на другу локацију, 1587 01:16:23,180 --> 01:16:27,770 јер су сви исти удаљеност од свега осталог. 1588 01:16:27,770 --> 01:16:29,112 Нема размишљање укључена. 1589 01:16:29,112 --> 01:16:31,900 1590 01:16:31,900 --> 01:16:32,400 У реду. 1591 01:16:32,400 --> 01:16:39,230 Дакле, ако могу, дозволите ми да паинт два финална слика. 1592 01:16:39,230 --> 01:16:42,830 Веома честа познат као хеш табели. 1593 01:16:42,830 --> 01:16:51,120 Тако да мотивише ову дискусију, пусти ме да размислим о томе како се то ради. 1594 01:16:51,120 --> 01:16:52,610 >> Дакле, шта је ово? 1595 01:16:52,610 --> 01:16:55,160 Претпоставимо да је проблем желимо да сада решити 1596 01:16:55,160 --> 01:16:58,360 се спроводи у дицтионари-- тако да гомила енглеских речи 1597 01:16:58,360 --> 01:16:59,330 или шта год. 1598 01:16:59,330 --> 01:17:02,724 А циљ је бити у стању да одговори питања форме је ово реч? 1599 01:17:02,724 --> 01:17:04,640 Дакле, желите да примените правописа, само 1600 01:17:04,640 --> 01:17:07,220 као физички речник да можете погледати ствари у. 1601 01:17:07,220 --> 01:17:10,490 Претпоставимо да су ово са низом. 1602 01:17:10,490 --> 01:17:12,590 Ја могу ово да урадим. 1603 01:17:12,590 --> 01:17:20,756 >> Претпоставимо речи су јабуке и банане и диња. 1604 01:17:20,756 --> 01:17:23,330 1605 01:17:23,330 --> 01:17:26,465 И не могу да се сетим воћа да почну са д, па смо ми 1606 01:17:26,465 --> 01:17:27,590 ће имати три плодове. 1607 01:17:27,590 --> 01:17:31,510 Дакле, ово је низ, и ми смо складиштење свих ових речи 1608 01:17:31,510 --> 01:17:34,200 У овој као низ. 1609 01:17:34,200 --> 01:17:39,350 Питање је, дакле, како другачије могао чувате ту информацију? 1610 01:17:39,350 --> 01:17:43,160 >> Па, некако сам варао овде, јер сваки од ових слова у речи 1611 01:17:43,160 --> 01:17:44,490 заиста појединац бајт. 1612 01:17:44,490 --> 01:17:46,740 Дакле, ако сам заиста желео да буде НИТ-закерало, ја би стварно 1613 01:17:46,740 --> 01:17:49,600 се дели ово у много мањи комади меморије, 1614 01:17:49,600 --> 01:17:51,289 и можемо да урадимо управо то. 1615 01:17:51,289 --> 01:17:53,580 Али ћемо покренути у исти проблем као и раније. 1616 01:17:53,580 --> 01:17:56,674 Шта ако, као Мерриам Вебстер или Оксфорду ради сваки Иеар-- они додају ријечи 1617 01:17:56,674 --> 01:17:59,340 до дицтионари-- ми не нужно желе да се сликам 1618 01:17:59,340 --> 01:18:00,780 у углу са низа? 1619 01:18:00,780 --> 01:18:05,710 >> Умјесто тога, можда паметнији приступ је да се стави јабуку у свом чвору или кутији, 1620 01:18:05,710 --> 01:18:11,190 као што би рекли, банане, и онда овде имамо диња. 1621 01:18:11,190 --> 01:18:14,990 1622 01:18:14,990 --> 01:18:16,790 И ми смо низ заједно ове ствари. 1623 01:18:16,790 --> 01:18:19,980 Дакле, ово је низ, и ово је листа повезана. 1624 01:18:19,980 --> 01:18:23,300 Ако не могу да видим, то само каже "низ", а овај каже "листу." 1625 01:18:23,300 --> 01:18:25,780 >> Дакле, имамо исти Тачне питања као пре, 1626 01:18:25,780 --> 01:18:28,600 где сада имамо динамика у нашој повезане листе. 1627 01:18:28,600 --> 01:18:31,090 Али имамо прилично споро речник. 1628 01:18:31,090 --> 01:18:32,870 Претпоставимо да желим да погледам неку реч. 1629 01:18:32,870 --> 01:18:35,430 Можда ми је потребно Биг О од н кораци, јер је реч можда 1630 01:18:35,430 --> 01:18:37,840 бити скроз на крају листа, као диње. 1631 01:18:37,840 --> 01:18:40,600 И испоставило се да у програмирању, врста 1632 01:18:40,600 --> 01:18:42,700 Светог грала података структуре, је нешто 1633 01:18:42,700 --> 01:18:46,620 да вам даје константа Време као низ 1634 01:18:46,620 --> 01:18:50,870 али то и даље даје динамику. 1635 01:18:50,870 --> 01:18:52,940 >> Тако да можемо имати најбоље од оба света? 1636 01:18:52,940 --> 01:18:55,570 И заиста, постоји нешто назива хасх табела 1637 01:18:55,570 --> 01:18:59,320 који вам омогућава да тачно урадити да, иако отприлике. 1638 01:18:59,320 --> 01:19:03,140 Хеш табела је одгајивач структура података које смо 1639 01:19:03,140 --> 01:19:06,340 могу да замислим како је Комбинација арраи-- 1640 01:19:06,340 --> 01:19:12,390 и ја ћу га извући овако-- и повезаних листи 1641 01:19:12,390 --> 01:19:17,310 да ћу извући овако овде. 1642 01:19:17,310 --> 01:19:19,760 >> И начин на који ово Радови је следећи. 1643 01:19:19,760 --> 01:19:23,310 1644 01:19:23,310 --> 01:19:29,540 Ако је ово сада-- хасх табле-- ми је трећа структура података, 1645 01:19:29,540 --> 01:19:32,590 и ја желите да сачувате речи у овој, не знам 1646 01:19:32,590 --> 01:19:35,440 Желим да само чување свих речи бацк то бацк то бацк то бацк. 1647 01:19:35,440 --> 01:19:37,430 Желим да искористе неки податак 1648 01:19:37,430 --> 01:19:40,330 о речима које ће омогућавају ми да га где је брже. 1649 01:19:40,330 --> 01:19:43,666 >> Дакле, имајући у виду речи јабуку и банана и диња, 1650 01:19:43,666 --> 01:19:45,040 Намерно сам изабрао те речи. 1651 01:19:45,040 --> 01:19:45,340 Зашто? 1652 01:19:45,340 --> 01:19:47,631 Шта је нека врста основи различито о три? 1653 01:19:47,631 --> 01:19:49,950 1654 01:19:49,950 --> 01:19:51,484 Шта је очигледно? 1655 01:19:51,484 --> 01:19:52,900 Почну са различитим словима. 1656 01:19:52,900 --> 01:19:53,900 >> Дакле, знате шта? 1657 01:19:53,900 --> 01:19:57,120 Уместо да стави све моје речи иста кофа, да тако кажем, 1658 01:19:57,120 --> 01:20:00,390 као у једној великој листи, зашто не Ја барем покушати оптимизацију 1659 01:20:00,390 --> 01:20:04,180 и да моје листе 1/26 докле год. 1660 01:20:04,180 --> 01:20:07,440 Убедљив оптимизација можда зашто не 1661 01:20:07,440 --> 01:20:10,650 Ја када уметања речи у овом података структуру, 1662 01:20:10,650 --> 01:20:14,300 у меморију рачунара, зашто не би дала све 'А' речи овде, 1663 01:20:14,300 --> 01:20:17,270 сви 'Б' речи овде, и све 'Ц' речи овде? 1664 01:20:17,270 --> 01:20:24,610 Дакле, ово завршава стављање јабуку овде, банане овде, диња овде, 1665 01:20:24,610 --> 01:20:25,730 и тако даље. 1666 01:20:25,730 --> 01:20:31,700 >> И ако имам додатних Реч као-- шта је друго? 1667 01:20:31,700 --> 01:20:36,640 Јабука, банана, крушка. 1668 01:20:36,640 --> 01:20:39,370 Свако мисли на воће који почиње са, Б или Ц? 1669 01:20:39,370 --> 01:20:40,570 Блуеберри-- савршен. 1670 01:20:40,570 --> 01:20:43,990 То ће завршити овде. 1671 01:20:43,990 --> 01:20:47,530 Па изгледа да имамо незнатно боље решење, 1672 01:20:47,530 --> 01:20:50,820 јер сада ако желим да тражи јабуке, ја 1673 01:20:50,820 --> 01:20:53,200 фирст-- не знам само диве у мом структуре података. 1674 01:20:53,200 --> 01:20:54,850 Ја не роним у меморију мог рачунара. 1675 01:20:54,850 --> 01:20:56,530 Ја први поглед на првом слову. 1676 01:20:56,530 --> 01:20:58,610 >> И то је оно што рачунара научник би рекао. 1677 01:20:58,610 --> 01:21:00,760 Ви хасх у својој структури података. 1678 01:21:00,760 --> 01:21:04,100 Узмеш унос, који у овај случај је реч попут јабука. 1679 01:21:04,100 --> 01:21:07,150 Га анализирају, гледајући прво слово у овом случају, 1680 01:21:07,150 --> 01:21:08,340 чиме је хасхинг. 1681 01:21:08,340 --> 01:21:10,950 Хеаирање је општи термин којим узмете нешто као улаз 1682 01:21:10,950 --> 01:21:12,116 и произведе неки излаз. 1683 01:21:12,116 --> 01:21:15,090 И излаз у томе Случај је локација 1684 01:21:15,090 --> 01:21:18,150 желите да претражите, први локација, друга локација, трећи. 1685 01:21:18,150 --> 01:21:22,160 Дакле, улаз је јабука, излаз је први. 1686 01:21:22,160 --> 01:21:25,054 Улаз је Банана, тхе излаз би требао бити други. 1687 01:21:25,054 --> 01:21:27,220 Улаз је диња, излаз би требао бити трећи. 1688 01:21:27,220 --> 01:21:30,320 Улаз је боровница је излаз би требао поново бити други. 1689 01:21:30,320 --> 01:21:34,010 И то је оно што помаже да се пречица до вашег сећања 1690 01:21:34,010 --> 01:21:39,050 како би дошли до речи или подаци ефикасније. 1691 01:21:39,050 --> 01:21:43,330 >> Сада то смањује наше време потенцијално чак и једно од укупно 26, 1692 01:21:43,330 --> 01:21:45,850 јер ако претпоставимо да ти имају што више "а" речи као "з" 1693 01:21:45,850 --> 01:21:48,080 речи као "К" речи, које није баш реалистиц-- 1694 01:21:48,080 --> 01:21:50,830 ћеш имати скев преко поједини слова у алпхабет-- 1695 01:21:50,830 --> 01:21:53,204 али то би био постепен приступ који допушта 1696 01:21:53,204 --> 01:21:55,930 да дођете до речи много брже. 1697 01:21:55,930 --> 01:21:59,660 А у стварности, софистицирани програм, Наочаре света, 1698 01:21:59,660 --> 01:22:02,180 Фацебоокс од ворлд-- они ће користити хасх табелу 1699 01:22:02,180 --> 01:22:03,740 за многе различите намене. 1700 01:22:03,740 --> 01:22:06,590 Али они не би били толико наивни само да погледамо прво слово 1701 01:22:06,590 --> 01:22:09,700 јабуке или банане или крушка или диња, 1702 01:22:09,700 --> 01:22:13,420 јер као што видите ово Листе ипак могао дуго. 1703 01:22:13,420 --> 01:22:17,130 >> И то можда још врста од линеар-- тако некако споро, 1704 01:22:17,130 --> 01:22:19,980 као и са великим О од н да смо разговарали раније. 1705 01:22:19,980 --> 01:22:25,290 Дакле, шта је стварно добар хеш сто це урадиш-- да ће имати много већи низ. 1706 01:22:25,290 --> 01:22:28,574 И то ће користити много софистициран функција хеширање, 1707 01:22:28,574 --> 01:22:30,240 тако да то није само погледате "А". 1708 01:22:30,240 --> 01:22:35,480 Можда то изгледа на "А-п-П-Л-Е" и некако претвара тих пет слова 1709 01:22:35,480 --> 01:22:38,400 на место где јабука треба чувати. 1710 01:22:38,400 --> 01:22:42,660 Ми смо само наивно користе слово 'А' сама, јер је лепо и једноставно. 1711 01:22:42,660 --> 01:22:44,600 >> Али хеш табела, у крај, можете мислити 1712 01:22:44,600 --> 01:22:47,270 о као комбинација низ, од којих свака 1713 01:22:47,270 --> 01:22:51,700 има повезану листу који идеално треба да буде што је могуће краће. 1714 01:22:51,700 --> 01:22:54,364 И то није очигледно решење. 1715 01:22:54,364 --> 01:22:57,280 У ствари, највећи део фино подешавање да иде на испод хаубе када је 1716 01:22:57,280 --> 01:22:59,654 спровођења ове врсте софистициране структуре података 1717 01:22:59,654 --> 01:23:01,640 је оно што је право дужина низа? 1718 01:23:01,640 --> 01:23:03,250 Шта је прави хасх функција? 1719 01:23:03,250 --> 01:23:04,830 Како чувате ствари у меморији? 1720 01:23:04,830 --> 01:23:07,249 >> Али схватате колико брзо ова врста расправе 1721 01:23:07,249 --> 01:23:10,540 ескалирала, ни тако далеко да је врста од над главом у овом тренутку, који 1722 01:23:10,540 --> 01:23:11,360 је у реду. 1723 01:23:11,360 --> 01:23:18,820 Али смо почели, опозив, истински нешто ниског нивоа и електронски. 1724 01:23:18,820 --> 01:23:20,819 Па ово опет је ово тема апстракције, 1725 01:23:20,819 --> 01:23:23,610 где када почну да се за одобрено, у реду, ја сам то-- добио ту је 1726 01:23:23,610 --> 01:23:26,680 физичке меморије, у реду, схватио сам, сваки физичка локација има адресу, 1727 01:23:26,680 --> 01:23:29,910 У реду, схватио сам, могу представљати те адресе као арровс-- 1728 01:23:29,910 --> 01:23:34,650 можете врло брзо почети да се софистицираније разговори који 1729 01:23:34,650 --> 01:23:38,360 на крају изгледа да нас дозвољавајући за решавање проблема као што су претраживање 1730 01:23:38,360 --> 01:23:41,620 и сортирање ефикасније. 1731 01:23:41,620 --> 01:23:44,190 И будите сигурни, најбоље урадио-- јер мислим да је ово 1732 01:23:44,190 --> 01:23:48,700 је најдубљи смо отишли ​​у неки ових ЦС теме пропер-- смо 1733 01:23:48,700 --> 01:23:51,880 урађено на дан и по на ово указати шта бисте могли обично до преко 1734 01:23:51,880 --> 01:23:55,520 ток осам недеља у једном семестру. 1735 01:23:55,520 --> 01:23:59,670 >> Има ли питања о овим? 1736 01:23:59,670 --> 01:24:01,100 Не? 1737 01:24:01,100 --> 01:24:01,940 У реду. 1738 01:24:01,940 --> 01:24:05,610 Па, зашто не бисмо застати, старт ручак неколико минута раније, 1739 01:24:05,610 --> 01:24:07,052 наставити у само око сат времена? 1740 01:24:07,052 --> 01:24:08,760 А ја ћу задржавају за мало са питањима. 1741 01:24:08,760 --> 01:24:11,343 Онда ћу морати да иде узети пар позива ако је то у реду. 1742 01:24:11,343 --> 01:24:15,000 Ја ћу окренути на неку музику у међувремену, али ручак би требало да буде иза угла. 1743 01:24:15,000 --> 01:24:17,862