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 роботи з особливими видами масивів. 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 Якщо у вас є комп'ютер розділити два 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]