1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA Chandler: Pierwszą rzeczą, którą może Zawiadomienie o znalezisku jest to, że już 3 00:00:13,120 --> 00:00:14,520 Kod napisany nie dla nas. 4 00:00:14,520 --> 00:00:16,219 Jest to tak zwany kod dystrybucji. 5 00:00:16,219 --> 00:00:19,060 Więc nie tylko pisanie własne kod od zera już. 6 00:00:19,060 --> 00:00:23,870 Raczej jesteśmy wypełniania pustek w pewnym uprzednio istniejącym kodzie. 7 00:00:23,870 --> 00:00:28,860 >> Program find.c monituje o numerach wypełnić stóg siana, wyszukiwania 8 00:00:28,860 --> 00:00:33,260 stóg siana w igle składane przez użytkownika, i robi to przez wywołanie rodzaju i 9 00:00:33,260 --> 00:00:36,660 wyszukiwania, funkcje zdefiniowane w helpers.c. 10 00:00:36,660 --> 00:00:38,740 Więc find.c napisano już. 11 00:00:38,740 --> 00:00:41,840 Twoim zadaniem jest napisać pomocników. 12 00:00:41,840 --> 00:00:42,940 >> Więc co robimy? 13 00:00:42,940 --> 00:00:45,270 Jesteśmy realizacji dwóch funkcji. 14 00:00:45,270 --> 00:00:50,110 Wyszukiwarka, która zwraca true, jeśli wartość znajduje się w stogu siana, wracając 15 00:00:50,110 --> 00:00:52,430 false, jeśli wartość jest nie w stogu siana. 16 00:00:52,430 --> 00:00:59,060 A potem mamy również realizację rodzaju, które sortuje tablicę o nazwie wartości. 17 00:00:59,060 --> 00:01:01,120 Zajmijmy się więc poszukiwania. 18 00:01:01,120 --> 00:01:04,550 >> Wyszukiwanie jest aktualnie realizowany jako poszukiwanie liniowej. 19 00:01:04,550 --> 00:01:06,620 Ale można to zrobić znacznie lepiej. 20 00:01:06,620 --> 00:01:11,610 Szukaj liniowy realizowany jest w O n czas, który jest dość wolny, chociaż 21 00:01:11,610 --> 00:01:14,920 może sprawdzić każdą listę nadane mu. 22 00:01:14,920 --> 00:01:21,190 Twoim zadaniem jest wdrożenie wyszukiwanie binarne, które prowadzi razem Ö log n.. 23 00:01:21,190 --> 00:01:22,200 To dość szybko. 24 00:01:22,200 --> 00:01:24,240 >> Ale jest warunek. 25 00:01:24,240 --> 00:01:28,910 Binary wyszukiwania może wyłącznie przez wstępnie posortowanych list. 26 00:01:28,910 --> 00:01:31,450 Dlaczego tak jest? 27 00:01:31,450 --> 00:01:33,690 Cóż, spójrzmy na przykład. 28 00:01:33,690 --> 00:01:37,350 Biorąc pod uwagę, tablica wartości, stóg siana, będziemy szukać 29 00:01:37,350 --> 00:01:41,510 igły, w tym Na przykład, liczba całkowita 3. 30 00:01:41,510 --> 00:01:45,220 >> Sposób, że wyszukiwarka działa jest to, że binarny Porównując wartość środku 31 00:01:45,220 --> 00:01:49,430 Tablica z igłą, tak jak jak otworzyliśmy książkę telefoniczną na środku 32 00:01:49,430 --> 00:01:51,720 strona w tygodniu 0. 33 00:01:51,720 --> 00:01:55,710 Więc po porównaniu wartości środku igły, można odrzucić albo 34 00:01:55,710 --> 00:01:59,620 w lewo lub w prawo pół tablicy dokręcając swoje granice. 35 00:01:59,620 --> 00:02:04,450 W tym przypadku, ponieważ 3 nasz igła jest mniej niż 10, wartość środkowa, 36 00:02:04,450 --> 00:02:07,060 prawo związane może zmniejszyć. 37 00:02:07,060 --> 00:02:09,470 >> Ale spróbuj zrobić swoje granice tak mocno, jak to możliwe. 38 00:02:09,470 --> 00:02:12,690 Jeśli wartość środkowa nie jest igła, to wiesz, że nie musisz się 39 00:02:12,690 --> 00:02:14,070 umieścić go w wyszukiwaniu. 40 00:02:14,070 --> 00:02:18,390 Więc prawo związane mogą dokręcić wyszukiwania granice tylko trochę więcej, 41 00:02:18,390 --> 00:02:22,840 i tak dalej, i tak dalej, aż Ci znaleźć igłę. 42 00:02:22,840 --> 00:02:24,580 >> Więc co robi pseudo Kod wygląda? 43 00:02:24,580 --> 00:02:28,980 Dobrze, a my wciąż patrząc przez lista i jeszcze 44 00:02:28,980 --> 00:02:33,540 elementy szukać w bierzemy środek z listy i porównać, które 45 00:02:33,540 --> 00:02:36,020 Wartość środkowa naszej igły. 46 00:02:36,020 --> 00:02:38,380 Jeśli są równe, to znaczy mamy znaleźć igłę, i możemy 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> W przeciwnym razie, jeśli igła jest mniejsza niż wartość środkowa, to znaczy, że 49 00:02:43,940 --> 00:02:48,350 może odrzucić prawą połowę i tylko szukaj po lewej stronie tablicy. 50 00:02:48,350 --> 00:02:51,860 W przeciwnym razie będziemy szukać prawej stronie tablicy. 51 00:02:51,860 --> 00:02:55,470 I na koniec, jeśli nie ma żadnych więcej elementów lewo, ale można szukać 52 00:02:55,470 --> 00:02:58,030 nie znalazłem swoją igłę, następnie return false. 53 00:02:58,030 --> 00:03:02,960 Bo na pewno igły nie ma w stogu siana. 54 00:03:02,960 --> 00:03:06,200 >> Teraz, jeden schludny rzeczą w tym pseudo Kod w poszukiwaniu binarnego jest to, że można 55 00:03:06,200 --> 00:03:11,000 należy interpretować albo jako iteracyjny lub rekurencyjna realizacja. 56 00:03:11,000 --> 00:03:14,900 Więc byłoby rekurencyjny jeśli nazywa Funkcja wyszukiwania w poszukiwaniu 57 00:03:14,900 --> 00:03:18,400 funkcjonować na każdej połowie tej tablicy. 58 00:03:18,400 --> 00:03:20,750 Omówimy trochę rekurencji później w trakcie. 59 00:03:20,750 --> 00:03:23,210 Ale wiem, że jest to opcja jeśli chcesz spróbować. 60 00:03:23,210 --> 00:03:24,460