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