1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA Чан: Перше, що ви могли б повідомлення про знахідку є те, що ми вже 3 00:00:13,120 --> 00:00:14,520 вже код, написаний для нас. 4 00:00:14,520 --> 00:00:16,219 Це називається код розподіл. 5 00:00:16,219 --> 00:00:19,060 Таким чином, ми не тільки написання власного код з нуля більше. 6 00:00:19,060 --> 00:00:23,870 Швидше, ми заповнення пустот в деякому попередньо існуючого коду. 7 00:00:23,870 --> 00:00:28,860 >> Програма find.c запрошувати номера заповнити стіг сіна, пошук 8 00:00:28,860 --> 00:00:33,260 стозі сіна для користувачів представлених голки, і він робить це шляхом виклику роду і 9 00:00:33,260 --> 00:00:36,660 пошуку, функції, визначені в helpers.c. 10 00:00:36,660 --> 00:00:38,740 Так find.c написано вже. 11 00:00:38,740 --> 00:00:41,840 Ваше завдання написати помічників. 12 00:00:41,840 --> 00:00:42,940 >> Так що ми робимо? 13 00:00:42,940 --> 00:00:45,270 Ми реалізації дві функції. 14 00:00:45,270 --> 00:00:50,110 Пошук, який повертає істину, якщо значення знаходиться в стозі сіна, повертаючись 15 00:00:50,110 --> 00:00:52,430 помилковим, якщо значення не в стозі сіна. 16 00:00:52,430 --> 00:00:59,060 А потім ми також здійснює сортування, яка сортує масив з ім'ям значення. 17 00:00:59,060 --> 00:01:01,120 Так що давайте вирішувати пошуку. 18 00:01:01,120 --> 00:01:04,550 >> Пошук нині реалізований в якості лінійного пошуку. 19 00:01:04,550 --> 00:01:06,620 Але ви можете зробити набагато краще, ніж це. 20 00:01:06,620 --> 00:01:11,610 Лінійний пошук здійснюється в O п час, який є досить повільним, хоча це 21 00:01:11,610 --> 00:01:14,920 можете шукати будь-який список, дане йому. 22 00:01:14,920 --> 00:01:21,190 Ваше завдання полягає в реалізації бінарний пошук, який під час виконання O з журналу п. 23 00:01:21,190 --> 00:01:22,200 Це досить швидко. 24 00:01:22,200 --> 00:01:24,240 >> Але є застереження. 25 00:01:24,240 --> 00:01:28,910 Довічного пошуку можна тільки пошук через попередньо відсортованих списків. 26 00:01:28,910 --> 00:01:31,450 Чому це відбувається? 27 00:01:31,450 --> 00:01:33,690 Що ж, давайте подивимося на прикладі. 28 00:01:33,690 --> 00:01:37,350 Враховуючи масив значень, стіг сіна, ми збираємося шукати 29 00:01:37,350 --> 00:01:41,510 голку, і в цьому Наприклад, ціле число 3. 30 00:01:41,510 --> 00:01:45,220 >> Таким чином, що бінарний пошук працює так, що ми порівняємо середню вартість 31 00:01:45,220 --> 00:01:49,430 масив до голки, так само, як, як ми відкрили телефонну книгу до середини 32 00:01:49,430 --> 00:01:51,720 сторінки в тиждень 0. 33 00:01:51,720 --> 00:01:55,710 Таким чином, після порівняння середнє значення для голка, ви можете відмовитися від або 34 00:01:55,710 --> 00:01:59,620 вліво або права половина масиву затягнувши свої кордони. 35 00:01:59,620 --> 00:02:04,450 У цьому випадку, оскільки 3, наша голка, є менше 10, середнє значення, 36 00:02:04,450 --> 00:02:07,060 Право межа може зменшуватися. 37 00:02:07,060 --> 00:02:09,470 >> Але спробувати зробити ваші кордону як можна щільніше. 38 00:02:09,470 --> 00:02:12,690 Якщо середнє значення не голка, то ви знаєте, що вам не потрібно, щоб 39 00:02:12,690 --> 00:02:14,070 включити його до цієї категорії. 40 00:02:14,070 --> 00:02:18,390 Так ваше право пов'язаний може затягнути пошук кордону трохи більше, 41 00:02:18,390 --> 00:02:22,840 не й для так далі і так далі, до тих пір, ви знайшли голку. 42 00:02:22,840 --> 00:02:24,580 >> Отже, що ж псевдо Код виглядає? 43 00:02:24,580 --> 00:02:28,980 Ну, в той час як ми все ще переглядаючи список і досі 44 00:02:28,980 --> 00:02:33,540 елементи, щоб дивитися в, ми беремо середину зі списку і порівняти, що 45 00:02:33,540 --> 00:02:36,020 середнє значення для нашої голки. 46 00:02:36,020 --> 00:02:38,380 Якщо вони рівні, то це означає, що ми в знайшла голку, і ми можемо 47 00:02:38,380 --> 00:02:40,160 повернутися вірно. 48 00:02:40,160 --> 00:02:43,940 >> В іншому випадку, якщо голка менше середнє значення, то, що означає, що ми 49 00:02:43,940 --> 00:02:48,350 можна відкинути праву половину і просто пошук по ліву сторону масиву. 50 00:02:48,350 --> 00:02:51,860 В іншому випадку, ми будемо шукати Права частина масиву. 51 00:02:51,860 --> 00:02:55,470 І в кінці, якщо ви не маєте будь більше елементів зліва пошук, але ви 52 00:02:55,470 --> 00:02:58,030 Нічого не знайшли голку ще, то ви повернутися помилковим. 53 00:02:58,030 --> 00:03:02,960 Оскільки голка виразно не в сіна. 54 00:03:02,960 --> 00:03:06,200 >> Тепер один акуратний річ про це псевдо код в бінарний пошук в тому, що він може 55 00:03:06,200 --> 00:03:11,000 інтерпретуватися як або ітеративний або рекурсивна реалізація. 56 00:03:11,000 --> 00:03:14,900 Тому було б рекурсивним, якщо ви назвали функція пошуку в пошуку 57 00:03:14,900 --> 00:03:18,400 функціонувати по обидві половини масиву. 58 00:03:18,400 --> 00:03:20,750 Ми розглянемо рекурсії трохи пізніше в ході. 59 00:03:20,750 --> 00:03:23,210 Але точно знаю, що це варіант якщо ви хотіли б спробувати. 60 00:03:23,210 --> 00:03:24,460