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