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