1 00:00:00,000 --> 00:00:09,572 2 00:00:09,572 --> 00:00:12,030 РОБ БОВДЕН: Здраво, ја сам Роб Боуден, и хајде да разговарамо о куиз0. 3 00:00:12,030 --> 00:00:13,280 4 00:00:13,280 --> 00:00:14,545 >> Дакле, прво питање. 5 00:00:14,545 --> 00:00:17,750 Ово је питање у којој ти треба да кодира број 6 00:00:17,750 --> 00:00:21,270 127 у бинарних сијалица. 7 00:00:21,270 --> 00:00:23,550 Ако желиш, можеш урадите редовну конверзију 8 00:00:23,550 --> 00:00:25,950 из би-- или, из децималног у бинарни. 9 00:00:25,950 --> 00:00:28,300 Али то је вероватно иде потребно доста времена. 10 00:00:28,300 --> 00:00:31,750 Мислим, могао схватити да је, Ок, 1 је унутра, 2 је ту, 11 00:00:31,750 --> 00:00:33,650 4 је тамо, 8 је унутра. 12 00:00:33,650 --> 00:00:39,280 Лакши начин, 127 је 128 минус један. 13 00:00:39,280 --> 00:00:42,013 Да скроз лево Сијалица је 128-битни. 14 00:00:42,013 --> 00:00:43,490 15 00:00:43,490 --> 00:00:47,860 Дакле, 127 је у ствари само све осталих сијалица, 16 00:00:47,860 --> 00:00:51,420 пошто је то скроз лево сијалица минус 1. 17 00:00:51,420 --> 00:00:52,800 То је за то питање. 18 00:00:52,800 --> 00:00:54,060 >> Прво питање. 19 00:00:54,060 --> 00:00:56,710 Дакле, са 3 бита можете представља 8 различитих вредности. 20 00:00:56,710 --> 00:01:01,000 Зашто, онда, је 7 највећа не-негативан децимални цео можете представљати? 21 00:01:01,000 --> 00:01:04,050 Па, ако можемо само да представљају различите вредности 8, 22 00:01:04,050 --> 00:01:07,430 онда шта ћемо да будемо представља ис 0 до 7. 23 00:01:07,430 --> 00:01:08,745 0 заузима једну од вредности. 24 00:01:08,745 --> 00:01:09,980 25 00:01:09,980 --> 00:01:11,190 >> Питање два. 26 00:01:11,190 --> 00:01:14,610 Са Н бита, колико јасан вредности можете да представљају? 27 00:01:14,610 --> 00:01:19,080 Дакле, са н бита, имате 2 могуће вредности за сваки бит. 28 00:01:19,080 --> 00:01:22,300 Дакле, имамо 2 могућих вредности за први бит, 2 могуће вриједности 29 00:01:22,300 --> 00:01:24,450 за другу, 2 могуће да трећину. 30 00:01:24,450 --> 00:01:28,730 И то је 2 пута 2 пута 2, и крају је одговор 2 на н. 31 00:01:28,730 --> 00:01:30,010 32 00:01:30,010 --> 00:01:31,100 >> Питање три. 33 00:01:31,100 --> 00:01:33,450 Шта је у бинарном 0к50? 34 00:01:33,450 --> 00:01:39,490 Дакле, запамтите да хексадецимална има веома једноставан конверзије у бинарни. 35 00:01:39,490 --> 00:01:43,180 Дакле, овде, само треба да погледамо 5 и 0 независно. 36 00:01:43,180 --> 00:01:45,110 Дакле, шта је 5 у бинарном? 37 00:01:45,110 --> 00:01:48,400 0101, то је мало 1 и 4 бита. 38 00:01:48,400 --> 00:01:49,900 Шта је 0 у бинарном? 39 00:01:49,900 --> 00:01:50,520 Не Трицки. 40 00:01:50,520 --> 00:01:52,180 0000. 41 00:01:52,180 --> 00:01:54,970 Дакле, само их заједно, и То је цео број у бинарном. 42 00:01:54,970 --> 00:01:57,640 01010000. 43 00:01:57,640 --> 00:02:00,439 А ако желиш можеш скини ту леве нула. 44 00:02:00,439 --> 00:02:01,105 То је небитно. 45 00:02:01,105 --> 00:02:02,920 46 00:02:02,920 --> 00:02:05,733 >> Па онда алтернативно, оно што је у 0к50 децималног? 47 00:02:05,733 --> 00:02:08,649 Ако желиш, ти ако си могао-- удобније са бинарном, 48 00:02:08,649 --> 00:02:11,340 можете узети тај бинарни одговор и претворити то у децимале. 49 00:02:11,340 --> 00:02:13,870 Или можемо само да се сетим то хексадецимална. 50 00:02:13,870 --> 00:02:21,140 Тако да је 0 је у 0-ог места, и 5 је у 16 ​​на првом месту. 51 00:02:21,140 --> 00:02:25,990 Дакле, овде имамо 5 пута од 16 до прво, плус 0 пута 16 на нулу, 52 00:02:25,990 --> 00:02:27,520 је 80. 53 00:02:27,520 --> 00:02:29,710 А ако сте погледали Наслов на питање, 54 00:02:29,710 --> 00:02:32,920 је био ЦС 80, што је врста наговештавају одговор на овај проблем. 55 00:02:32,920 --> 00:02:34,460 56 00:02:34,460 --> 00:02:35,420 >> Питање пет. 57 00:02:35,420 --> 00:02:40,320 Ми имамо тај Сцратцх скрипту, која је понављајући 4 пута Пеанут Буттер Јелли. 58 00:02:40,320 --> 00:02:42,800 Дакле, како то радимо сада код које у Ц? 59 00:02:42,800 --> 00:02:47,730 Па, ми имамо овде-- улогу у Болд је једини део који мора да спроведе. 60 00:02:47,730 --> 00:02:51,950 Дакле, имамо 4 петљу која је петљи 4 а, иф-инг Пеанут Буттер Јелли, 61 00:02:51,950 --> 00:02:53,910 са новом линијом као проблем тражи. 62 00:02:53,910 --> 00:02:55,250 63 00:02:55,250 --> 00:02:57,490 >> Питање шест, још један проблем Сцратцх. 64 00:02:57,490 --> 00:03:00,210 Видимо да смо у заувек петљи. 65 00:03:00,210 --> 00:03:05,000 Говоримо о променљива и А онда сам се увецава за 1. 66 00:03:05,000 --> 00:03:09,580 Сада желимо да урадимо да у Ц. Тхере аре више начина смо могли да уради. 67 00:03:09,580 --> 00:03:12,840 Овде ћемо се десило шифру заувек петље као вхиле (труе). 68 00:03:12,840 --> 00:03:16,600 Тако да прогласи променљива и, само као што смо имали у променљива и нуле. 69 00:03:16,600 --> 00:03:21,950 Прогласи променљива и, и заувек док је (истина), кажемо променљиву и. 70 00:03:21,950 --> 00:03:25,260 Дакле, иф% ја-- или сте могли сте користили% д. 71 00:03:25,260 --> 00:03:27,985 Ми кажемо да променљиву, и онда га увећати, и ++. 72 00:03:27,985 --> 00:03:29,560 73 00:03:29,560 --> 00:03:30,830 >> Питање седам. 74 00:03:30,830 --> 00:03:35,560 Сада желимо да урадимо нешто веома слично Марио дот ц од проблема је поставили. 75 00:03:35,560 --> 00:03:39,110 Ми желимо да одштампате ове ознаке хеша, желимо да одштампате пет 76 00:03:39,110 --> 00:03:40,700 по три квадрата тих хешева. 77 00:03:40,700 --> 00:03:41,770 78 00:03:41,770 --> 00:03:43,162 Па како ћемо то урадити? 79 00:03:43,162 --> 00:03:45,370 Па, ми вам цео гомила кода, а ти си само 80 00:03:45,370 --> 00:03:47,560 морају да попуне у функцији за штампање мреже. 81 00:03:47,560 --> 00:03:49,540 >> Дакле, шта ПринтГрид личи? 82 00:03:49,540 --> 00:03:51,480 Па ти си прошлост ширина и висина. 83 00:03:51,480 --> 00:03:53,520 Дакле, имамо спољашњег 4 петља, то је петље 84 00:03:53,520 --> 00:03:57,650 над свим редова овога Грид које желимо да одштампате. 85 00:03:57,650 --> 00:04:01,250 Онда имамо међу-угњеждену 4 петље, То је штампање преко сваке колоне. 86 00:04:01,250 --> 00:04:06,210 Дакле, за сваки ред, штампамо за Свака колона, један хасх. 87 00:04:06,210 --> 00:04:10,045 Онда на крају реда штампамо Сингле нова линија да бисте прешли на следећи ред. 88 00:04:10,045 --> 00:04:11,420 И то је за целу мрежу. 89 00:04:11,420 --> 00:04:12,810 90 00:04:12,810 --> 00:04:13,675 >> Питање осам. 91 00:04:13,675 --> 00:04:17,170 Функција као што је рекао да ПринтГрид имају споредне ефекте, али не и повратак 92 00:04:17,170 --> 00:04:17,670 вредност. 93 00:04:17,670 --> 00:04:19,209 Објасните разлику. 94 00:04:19,209 --> 00:04:23,080 Дакле, ово се ослања на вас запамтити какав нуспојава је. 95 00:04:23,080 --> 00:04:25,180 Па, повратак валуе-- знамо ПринтГрид не 96 00:04:25,180 --> 00:04:28,180 имају повратну вредност, пошто овде пише неважећим. 97 00:04:28,180 --> 00:04:31,150 Тако нешто да враћа празан стварно не врати ништа. 98 00:04:31,150 --> 00:04:32,200 99 00:04:32,200 --> 00:04:33,620 Дакле, шта је нуспојава? 100 00:04:33,620 --> 00:04:36,620 Па, споредни ефекат је све што врста опстаје 101 00:04:36,620 --> 00:04:39,500 након престанка функције крајевима то није био само вратила, 102 00:04:39,500 --> 00:04:41,340 а то није било само из улаза. 103 00:04:41,340 --> 00:04:44,970 >> Тако, на пример, могли бисмо променити глобалну променљиву. 104 00:04:44,970 --> 00:04:46,590 То би било нуспојава. 105 00:04:46,590 --> 00:04:49,000 У овом конкретном случају, веома важно сиде еффецт 106 00:04:49,000 --> 00:04:51,070 штампа на екран. 107 00:04:51,070 --> 00:04:53,110 Тако да је нуспојава то ПринтГрид има. 108 00:04:53,110 --> 00:04:54,980 Ми принт ове ствари на екрану. 109 00:04:54,980 --> 00:04:56,370 И можете мислити о да као споредни ефекат, 110 00:04:56,370 --> 00:04:58,690 јер то је нешто што постоји и након ова функција заврши. 111 00:04:58,690 --> 00:05:01,481 То је нешто што је изван оквира ове функције које су на крају 112 00:05:01,481 --> 00:05:03,380 се мијења, Садржај екрана. 113 00:05:03,380 --> 00:05:05,200 114 00:05:05,200 --> 00:05:05,839 >> Питање девет. 115 00:05:05,839 --> 00:05:07,880 Размотрити програм доле, којој лине нумберс 116 00:05:07,880 --> 00:05:09,740 су додате ради дискусије. 117 00:05:09,740 --> 00:05:13,480 Дакле, у овом програму смо само позивање ГетСтринг, складиштења 118 00:05:13,480 --> 00:05:16,220 у овој варијабли с, а затим штампање ту променљиву с. 119 00:05:16,220 --> 00:05:16,720 У реду. 120 00:05:16,720 --> 00:05:19,090 Дакле, објасните зашто линија једна је присутан. 121 00:05:19,090 --> 00:05:20,920 #инцлуде ЦС50 дот Х. 122 00:05:20,920 --> 00:05:23,820 Зашто морамо да #инцлуде ЦС50 дот х? 123 00:05:23,820 --> 00:05:26,180 Па Зовемо ГетСтринг функцију, 124 00:05:26,180 --> 00:05:28,840 анд ГетСтринг дефинисано у ЦС50 библиотеци. 125 00:05:28,840 --> 00:05:31,600 Дакле, ако нисмо имали #инцлуде ЦС50 дот Х, 126 00:05:31,600 --> 00:05:35,760 добили би имплицитна декларација на ГетСтринг Функција грешке 127 00:05:35,760 --> 00:05:36,840 од компилатор. 128 00:05:36,840 --> 00:05:40,110 Тако да је потребно да се укључи либрари-- морамо укључити тај фајл, 129 00:05:40,110 --> 00:05:42,870 иначе преводилац неће признају да постоји ГетСтринг. 130 00:05:42,870 --> 00:05:44,380 131 00:05:44,380 --> 00:05:46,140 >> Објасните зашто линија два присутна. 132 00:05:46,140 --> 00:05:47,890 Дакле, стандардна ио тачка х. 133 00:05:47,890 --> 00:05:50,430 То је исто као и претходни проблем, 134 00:05:50,430 --> 00:05:53,310 осим уместо да се бавимо ГетСтринг, говоримо о принтф. 135 00:05:53,310 --> 00:05:56,654 Дакле, ако нисмо рекли да је потребно укључити стандардни ио дот х, 136 00:05:56,654 --> 00:05:58,820 онда не би могли користити принтф функцију, 137 00:05:58,820 --> 00:06:00,653 јер компајлер Не бих знао о томе. 138 00:06:00,653 --> 00:06:01,750 139 00:06:01,750 --> 00:06:05,260 >> Зашто-- шта је значај празнине у реду четири? 140 00:06:05,260 --> 00:06:08,010 Дакле, овде имамо маин (). 141 00:06:08,010 --> 00:06:10,600 То је само кажем да смо не добијају никакву командну линију 142 00:06:10,600 --> 00:06:12,280 аргументи за главни. 143 00:06:12,280 --> 00:06:17,390 Запамтите да кажемо инт Главни инт аргц низ аргв заградама. 144 00:06:17,390 --> 00:06:20,400 Овде ћемо само рећи да ми кажемо празнина игноришу аргументе командне линије. 145 00:06:20,400 --> 00:06:21,840 146 00:06:21,840 --> 00:06:25,225 >> Објасните, у односу на меморију, тачно шта ГетСтринг у складу шест враћа. 147 00:06:25,225 --> 00:06:27,040 148 00:06:27,040 --> 00:06:31,640 ГетСтринг се враћа блок Меморија, низ знакова. 149 00:06:31,640 --> 00:06:34,870 Стварно враћа показивач на први карактер. 150 00:06:34,870 --> 00:06:37,170 Запамтите да је низ цхар звезда. 151 00:06:37,170 --> 00:06:41,360 Дакле, ова је показивач на прву лик у било ком стринг 152 00:06:41,360 --> 00:06:43,510 да корисник ушао на тастатури. 153 00:06:43,510 --> 00:06:47,070 И то се дешава да се меморија маллоцед, тако да је меморија је у гомили. 154 00:06:47,070 --> 00:06:49,080 155 00:06:49,080 --> 00:06:50,450 >> Питање 13. 156 00:06:50,450 --> 00:06:51,960 Размотрити програм испод. 157 00:06:51,960 --> 00:06:55,579 Дакле, све ово програм ради је иф-инг 1 подељено са 10. 158 00:06:55,579 --> 00:06:57,370 Дакле, када саставио и погубљен, овај програм 159 00:06:57,370 --> 00:07:01,170 излаза 0.0, иако 1 подељено са 10 је 0,1. 160 00:07:01,170 --> 00:07:02,970 Дакле, зашто је 0.0? 161 00:07:02,970 --> 00:07:05,510 Па, то је зато што целобројног поделе. 162 00:07:05,510 --> 00:07:08,580 Дакле, 1 је цео број, 10 је цео број. 163 00:07:08,580 --> 00:07:11,980 Дакле, 1 подељено са 10, све се третира као целих бројева, 164 00:07:11,980 --> 00:07:16,380 и Ц, када радимо интегер поделу, ми скратити сваку децимални зарез. 165 00:07:16,380 --> 00:07:19,590 Дакле, 1 подељено са 10 је 0, а онда ми покушавамо 166 00:07:19,590 --> 00:07:24,410 за штампање који као флоат, тако нула штампати као флоат је 0.0. 167 00:07:24,410 --> 00:07:27,400 И зато имамо 0.0. 168 00:07:27,400 --> 00:07:28,940 >> Размотрити програм испод. 169 00:07:28,940 --> 00:07:31,280 Сада смо штампу 0.1. 170 00:07:31,280 --> 00:07:34,280 Дакле, не цео подела, Ми само штампате 0.1, 171 00:07:34,280 --> 00:07:37,100 али смо штампања до 28 децимале. 172 00:07:37,100 --> 00:07:41,810 И ми ово 0.1000, гомила нула, 5 5 5, бла бла бла. 173 00:07:41,810 --> 00:07:45,495 Дакле, питање је зашто то ради принт то, уместо да управо 0,1? 174 00:07:45,495 --> 00:07:46,620 175 00:07:46,620 --> 00:07:49,640 >> Дакле, овде је разлог сада флоатинг поинт непрецизност. 176 00:07:49,640 --> 00:07:53,410 Запамтите да је само 32 пловак бита. 177 00:07:53,410 --> 00:07:57,540 Тако да можемо само да представља коначан број од покретном зарезу са тих 32 178 00:07:57,540 --> 00:07:58,560 бита. 179 00:07:58,560 --> 00:08:01,760 Па ту је коначно бесконачно многи покретном зарезу, 180 00:08:01,760 --> 00:08:04,940 и ту је бескрајно много флоатинг Поинт вредности у између 0 и 1, 181 00:08:04,940 --> 00:08:07,860 а ми очигледно смо у могућности да представља још више вредности него то. 182 00:08:07,860 --> 00:08:13,230 Тако да морамо да се жртвујемо за моћи да представља већину вредности. 183 00:08:13,230 --> 00:08:16,960 >> Дакле, вредност попут 0.1, очигледно не можемо да представљају тачно. 184 00:08:16,960 --> 00:08:22,500 Дакле, уместо да представља 0,1 радимо Најбоље што може да представља овај 0.100000 5 5 185 00:08:22,500 --> 00:08:23,260 5. 186 00:08:23,260 --> 00:08:26,306 И то је прилично близу, али за многе апликације 187 00:08:26,306 --> 00:08:28,430 морате да бринете о флоатинг поинт непрецизност, 188 00:08:28,430 --> 00:08:30,930 јер једноставно не може да заступа Алл Флоатинг Поинтс тачно. 189 00:08:30,930 --> 00:08:32,500 190 00:08:32,500 --> 00:08:33,380 >> Питање 15. 191 00:08:33,380 --> 00:08:34,679 Размотрити код испод. 192 00:08:34,679 --> 00:08:36,630 Ми само штампате 1 плус 1. 193 00:08:36,630 --> 00:08:38,289 Тако да нема трик овде. 194 00:08:38,289 --> 00:08:41,780 1 плус 1 има вредност 2, и онда смо то штампу. 195 00:08:41,780 --> 00:08:42,789 Ово је управо штампа 2. 196 00:08:42,789 --> 00:08:43,850 197 00:08:43,850 --> 00:08:44,700 >> Питање 16. 198 00:08:44,700 --> 00:08:49,450 Сада смо штампу карактер 1 плус 1 знак. 199 00:08:49,450 --> 00:08:52,110 Дакле, зашто то није принт исту ствар? 200 00:08:52,110 --> 00:08:57,680 Па лик 1 плус знак 1, карактер 1 има АСЦИИ вредност 49. 201 00:08:57,680 --> 00:09:04,840 Дакле, ово је заиста говоре 49 плус 49, и На крају, то ће за штампање 98. 202 00:09:04,840 --> 00:09:06,130 Дакле, ово не одштампа 2. 203 00:09:06,130 --> 00:09:08,070 204 00:09:08,070 --> 00:09:09,271 >> Питање 17. 205 00:09:09,271 --> 00:09:11,520 Завршите имплементацију издатака испод одд на такав начин 206 00:09:11,520 --> 00:09:14,615 да функција враћа труе ако н је чудно и лажно ако је н и. 207 00:09:14,615 --> 00:09:16,710 208 00:09:16,710 --> 00:09:19,330 Ово је велики циљ за мод оператера. 209 00:09:19,330 --> 00:09:24,530 Дакле, узмемо Наш аргумент Н, ако је н мод 2 = 1, и 210 00:09:24,530 --> 00:09:28,030 то значи да је н подељен од 2 имао остатак. 211 00:09:28,030 --> 00:09:33,270 Ако је н подељен 2 имао остатак, који значи да је н непаран, па смо се вратили истина. 212 00:09:33,270 --> 00:09:34,910 Друго ми ретурн. 213 00:09:34,910 --> 00:09:39,070 Такође можете да уради Н мод 2 једнако нула, ретурн, ретурн истина. 214 00:09:39,070 --> 00:09:41,600 215 00:09:41,600 --> 00:09:43,640 >> Размотрити Рекурзив функцију испод. 216 00:09:43,640 --> 00:09:46,920 Дакле, ако је н мање од или једнак 1, повратак 1, 217 00:09:46,920 --> 00:09:50,430 ретурн н пута Ф од Н минус 1. 218 00:09:50,430 --> 00:09:52,556 Дакле, шта је ова функција? 219 00:09:52,556 --> 00:09:54,305 Па, ово је само факторијел функција. 220 00:09:54,305 --> 00:09:55,410 221 00:09:55,410 --> 00:09:57,405 Ово је лепо представља као н факторијелском. 222 00:09:57,405 --> 00:09:58,720 223 00:09:58,720 --> 00:10:02,310 >> Дакле, питање 19 сада, желимо да Користим ову функцију рекурзивни. 224 00:10:02,310 --> 00:10:04,530 Ми желимо да га понавља. 225 00:10:04,530 --> 00:10:05,874 Па како то да урадимо? 226 00:10:05,874 --> 00:10:07,790 Добро за особље рјешење, а опет има 227 00:10:07,790 --> 00:10:11,090 више начина сте могли да урадите да, почнемо са овим производом инт 228 00:10:11,090 --> 00:10:11,812 једнак 1. 229 00:10:11,812 --> 00:10:13,520 И кроз овај за петљу, идемо 230 00:10:13,520 --> 00:10:17,590 се множењем производ на крају завршити са пуним факторијелском. 231 00:10:17,590 --> 00:10:21,870 Дакле, за инт једнако 2, и није мање или једнако до Н, и ++. 232 00:10:21,870 --> 00:10:24,130 >> Можда се питате зашто сам једнако 2. 233 00:10:24,130 --> 00:10:28,380 Па, сетите се да овде морамо да уверите се наш основни случај је тачно. 234 00:10:28,380 --> 00:10:32,180 Дакле, ако н мања од или једнака на 1, само смо враћа 1. 235 00:10:32,180 --> 00:10:34,830 Дакле овде, почињемо у сам једнако 2. 236 00:10:34,830 --> 00:10:39,090 Па ако сам била 1, онда до-- или ако н су 1, онда за петљу 237 00:10:39,090 --> 00:10:40,600 не би извршити уопште. 238 00:10:40,600 --> 00:10:43,190 И тако ми бисмо повратак производ, који је 1. 239 00:10:43,190 --> 00:10:45,920 Слично томе, ако је н била ништа мање него 1-- 240 00:10:45,920 --> 00:10:49,290 ако је било 0, негативни 1, вхатевер-- ми би и даље враћа 1, 241 00:10:49,290 --> 00:10:52,260 што је управо оно што је рекурзиван верзија ради. 242 00:10:52,260 --> 00:10:54,660 >> Сада, ако је н веће од 1, онда идемо 243 00:10:54,660 --> 00:10:56,550 да уради најмање једну итерација ове петље. 244 00:10:56,550 --> 00:11:00,630 Рецимо н је 5, онда смо урадити пута производа износи 2. 245 00:11:00,630 --> 00:11:02,165 Дакле, сада је 2 производ. 246 00:11:02,165 --> 00:11:04,040 Сада ћемо да радимо Посетилаца производ једнако 3. 247 00:11:04,040 --> 00:11:04,690 Сада је 6. 248 00:11:04,690 --> 00:11:07,500 Посетилаца Продуцт једнако 4, сада је 24. 249 00:11:07,500 --> 00:11:10,420 Посетилаца Продуцт једнако 5, сада је 120. 250 00:11:10,420 --> 00:11:16,730 Па онда на крају, ми враћа 120, што је коректно 5 факторијелском. 251 00:11:16,730 --> 00:11:17,510 >> Питање 20. 252 00:11:17,510 --> 00:11:22,480 Ово је једна у којој морате да попуните у овој табели са датом алгоритма, 253 00:11:22,480 --> 00:11:25,735 све што смо видели, то одговара ове алгоритамску Рун 254 00:11:25,735 --> 00:11:28,060 Посетилаца те Асимптотиц рун пута. 255 00:11:28,060 --> 00:11:33,270 Дакле, шта је алгоритам који је омега 1, али Биг О од н? 256 00:11:33,270 --> 00:11:35,970 Тако да би могао да буде бескрајно многе одговоре овде. 257 00:11:35,970 --> 00:11:39,790 Онај који смо видели вероватно већина често је само линеарна претрагу. 258 00:11:39,790 --> 00:11:42,050 >> Дакле, у најбољем случају сценарио, ставка смо 259 00:11:42,050 --> 00:11:44,050 траже је у почетак листе 260 00:11:44,050 --> 00:11:47,400 и тако у омега 1 корака, Прва ствар коју проверите, 261 00:11:47,400 --> 00:11:49,740 Управо смо одмах вратити да смо нашли ставку. 262 00:11:49,740 --> 00:11:52,189 У најгорем сценарију, ставка на крају, 263 00:11:52,189 --> 00:11:53,730 или ставка није на листи уопште. 264 00:11:53,730 --> 00:11:56,700 Дакле, морамо тражити цео списак, све н 265 00:11:56,700 --> 00:11:58,480 елементи, и зато је о н. 266 00:11:58,480 --> 00:11:59,670 267 00:11:59,670 --> 00:12:04,880 >> Дакле, сада је нешто што је обоје омега н лог н, и Биг О од н лог н. 268 00:12:04,880 --> 00:12:08,650 Па најрелевантније ствар смо овде видели је спајање врсту. 269 00:12:08,650 --> 00:12:12,950 Дакле спајање врста, запамти, је на крају Тхета 270 00:12:12,950 --> 00:12:16,920 од н лог н, где је дефинисана тхета ако оба Омега и Биг О су исти. 271 00:12:16,920 --> 00:12:17,580 Оба н лог н. 272 00:12:17,580 --> 00:12:18,690 273 00:12:18,690 --> 00:12:21,970 >> Шта је нешто што је омега од н, и О од н квадрат? 274 00:12:21,970 --> 00:12:23,990 Па, опет ту више могућих одговора. 275 00:12:23,990 --> 00:12:26,440 Овде ћемо се десити да кажемо буббле врсту. 276 00:12:26,440 --> 00:12:28,840 Сортирање уметањем би такође радим овде. 277 00:12:28,840 --> 00:12:31,400 Запамтите да буббле врсту има ту оптимизацију где, 278 00:12:31,400 --> 00:12:34,630 Ако сте у могућности да се кроз целе листе 279 00:12:34,630 --> 00:12:37,402 без потребе да урадите Било који Свапс, онда, па, 280 00:12:37,402 --> 00:12:40,110 одмах могу вратити да Листа је сортирана за почетак. 281 00:12:40,110 --> 00:12:43,185 Дакле, у најбољем случају, то је само омега Н. 282 00:12:43,185 --> 00:12:45,960 Ако то није само лепо сортирана листа за почетак, 283 00:12:45,960 --> 00:12:48,270 онда имамо о о Н квадрат своп. 284 00:12:48,270 --> 00:12:49,330 285 00:12:49,330 --> 00:12:55,610 И, на крају, ми имамо избор врсту за н на квадрат, и омега и велики О. 286 00:12:55,610 --> 00:12:56,850 >> Питање 21. 287 00:12:56,850 --> 00:12:58,870 Шта је цео прелив? 288 00:12:58,870 --> 00:13:02,160 Па опет, слично раније, имамо само конацно много бита 289 00:13:02,160 --> 00:13:04,255 да представља цео број, па можда 32 бита. 290 00:13:04,255 --> 00:13:06,300 291 00:13:06,300 --> 00:13:09,180 Рецимо да имамо целобројна. 292 00:13:09,180 --> 00:13:12,800 Онда на крају највише позитиван број можемо представљати 293 00:13:12,800 --> 00:13:15,910 је 2 до 31 минус 1. 294 00:13:15,910 --> 00:13:19,370 Дакле, шта се дешава ако покушамо да онда инкрементирање тај цео? 295 00:13:19,370 --> 00:13:25,320 Па, ми ћемо отићи од 2 до 31 минус 1, па све до негативног 2 296 00:13:25,320 --> 00:13:26,490 на 31. 297 00:13:26,490 --> 00:13:29,470 Дакле, ово цео прекорачење кад стално увецава, 298 00:13:29,470 --> 00:13:32,330 и на крају не можете моће бити већи и то само 299 00:13:32,330 --> 00:13:34,520 обавија скроз около да негативну вредност. 300 00:13:34,520 --> 00:13:35,850 301 00:13:35,850 --> 00:13:37,779 >> Шта о тампон преливом? 302 00:13:37,779 --> 00:13:39,820 Дакле, тампон оверфлов-- сећате шта је тампон. 303 00:13:39,820 --> 00:13:41,000 То је само комад меморије. 304 00:13:41,000 --> 00:13:43,350 Нешто попут низа је тампон. 305 00:13:43,350 --> 00:13:46,120 Дакле, буффер оверфлов када покушате да приступите меморији 306 00:13:46,120 --> 00:13:47,880 након истека тог низа. 307 00:13:47,880 --> 00:13:50,410 Дакле, ако имате низ величине 5 и теби 308 00:13:50,410 --> 00:13:53,700 покушате да приступите арраи брацкет 5 или 6 или конзола конзола 7, 309 00:13:53,700 --> 00:13:56,610 или нешто изнад Енд, или чак нешто 310 00:13:56,610 --> 00:14:00,790 белов-- Арраи брацкет негативна 1-- сви они су буффер оверфлов. 311 00:14:00,790 --> 00:14:02,810 Дирате меморију у лошим начине. 312 00:14:02,810 --> 00:14:04,090 313 00:14:04,090 --> 00:14:04,730 >> Питање 23. 314 00:14:04,730 --> 00:14:05,760 315 00:14:05,760 --> 00:14:09,100 Дакле, у овом једном вам је потребно да спроведе стрлен. 316 00:14:09,100 --> 00:14:11,630 А ми вам кажемо да можете Претпостављам а неће бити нула, 317 00:14:11,630 --> 00:14:13,790 тако да не морате да било какву проверу за нулл. 318 00:14:13,790 --> 00:14:16,190 А постоји више начина си могао да уради ово. 319 00:14:16,190 --> 00:14:18,440 Овде ћемо само узети једноставан. 320 00:14:18,440 --> 00:14:21,780 Почињемо са контра, н. н је рачунајући колико знакова има. 321 00:14:21,780 --> 00:14:25,560 Тако да се крећу од 0, а онда поновити читаву листу. 322 00:14:25,560 --> 00:14:29,092 >> Да ли ова носач 0 једнак нулл терминатор лик? 323 00:14:29,092 --> 00:14:31,425 Запамтите тражимо нулл терминатор знак 324 00:14:31,425 --> 00:14:33,360 одредити колико је наш стринг. 325 00:14:33,360 --> 00:14:35,890 То ће да раскине Било који релевантни стринг. 326 00:14:35,890 --> 00:14:39,400 Тако је ова конзола 0 једнаки на нулл терминатор? 327 00:14:39,400 --> 00:14:42,850 Ако није, онда ћемо погледај с конзола 1, а 2 држача. 328 00:14:42,850 --> 00:14:45,050 Наставимо Унтил Ве пронађу нулл терминатор. 329 00:14:45,050 --> 00:14:48,580 Када смо га нашли, а затим н садржи Укупна дужина низа, 330 00:14:48,580 --> 00:14:49,942 а ми само да се врати то. 331 00:14:49,942 --> 00:14:51,180 332 00:14:51,180 --> 00:14:51,865 >> Питање 24. 333 00:14:51,865 --> 00:14:53,010 334 00:14:53,010 --> 00:14:56,050 Дакле, ово је онај у коме сте морати да се компромис. 335 00:14:56,050 --> 00:14:59,810 Дакле, једна ствар је добра у једном начин, али на који начин је то лоше? 336 00:14:59,810 --> 00:15:02,980 Па ево, спајање Сорт тежи бити бржи од буббле врсте. 337 00:15:02,980 --> 00:15:06,530 Рекавши да-- добро, тамо су вишеструки одговори овде. 338 00:15:06,530 --> 00:15:12,930 Али главни је да балон врста је омега н за сортирани списак. 339 00:15:12,930 --> 00:15:14,950 >> Сећаш се оног сто само смо видели раније. 340 00:15:14,950 --> 00:15:17,600 Дакле мехур шортс омега н, најбољи сценарио 341 00:15:17,600 --> 00:15:20,010 је да је у стању да само идите преко списак једном, одредити 342 00:15:20,010 --> 00:15:22,270 Хеј ово је већ сортирано, и повратак. 343 00:15:22,270 --> 00:15:25,960 Мерге Сорт, без обзира на све ти, је омега н лог н. 344 00:15:25,960 --> 00:15:29,200 Дакле, за сортирани списак, буббле Сортирај ће бити бржи. 345 00:15:29,200 --> 00:15:30,870 346 00:15:30,870 --> 00:15:32,430 >> А шта је повезано листе? 347 00:15:32,430 --> 00:15:36,070 Дакле, повезана листа може порасти и скупља да стане онолико елемената колико је потребно. 348 00:15:36,070 --> 00:15:38,489 Рекавши то то-- обично директно поређење 349 00:15:38,489 --> 00:15:40,280 ће бити повезан Листа са низом. 350 00:15:40,280 --> 00:15:41,600 351 00:15:41,600 --> 00:15:44,050 Дакле, иако је матрицама лако расте и психијатар 352 00:15:44,050 --> 00:15:47,130 да стане што више елемената по потреби, списак повезан 353 00:15:47,130 --> 00:15:49,600 упореди са арраи-- Ан Арраи има случајан приступ. 354 00:15:49,600 --> 00:15:52,960 Ми можемо у било који индекс Посебно елемент низа. 355 00:15:52,960 --> 00:15:56,430 >> Дакле, за повезане листе, не можемо Само идите на Тхе Фифтх Елемент, 356 00:15:56,430 --> 00:16:00,260 морамо прећи из почетка док не дођете до Тхе Фифтх Елемент. 357 00:16:00,260 --> 00:16:03,990 Као и да ће нас спречити радим нешто овако бинарно претраживање. 358 00:16:03,990 --> 00:16:08,150 Говорећи о бинарном претрагом, бинарно претраживање тежи да буде бржи од линеарне претраге. 359 00:16:08,150 --> 00:16:11,120 Рекавши то-- Дакле, једна могућа ствар 360 00:16:11,120 --> 00:16:13,380 је да не може да уради бинари потражи на повезаним листама, 361 00:16:13,380 --> 00:16:14,730 то можете да урадите само на низове. 362 00:16:14,730 --> 00:16:18,030 Али вероватно је још важније, Ви не можете учинити бинарни претрагу 363 00:16:18,030 --> 00:16:20,690 на низ која није сортирана. 364 00:16:20,690 --> 00:16:23,990 Унапред можда ћете морати да сортирате низ, па тек онда може 365 00:16:23,990 --> 00:16:25,370 ти бинарни претрагу. 366 00:16:25,370 --> 00:16:27,660 Дакле, ако ваш није ствар Сортед за почетак, 367 00:16:27,660 --> 00:16:29,250 онда линеарно претраживање може бити бржи. 368 00:16:29,250 --> 00:16:30,620 369 00:16:30,620 --> 00:16:31,740 >> Питање 27. 370 00:16:31,740 --> 00:16:34,770 Дакле, разматра програм доле, који ће бити у следећем слајду. 371 00:16:34,770 --> 00:16:37,790 И то је она у којој смо хтети да изричито 372 00:16:37,790 --> 00:16:39,980 вредности за различите варијабли. 373 00:16:39,980 --> 00:16:41,990 Па хајде да погледамо то. 374 00:16:41,990 --> 00:16:43,160 >> Тако линији. 375 00:16:43,160 --> 00:16:45,457 Имамо инт једнако 1. 376 00:16:45,457 --> 00:16:47,040 То је једина ствар која се десила. 377 00:16:47,040 --> 00:16:50,440 Дакле, у првој линији, видимо у нашој табле, да је и, а, б, а тмп су све 378 00:16:50,440 --> 00:16:51,540 онесвестио. 379 00:16:51,540 --> 00:16:52,280 Дакле, шта је к? 380 00:16:52,280 --> 00:16:53,860 Па управо смо га поставили једнак 1. 381 00:16:53,860 --> 00:16:55,020 382 00:16:55,020 --> 00:16:58,770 И онда линији, добро, видимо да и је подешена на 2, 383 00:16:58,770 --> 00:17:00,550 а сто је вец попуњен за нас. 384 00:17:00,550 --> 00:17:03,040 Дакле, к је 1 и и је 2. 385 00:17:03,040 --> 00:17:05,890 >> Сада, линија три, сада смо унутар свап функцију. 386 00:17:05,890 --> 00:17:07,560 Оно што смо проћи да мењате? 387 00:17:07,560 --> 00:17:11,609 Прошли смо амперсанд Кс за , а Амперсанд г. за Б. 388 00:17:11,609 --> 00:17:15,160 Где је проблем и раније изјавио је да адреса Кс 389 00:17:15,160 --> 00:17:17,520 је 0к10, а адреса је и 0к14. 390 00:17:17,520 --> 00:17:18,970 391 00:17:18,970 --> 00:17:21,909 Тако и б једнаки 0к10 и 0к14, респективно. 392 00:17:21,909 --> 00:17:23,670 393 00:17:23,670 --> 00:17:26,250 >> Сада на линији три, које су Кс и И? 394 00:17:26,250 --> 00:17:28,554 Па, ништа није променило О кии у овом тренутку. 395 00:17:28,554 --> 00:17:30,470 Иако су унутар Маин Стацк оквир, 396 00:17:30,470 --> 00:17:32,469 они и даље имају исти Вредности су раније. 397 00:17:32,469 --> 00:17:34,030 Нисмо модификовани никакву меморију. 398 00:17:34,030 --> 00:17:35,710 Дакле, к је 1, и је 2. 399 00:17:35,710 --> 00:17:36,550 400 00:17:36,550 --> 00:17:37,050 У реду. 401 00:17:37,050 --> 00:17:40,300 Дакле, сада смо рекли инт тмп једнако стар. 402 00:17:40,300 --> 00:17:44,410 Дакле, у реду, све четири је исти осим за тмп. 403 00:17:44,410 --> 00:17:47,130 Нисмо променили никакве вриједности ништа осим тмп. 404 00:17:47,130 --> 00:17:49,230 Ми постављамо тмп једнаку стар. 405 00:17:49,230 --> 00:17:50,620 Шта је звезда? 406 00:17:50,620 --> 00:17:56,240 Па, пре указује на Кс, Тако стар ће на једнаку Кс, што је 1. 407 00:17:56,240 --> 00:18:00,080 Дакле, све је копиран доле, а елите је 1. 408 00:18:00,080 --> 00:18:01,110 >> Сада следећи ред. 409 00:18:01,110 --> 00:18:03,380 Стар једнака стар Б. 410 00:18:03,380 --> 00:18:10,000 Дакле линије фиве-- опет добро, све је исти осим год звезда је. 411 00:18:10,000 --> 00:18:10,830 Шта је звезда? 412 00:18:10,830 --> 00:18:13,720 Па, ми смо рекли звезда је к. 413 00:18:13,720 --> 00:18:16,400 Дакле Мењамо к на равноправан стар б. 414 00:18:16,400 --> 00:18:18,960 Шта је са Б? год. Б указује на И. 415 00:18:18,960 --> 00:18:21,030 Дакле, звезда б је год. 416 00:18:21,030 --> 00:18:25,140 Дакле, ми смо постављање к једнако и, а све остало је исто. 417 00:18:25,140 --> 00:18:29,130 Дакле, видимо у следећем реду је к сада 2, а остали су само копирају доље. 418 00:18:29,130 --> 00:18:31,120 >> Сада у следећем реду, са Б једнак тмп. 419 00:18:31,120 --> 00:18:34,740 Па, ми смо рекли звезда б је И, па ми смо постављање година једнака тмп. 420 00:18:34,740 --> 00:18:37,450 Све остало је исто, тако да је све буде копиран доле. 421 00:18:37,450 --> 00:18:42,050 Ми смо постављање и једнак тмп, што је један, а све остало је исто. 422 00:18:42,050 --> 00:18:43,210 >> Сада коначно, линија седам. 423 00:18:43,210 --> 00:18:44,700 Вратили смо се у главном функцији. 424 00:18:44,700 --> 00:18:46,350 Ми смо након Свап је завршен. 425 00:18:46,350 --> 00:18:48,972 Изгубили смо, б, и тмп, али на крају смо 426 00:18:48,972 --> 00:18:51,180 не мењају никакве вредности ништа у овом тренутку, 427 00:18:51,180 --> 00:18:52,800 Ми само цопи Кс и И доле. 428 00:18:52,800 --> 00:18:56,490 А видимо да су Кс и И нов 2 и 1 уместо 1 и 2. 429 00:18:56,490 --> 00:18:58,160 Свап је успешно извршен. 430 00:18:58,160 --> 00:18:59,500 431 00:18:59,500 --> 00:19:00,105 >> Питање 28. 432 00:19:00,105 --> 00:19:01,226 433 00:19:01,226 --> 00:19:03,100 Претпоставимо да сте наишли поруке о грешкама 434 00:19:03,100 --> 00:19:06,790 испод током радног времена следеће године, као и ЦА ТФ. 435 00:19:06,790 --> 00:19:08,930 Саветују како да решите сваки од ових грешака. 436 00:19:08,930 --> 00:19:11,160 Дакле, ундефинед референце то ГетСтринг. 437 00:19:11,160 --> 00:19:12,540 Зашто би ти видиш ово? 438 00:19:12,540 --> 00:19:15,380 Па, ако ученик користи ГетСтринг у свом коду, 439 00:19:15,380 --> 00:19:20,310 они су правилно хасх укључени ЦС50 дот х до укључи ЦС50 библиотеку. 440 00:19:20,310 --> 00:19:22,380 >> Па, шта раде треба да исправите ову грешку? 441 00:19:22,380 --> 00:19:26,810 Они треба да урадите цртицом лцс50 у командне линије када су састављања. 442 00:19:26,810 --> 00:19:29,501 Дакле, ако не пролазе цланг Дасх лцс50, они су 443 00:19:29,501 --> 00:19:32,000 неће имати стварни Код који имплементира ГетСтринг. 444 00:19:32,000 --> 00:19:33,190 445 00:19:33,190 --> 00:19:34,170 >> Питање 29. 446 00:19:34,170 --> 00:19:36,190 Имплицитно изјављујући библиотека функција стрлен. 447 00:19:36,190 --> 00:19:37,550 448 00:19:37,550 --> 00:19:40,360 Па сад ово, они немају урађено одговарајући хасх укључују. 449 00:19:40,360 --> 00:19:41,440 450 00:19:41,440 --> 00:19:45,410 У овом конкретном случају, заглавље датотеке они треба да укључи је ниска тачка Х, 451 00:19:45,410 --> 00:19:48,710 укључујући и гудачки дот х, сада студент-- сада преводилац 452 00:19:48,710 --> 00:19:51,750 има приступ декларације стрлен, 453 00:19:51,750 --> 00:19:54,120 а зна да кода користи стрлен правилно. 454 00:19:54,120 --> 00:19:55,380 455 00:19:55,380 --> 00:19:56,580 >> Питање 30. 456 00:19:56,580 --> 00:20:00,240 Више процената конверзија од аргумената података. 457 00:20:00,240 --> 00:20:01,540 Дакле, шта је ово? 458 00:20:01,540 --> 00:20:06,470 Добро се сећам да су одсто сигнс-- Колико су релевантни за принтф. 459 00:20:06,470 --> 00:20:08,890 Дакле, у принтф можемо перцент-- можемо нешто принт 460 00:20:08,890 --> 00:20:11,380 као проценат сам Бацксласх н. 461 00:20:11,380 --> 00:20:15,310 Или можемо штампати као одсто и, простор, посто сам, простор, посто сам. 462 00:20:15,310 --> 00:20:18,950 Дакле, за сваки са посто знаци, треба 463 00:20:18,950 --> 00:20:21,560 да прође променљиву крајем принтф. 464 00:20:21,560 --> 00:20:26,980 >> Дакле, ако кажемо принтф заграда одсто И Бацксласх н блиске парови, 465 00:20:26,980 --> 00:20:30,270 Па, ми кажемо да смо łтампања цео број, 466 00:20:30,270 --> 00:20:33,970 али онда не пролазе иф цео број да стварно штампање. 467 00:20:33,970 --> 00:20:37,182 Дакле, овде више процената конверзије од аргумената података? 468 00:20:37,182 --> 00:20:39,390 То говори да имамо гомила одсто, 469 00:20:39,390 --> 00:20:42,445 а ми немамо довољно варијабле да заиста попуните тим процентима. 470 00:20:42,445 --> 00:20:44,850 471 00:20:44,850 --> 00:20:50,010 >> И онда дефинитивно, на питање 31, Дефинитивно је изгубио 40 бајтова у једном блоковима. 472 00:20:50,010 --> 00:20:52,350 Дакле, ово је грешка Валгринд. 473 00:20:52,350 --> 00:20:54,720 Ово је рекао да негде у коду, 474 00:20:54,720 --> 00:20:59,010 имате расподелу која је 40 бајтова велике, тако да маллоцед 40 бајтова, 475 00:20:59,010 --> 00:21:00,515 и никад га ослободио. 476 00:21:00,515 --> 00:21:02,480 477 00:21:02,480 --> 00:21:05,140 Највероватније је потребно само наћи неки цурење меморије, 478 00:21:05,140 --> 00:21:07,650 и наћи где треба да ослободити овај блок меморије. 479 00:21:07,650 --> 00:21:08,780 480 00:21:08,780 --> 00:21:11,910 >> И питање 32, Инвалид писања величине 4. 481 00:21:11,910 --> 00:21:13,250 Опет ово је Валгринд грешка. 482 00:21:13,250 --> 00:21:15,440 Ово не треба да урадите са меморијским цурења сада. 483 00:21:15,440 --> 00:21:20,750 То је, највише ликели-- мислим, то је нека неважећих права меморије. 484 00:21:20,750 --> 00:21:23,270 И највероватније да је ово нека врста тампон преливања. 485 00:21:23,270 --> 00:21:26,560 Где имате низ, можда цео низ, и идемо 486 00:21:26,560 --> 00:21:30,115 кажу да је то од величине 5, а ви покушати да додирнете низа држач 5. 487 00:21:30,115 --> 00:21:34,150 Дакле, ако покушате да пишете да вредности, то није комад меморије 488 00:21:34,150 --> 00:21:37,440 да заправо имају приступ, и па ћеш добити ову грешку, 489 00:21:37,440 --> 00:21:39,272 рекавши инвалид пише о величине 4. 490 00:21:39,272 --> 00:21:42,480 Валгринд ће препознати да сте Покушавам да тоуцх меморију непримерено. 491 00:21:42,480 --> 00:21:43,980 >> И то је то за куиз0. 492 00:21:43,980 --> 00:21:47,065 Ја сам Роб Боуден, а ово је ЦС50. 493 00:21:47,065 --> 00:21:51,104