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