1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Rozdział 3] [mniej wygodne] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [To jest CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Dobra, zaczynajmy. 5 00:00:10,000 --> 00:00:13,000 Zapraszamy do tygodnia 4 z CS50. 6 00:00:13,000 --> 00:00:19,000 Jeśli faceci otworzyć przeglądarkę internetową i otwórz Pset 3, 7 00:00:19,000 --> 00:00:23,000 Wymieszaj z CS50, zamierzamy zacząć chodzić 8 00:00:23,000 --> 00:00:26,000 przez sekcję pytań tam. 9 00:00:26,000 --> 00:00:32,000 Podobnie jak w zeszłym tygodniu, będziemy pracować w CS50 Spaces 10 00:00:32,000 --> 00:00:35,000 jeśli będziesz też ciągnąć, że aż tak dobrze, 11 00:00:35,000 --> 00:00:43,000 i jeśli iść dalej i odwiedzić ten link, że mam tu na górze. 12 00:00:43,000 --> 00:00:45,000 Nadszedł czas, aby zacząć. 13 00:00:45,000 --> 00:00:51,000 Mamy naszą małą programu hi tutaj. Nic szalony. 14 00:00:51,000 --> 00:00:55,000 Jedną z pierwszych rzeczy, które chcę zrobić z was jest dziś przejść kilka rozwiązań 15 00:00:55,000 --> 00:00:58,000 Zestaw do problemu 1, rodzaj rozwiązań przykład 16 00:00:58,000 --> 00:01:03,000 tak więc można poczuć jakie personelu kodu jest pisanie, 17 00:01:03,000 --> 00:01:07,000 jakie rodzaje kodów innych studentów pisania, 18 00:01:07,000 --> 00:01:10,000 i czy spojrzeć na to, bo wiem, że to dziwne, 19 00:01:10,000 --> 00:01:14,000 podczas przesyłania rozwiązanie zestawu problemów i uzyskać komentarz 20 00:01:14,000 --> 00:01:18,000 na własnej wersji, ale czasami jest to przydatne, aby zobaczyć jak inni to zrobili, 21 00:01:18,000 --> 00:01:22,000 szczególnie te, które są ładne. 22 00:01:22,000 --> 00:01:27,000 W przeważającej części, byłem naprawdę pod wrażeniem rozwiązań wy produkowane. 23 00:01:27,000 --> 00:01:31,000 Jeszcze nie zaczął patrząc na 2s Set problem, ale jeśli są one coś jak pierwszy, 24 00:01:31,000 --> 00:01:34,000 oznacza to, że tylko dobre rzeczy. 25 00:01:34,000 --> 00:01:40,000 >> Jeśli spojrzeć na moich zmian, zacznijmy w dół w wersji 1, 26 00:01:40,000 --> 00:01:47,000 i zamierzamy podjąć szybkie spojrzenie na rozwiązania Mario. 27 00:01:47,000 --> 00:01:54,000 Jeśli ciągnąć ten fakt, te programy, które mamy zamiar przedstawić są prawidłowe. 28 00:01:54,000 --> 00:01:56,000 Nie było zagadnienia poprawności tych problemów, ale raczej 29 00:01:56,000 --> 00:01:59,000 chcemy rozmawiać trochę o różnych zagadnień projektowych 30 00:01:59,000 --> 00:02:03,000 , które były tutaj stosowane. 31 00:02:03,000 --> 00:02:08,000 Jedną z rzeczy, które były ciekawe rozwiązania 32 00:02:08,000 --> 00:02:11,000 jest to, że użył tego nowego konstruktu nazwie pound zdefiniować, 33 00:02:11,000 --> 00:02:15,000 czasami określane jako określenie mieszania. 34 00:02:15,000 --> 00:02:18,000 Pozwól mi powiększyć tutaj. 35 00:02:18,000 --> 00:02:24,000 # Define pozwala na nadanie nazwy tych liczb w programie. 36 00:02:24,000 --> 00:02:28,000 W tym przypadku, maksymalna wysokość w Mario piramidy 37 00:02:28,000 --> 00:02:34,000 był 23 i zamiast przedstawić 23 w moim kodu- 38 00:02:34,000 --> 00:02:37,000 patrz my że ciężko kodowania 23 - 39 00:02:37,000 --> 00:02:43,000 Zamiast tego daje MAX_HEIGHT nazwisko do tego numeru, 40 00:02:43,000 --> 00:02:48,000 tak, że tu, w moim do-while 41 00:02:48,000 --> 00:02:51,000 rzeczywiście można odnieść się do MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 zamiast uczynić numer 23 w. 43 00:02:55,000 --> 00:02:57,000 [Student] Co to jest zaletą robi? 44 00:02:57,000 --> 00:02:59,000 To jest dobre pytanie. 45 00:02:59,000 --> 00:03:03,000 Jednym z nich jest czytelność. 46 00:03:03,000 --> 00:03:08,000 Zaletą korzystania z tego # define jest czytelność. 47 00:03:08,000 --> 00:03:11,000 Kiedy czytam ten kod, widzę, co się dzieje. 48 00:03:11,000 --> 00:03:15,000 >> Widzę w tym stanie tutaj testujemy 49 00:03:15,000 --> 00:03:19,000 na wysokość jest <0, co może się również zdefiniowane 50 00:03:19,000 --> 00:03:22,000 się minimalną wysokość lub wysokość minimalna. 51 00:03:22,000 --> 00:03:25,000 Inną zaletą jest to, że można to przeczytać resztę linii aby 52 00:03:25,000 --> 00:03:30,000 także, że mamy do sprawdzenia, czy wysokość jest większa od maksymalnej wysokości, 53 00:03:30,000 --> 00:03:35,000 bo będziemy kontynuować a wysokość jest większa od maksymalnej wysokości. 54 00:03:35,000 --> 00:03:40,000 Inną korzyścią jest to, gdybym pomniejszyć trochę tu 55 00:03:40,000 --> 00:03:49,000 jeśli uruchomić ten program i uruchomić go, powiedzmy, 23 już teraz, 56 00:03:49,000 --> 00:03:52,000 zostanie wydrukowane wszystkie 23 wierszy po prostu. 57 00:03:52,000 --> 00:03:54,000 Ale powiedzieć, że chciał zmienić wysokość max, 58 00:03:54,000 --> 00:03:57,000 i teraz chcę, aby ograniczyć maksymalną wysokość piramid 59 00:03:57,000 --> 00:04:06,000 być tylko powiedzieć-man, który był funky. 60 00:04:06,000 --> 00:04:14,000 # Include, # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 i powiedzmy, że chcemy, aby ustawić go w wysokości 10. 62 00:04:18,000 --> 00:04:22,000 Teraz w tym momencie wszystko, co musiałem zrobić, to zmienić go w tym jednym miejscu. 63 00:04:22,000 --> 00:04:27,000 Można ponownie skompilować kod, a teraz, gdy próbuję i wpisz 12, 64 00:04:27,000 --> 00:04:30,000 poprosi mnie ponownie. 65 00:04:30,000 --> 00:04:33,000 W tym przypadku mamy tylko za pomocą MAX_HEIGHT raz. 66 00:04:33,000 --> 00:04:37,000 To nie jest, że duże z kłopotów, aby przejść 67 00:04:37,000 --> 00:04:40,000 i zmienić go w pętli, jeśli trzeba. 68 00:04:40,000 --> 00:04:44,000 Ale w programach, w których jesteś odwołującego samą liczbę magiczną 69 00:04:44,000 --> 00:04:47,000 w kółko, to # define mechanizm jest naprawdę przydatne 70 00:04:47,000 --> 00:04:52,000 bo po prostu zmienić go raz na górze file-to zazwyczaj, gdzie je- 71 00:04:52,000 --> 00:04:57,000 Zmiana i przenika przez części pliku. 72 00:04:57,000 --> 00:05:02,000 >> Inne rzeczy, które chciałem zwrócić uwagę w tym zadaniu, że myślałem, wyglądało naprawdę miło, 73 00:05:02,000 --> 00:05:05,000 jeden był nazewnictwa zmiennych. 74 00:05:05,000 --> 00:05:14,000 Widać tutaj, że mamy całkowitą zmienne zwane wiersz i wysokość tzw. 75 00:05:14,000 --> 00:05:20,000 Spaces, asocjacyjne, pomaga uczynić kod trochę bardziej czytelne, 76 00:05:20,000 --> 00:05:25,000 sprawia, że ​​trochę bardziej zrozumiała, co się rzeczywiście dzieje. 77 00:05:25,000 --> 00:05:31,000 Jest to w przeciwieństwie do używania, na przykład, litery losowych 78 00:05:31,000 --> 00:05:35,000 lub po prostu bełkot całkowicie. 79 00:05:35,000 --> 00:05:39,000 Ostatnią rzeczą będę wskazać, że w pętli, 80 00:05:39,000 --> 00:05:45,000 często te zmienne iteracyjnej, te liczniki, które używasz w pętli, 81 00:05:45,000 --> 00:05:51,000 to średnia i konwencjonalnych je uruchomić zarówno z I, a następnie a następnie j k 82 00:05:51,000 --> 00:05:54,000 i będzie stamtąd jeśli potrzebujesz więcej zmiennych, 83 00:05:54,000 --> 00:05:56,000 i jest to tylko konwencja. 84 00:05:56,000 --> 00:05:58,000 Istnieje wiele konwencji. 85 00:05:58,000 --> 00:06:00,000 To zależy od języka programowania używasz. 86 00:06:00,000 --> 00:06:04,000 Ale w C, zazwyczaj zaczynają się i. 87 00:06:04,000 --> 00:06:08,000 To nie ma sensu używać, powiedzmy, lub b 88 00:06:08,000 --> 00:06:13,000 się w zależności od sytuacji. 89 00:06:13,000 --> 00:06:15,000 To jest to na ten jeden. 90 00:06:15,000 --> 00:06:25,000 Jeśli teraz podciągnąć Revision 2, zobaczysz kolejny Mario, 91 00:06:25,000 --> 00:06:29,000 a ten jest podobny do drugiego tak, że piły, 92 00:06:29,000 --> 00:06:32,000 ale ma coś w rodzaju super. 93 00:06:32,000 --> 00:06:38,000 Jeśli przyjrzymy się tej części tutaj wewnątrz wewnętrznej pętli for 94 00:06:38,000 --> 00:06:44,000 oni używają jakiś szalony składni szuka tutaj właśnie w tej linii. 95 00:06:44,000 --> 00:06:47,000 Nazywa się to operator trójskładnikowych. 96 00:06:47,000 --> 00:06:53,000 Jest jeśli else skondensowane w jednej linii. 97 00:06:53,000 --> 00:06:57,000 Warunkiem jest ta część w nawiasach. 98 00:06:57,000 --> 00:07:05,000 Jest to równoznaczne z powiedzeniem, jeśli j 00:07:10,000 I co wtedy zawartość, że jeśli blok byłby to przestrzeń 100 00:07:10,000 --> 00:07:16,000 i zawartość, co będzie jeszcze są to #. 101 00:07:16,000 --> 00:07:20,000 To zasadniczo przypisywania miejsca do tej zmiennej. 102 00:07:20,000 --> 00:07:24,000 To oddanie miejsca w treści zmiennej bloku 103 00:07:24,000 --> 00:07:29,000 Jeśli warunek ten jest spełniony, a jeśli warunek nie jest spełniony, 104 00:07:29,000 --> 00:07:32,000 wtedy zmienna blok dostaje to #. 105 00:07:32,000 --> 00:07:37,000 , A następnie, w trakcie, zamiast budowania cały ciąg 106 00:07:37,000 --> 00:07:43,000 i drukowania wszystko na końcu Roztwór ten wypisuje jeden znak czasu. 107 00:07:43,000 --> 00:07:48,000 Całkiem fajne. 108 00:07:48,000 --> 00:07:53,000 >> Inną parę rzeczy do obejrzenia. Przeniesiemy się do chciwy. 109 00:07:53,000 --> 00:07:58,000 Teraz, jeśli spojrzymy na chciwy, to pierwsze rozwiązanie 110 00:07:58,000 --> 00:08:00,000 używa tych # definiuje całkiem sporo. 111 00:08:00,000 --> 00:08:06,000 Mamy jeden stałą zdefiniowany dla każdego z różnych numerów w tym programie. 112 00:08:06,000 --> 00:08:12,000 Mamy jeden dla centów za dolara, jeden dla kwartałach dimes, monet i grosze, 113 00:08:12,000 --> 00:08:15,000 i teraz, jeśli przewinąć i przeczytać kodu, 114 00:08:15,000 --> 00:08:22,000 widzimy standardowy-while wszystko drukowania LOOP OUT. 115 00:08:22,000 --> 00:08:25,000 Kind of sedna tego problemu było uświadomienie sobie, że 116 00:08:25,000 --> 00:08:29,000 potrzebne do konwersji pływaka, który odczytuje od użytkownika do liczby całkowitej 117 00:08:29,000 --> 00:08:32,000 dokładnie do matematyki, a to dlatego, 118 00:08:32,000 --> 00:08:36,000 z liczb zmiennoprzecinkowych, jak rozmawialiśmy o tym w wykładzie krótko 119 00:08:36,000 --> 00:08:41,000 nie jest możliwe, aby dokładnie reprezentować każdą wartość na osi liczbowej 120 00:08:41,000 --> 00:08:47,000 ponieważ jest nieskończenie wiele wartości między 3 i, powiedzmy, 3,1 nawet. 121 00:08:47,000 --> 00:08:54,000 Możesz mieć 3,01 i 3,001 i 3,0001, i można iść dalej. 122 00:08:54,000 --> 00:09:00,000 Okazuje się, gdy użytkownik pracuje z pieniędzmi, często chcesz przekonwertować 123 00:09:00,000 --> 00:09:05,000 na liczbę całkowitą tak, że nie tracimy groszy i tego typu rzeczy. 124 00:09:05,000 --> 00:09:09,000 Robi to i zaokrąglenie było kluczem. 125 00:09:09,000 --> 00:09:14,000 To rozwiązanie stosowane idealnie prosty, dobry algorytm, 126 00:09:14,000 --> 00:09:17,000 których zmniejszona liczbę centów pozostałych najpierw kwartałach 127 00:09:17,000 --> 00:09:19,000 następnie dimes, następnie monet, potem grosze, 128 00:09:19,000 --> 00:09:24,000 i dodawanie do liczby monet każdorazowo. 129 00:09:24,000 --> 00:09:31,000 >> Innym rozwiązaniem, które zobaczymy, jak to pomniejszyć i przejdź do Rewizji 4, 130 00:09:31,000 --> 00:09:40,000 miał bardzo podobny początek, ale zamiast używanego div i mod 131 00:09:40,000 --> 00:09:44,000 tuż nad tutaj aby obliczyć liczbę centów. 132 00:09:44,000 --> 00:09:50,000 To czwarte liczba jest równa liczbie centów podzielonych przez 25, 133 00:09:50,000 --> 00:09:53,000 i powód to działa, ponieważ robimy całkowitą podział, 134 00:09:53,000 --> 00:09:58,000 dlatego odrzucając jakiekolwiek reszta. 135 00:09:58,000 --> 00:10:02,000 [Student] Czy musimy skomentować wyszukiwanie? 136 00:10:02,000 --> 00:10:05,000 To naprawdę zależy. 137 00:10:05,000 --> 00:10:08,000 [Student] Masz więcej niż komentowanie kodu tutaj. 138 00:10:08,000 --> 00:10:16,000 Tak, a więc istnieje kilka różnych filozofii na ten temat. 139 00:10:16,000 --> 00:10:21,000 Moja osobista filozofia jest taka, że ​​Twój kod jest rzeczywiście prawdą, 140 00:10:21,000 --> 00:10:24,000 jak twój kod jest co faktycznie wykonywany na komputerze, 141 00:10:24,000 --> 00:10:29,000 a więc kod powinien być czytelny, jak to możliwe, aby nie wymagało tyle komentarzy. 142 00:10:29,000 --> 00:10:33,000 Powiedział, że gdy robisz rzeczy, które są swego rodzaju skomplikowane matematycznie 143 00:10:33,000 --> 00:10:38,000 lub algorytmicznie, to dobrze, żeby komentować te, tak aby można 144 00:10:38,000 --> 00:10:43,000 dodać dodatkowy wymiar, dodatkowy poziom do tego, kto jest czytanie kodu. 145 00:10:43,000 --> 00:10:49,000 W tych rozwiązaniach, często są bardziej intensywnie komentuje tylko dlatego 146 00:10:49,000 --> 00:10:52,000 chcemy być w stanie dystrybuować je i ludzie je odebrać 147 00:10:52,000 --> 00:10:56,000 i przeczytać je dość łatwo. 148 00:10:56,000 --> 00:11:05,000 Ale na pewno, zgadzam się, że to jest ciężkie. 149 00:11:05,000 --> 00:11:07,000 [Student] Jednak w przypadku wątpliwości, przejdź cięższy? 150 00:11:07,000 --> 00:11:10,000 W przypadku wątpliwości, przejdź cięższe. 151 00:11:10,000 --> 00:11:17,000 Niektórzy ludzie czasami mówią 0 zwrotny czy coś takiego. 152 00:11:17,000 --> 00:11:20,000 Myślę, że to śmieszne komentarz. 153 00:11:20,000 --> 00:11:22,000 Oczywiście, że to co się dzieje. 154 00:11:22,000 --> 00:11:25,000 Nie muszę polski mi powiedzieć, że. 155 00:11:25,000 --> 00:11:28,000 Czasami ludzie będą pisać takie rzeczy "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 To trochę słodkie, ale także nie- 157 00:11:32,000 --> 00:11:35,000 to nie robi różnicy między punktami komentowania czy nie. 158 00:11:35,000 --> 00:11:41,000 Tego typu komentarze są po prostu ha, ha. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> W tym momencie, zacznijmy pracuje nad tym problemem Zestaw 3 części pytania. 161 00:11:48,000 --> 00:11:52,000 Jeśli faceci ciągnąć ten ponownie, 162 00:11:52,000 --> 00:11:55,000 jak w zeszłym tygodniu, że nie będziemy oglądać spodenki w tej sekcji. 163 00:11:55,000 --> 00:12:00,000 Damy wam robić w swoim wolnym czasie i porozmawiać o pytania. 164 00:12:00,000 --> 00:12:05,000 Ale teraz, w tej części mamy zamiar spędzić trochę więcej czasu 165 00:12:05,000 --> 00:12:11,000 mówić o mniej podstaw kodowania 166 00:12:11,000 --> 00:12:15,000 tak jak my w zeszłym tygodniu, a zamiast tego, mamy zamiar skupić się na 167 00:12:15,000 --> 00:12:22,000 nieco więcej teorii, więc mówić o binarnym wyszukiwanie i sortowanie. 168 00:12:22,000 --> 00:12:27,000 Od tych z Was, którzy śledzą razem z wykładem, 169 00:12:27,000 --> 00:12:30,000 może ktoś mi dać podsumowaniem jaka jest różnica 170 00:12:30,000 --> 00:12:35,000 pomiędzy wyszukiwania binarnego i poszukiwanie liniowego? 171 00:12:35,000 --> 00:12:37,000 Co się dzieje? Jasne. 172 00:12:37,000 --> 00:12:42,000 Liniowe szukane przeglądać każdego elementu w posortowanej liście 173 00:12:42,000 --> 00:12:45,000 jeden po drugim, przez jeden przez jeden po drugim, 174 00:12:45,000 --> 00:12:50,000 i wyszukiwanie binarne dzieli listę na 2 grupy, 175 00:12:50,000 --> 00:12:57,000 Sprawdza, czy wartości kluczy, że szukacie jest większa lub mniejsza od wartości punktu środkowego 176 00:12:57,000 --> 00:13:00,000 że po prostu znaleźć, a jeśli jest to mniejsza, to idzie z listy dolnej 177 00:13:00,000 --> 00:13:03,000 i dzieli to jeszcze raz, nie sama funkcja 178 00:13:03,000 --> 00:13:07,000 w dół, aż znajdzie środkowy być równa wartości samej. 179 00:13:07,000 --> 00:13:10,000 Racja. 180 00:13:10,000 --> 00:13:12,000 >> Dlaczego nas to obchodzi? 181 00:13:12,000 --> 00:13:20,000 Dlaczego mówimy o binarnym wyszukiwanie kontra liniowy wyszukiwania? 182 00:13:20,000 --> 00:13:22,000 Tak. 183 00:13:22,000 --> 00:13:24,000 Binarny jest dużo szybciej, więc jeśli dwukrotnie rozmiar problemu 184 00:13:24,000 --> 00:13:27,000 to ma jeszcze jeden krok, a nie dwa razy więcej. 185 00:13:27,000 --> 00:13:29,000 Dokładnie. 186 00:13:29,000 --> 00:13:31,000 To świetna odpowiedź. 187 00:13:31,000 --> 00:13:36,000 Liniowe przeszukiwanie jest bardzo sprawdzając jeden element na raz, 188 00:13:36,000 --> 00:13:39,000 a jak zobaczyłem na pierwszy dzień wykładu 189 00:13:39,000 --> 00:13:42,000 Kiedy Dawid przeszedł przez jego przykład książki telefonicznej 190 00:13:42,000 --> 00:13:45,000 i wyrwał jedną stronę książki telefonicznej w czasie 191 00:13:45,000 --> 00:13:47,000 i przechowywane robić w kółko i od nowa, 192 00:13:47,000 --> 00:13:51,000 to zajmie mu naprawdę dużo czasu, aby znaleźć kogoś w książce telefonicznej, 193 00:13:51,000 --> 00:13:55,000 o ile, oczywiście, że szuka kogoś, na samym początku alfabetu. 194 00:13:55,000 --> 00:14:00,000 Z wyszukiwaniem binarnym, można przejść o wiele szybciej, 195 00:14:00,000 --> 00:14:05,000 i to nie tylko dwa razy szybciej i 3 razy szybciej lub 4 razy szybciej. 196 00:14:05,000 --> 00:14:13,000 Ale problem staje się coraz mniejszy i mniejszy o wiele szybciej. 197 00:14:13,000 --> 00:14:17,000 Aby to zilustrować, zaczniemy mówić o tym, co się dzieje 198 00:14:17,000 --> 00:14:21,000 kiedy piszemy wyszukiwania binarnego. 199 00:14:21,000 --> 00:14:27,000 Problemem jest to, że w zasięgu ręki, jeśli mam tablicę liczb, 200 00:14:27,000 --> 00:14:40,000 powiedzmy, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 a 9 z tonę 0s po nim, 202 00:14:47,000 --> 00:14:52,000 chcemy być w stanie dowiedzieć się bardzo szybko, co jest w 203 00:14:52,000 --> 00:14:57,000 ta tablica liczb. 204 00:14:57,000 --> 00:15:00,000 Wiem, że to wydaje się trochę głupie i mało pomysłowo 205 00:15:00,000 --> 00:15:02,000 ponieważ teraz jest. 206 00:15:02,000 --> 00:15:05,000 Mamy tablicę, która nie ma bardzo wiele elementów w nim, 207 00:15:05,000 --> 00:15:08,000 i jeśli mogę zapytać jednego z was, aby dowiedzieć się, czy 208 00:15:08,000 --> 00:15:11,000 23 jest w tablicy, można to zrobić bardzo szybko 209 00:15:11,000 --> 00:15:16,000 po prostu patrząc na to i mówi mi tak lub nie. 210 00:15:16,000 --> 00:15:20,000 Analogowy do rozważenia jest sobie wyobrazić, jeśli to było, powiedzmy, 211 00:15:20,000 --> 00:15:27,000 Arkusz kalkulacyjny Excel z 10.000 wierszy, 20.000 wierszy. 212 00:15:27,000 --> 00:15:31,000 Oczywiście, można zrobić F polecenia lub sterowania F i poszukaj coś. 213 00:15:31,000 --> 00:15:33,000 Można również użyć filtrów i rzeczy wyszukiwarki 214 00:15:33,000 --> 00:15:37,000 ale gdybyś miał zajrzyj do tego pliku linia po linii po linii, 215 00:15:37,000 --> 00:15:40,000 zajmie Ci dużo czasu, aby go znaleźć. 216 00:15:40,000 --> 00:15:42,000 To trochę tak jak w przykładzie z książki telefonicznej, zbyt, gdzie 217 00:15:42,000 --> 00:15:44,000 nikt nie patrzy przez książkę telefoniczną stronie jeden na raz. 218 00:15:44,000 --> 00:15:47,000 Zwykle są one nie otworzyć w środku 219 00:15:47,000 --> 00:15:50,000 lub w przypadku wielu książek telefonicznych i słowników gdzie 220 00:15:50,000 --> 00:15:54,000 trzeba rzeczywiście to wprowadzisz pierwszą literę, 221 00:15:54,000 --> 00:16:01,000 można przerzucić do tej pierwszej litery i otworzyć i rozpocząć przechodzi tam. 222 00:16:01,000 --> 00:16:03,000 >> Przypomnij mi swojego imienia. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Jak Sam powiedział, że liniowy proces wyszukiwania będzie bardzo powolny, 225 00:16:11,000 --> 00:16:15,000 i zamiast z wyszukiwania binarnego, sposób działa to jest to, że 226 00:16:15,000 --> 00:16:21,000 za każdym razem przejść przez iteracji naszego algorytmu przeszukiwania, 227 00:16:21,000 --> 00:16:27,000 mamy zamiar podzielić listę na pół, w istocie, 228 00:16:27,000 --> 00:16:33,000 na dwa mniejsze list. 229 00:16:33,000 --> 00:16:39,000 A następnie na następnej iteracji, będziemy dzielić ją ponownie 230 00:16:39,000 --> 00:16:44,000 do innych mniejszych list. 231 00:16:44,000 --> 00:16:48,000 Jak widać, problem staje się coraz mniejszy i mniejszy 232 00:16:48,000 --> 00:16:55,000 ponieważ zachowujemy pół odrzut listy za każdym razem. 233 00:16:55,000 --> 00:16:59,000 Jak to działa discard? 234 00:16:59,000 --> 00:17:05,000 Tylko jako przypomnienie, co będziemy robić, gdy byliśmy komputer 235 00:17:05,000 --> 00:17:11,000 a my, powiedzmy, szukając numeru 5 na tej liście 236 00:17:11,000 --> 00:17:15,000 jest to, że możemy wybrać numer w środku. 237 00:17:15,000 --> 00:17:26,000 W środku tej liście, ponieważ jest 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numerów, 238 00:17:26,000 --> 00:17:32,000 dalszy wybrać na numer albo 4 pozycji lub w 5 pozycji, 239 00:17:32,000 --> 00:17:38,000 a my nazywamy to środek naszej liście. 240 00:17:38,000 --> 00:17:42,000 Wybierz numer w środku. 241 00:17:42,000 --> 00:17:51,000 Następnie, podobnie jak Sam powiedział, będziemy sprawdzać, czy liczba ta jest równa 242 00:17:51,000 --> 00:17:59,000 do numeru, który chcemy uzyskać lub naszego numeru żądanego. 243 00:17:59,000 --> 00:18:06,000 Jeśli jest równe, to znaleźliśmy go. Wygramy. 244 00:18:06,000 --> 00:18:12,000 Jeśli to nie jest równe, to istnieje kilka przypadków. 245 00:18:12,000 --> 00:18:15,000 Dwa przypadki są albo liczba musi być większa od liczby patrzymy, 246 00:18:15,000 --> 00:18:19,000 lub jest mniejsza niż. 247 00:18:19,000 --> 00:18:25,000 Jeśli jest większa, możemy przenieść się w prawo. 248 00:18:25,000 --> 00:18:33,000 A jeśli jest to mniej, ruszamy w lewo. 249 00:18:33,000 --> 00:18:41,000 A potem powtórz cały proces jeszcze raz 250 00:18:41,000 --> 00:18:48,000 albo na pół prawej lub lewej części listy. 251 00:18:48,000 --> 00:18:51,000 >> Pierwszym problemem w dzisiejszej części jest dowiedzieć 252 00:18:51,000 --> 00:18:55,000 jak możemy zacząć wyrażać to w kodzie C. 253 00:18:55,000 --> 00:18:58,000 Mamy Pseudokod tutaj. 254 00:18:58,000 --> 00:19:04,000 Co zaczniemy robić to ja wyciągnij zupełnie nową przestrzeń, 255 00:19:04,000 --> 00:19:09,000 zapisać zmiany tak, że mamy te notatki na później, 256 00:19:09,000 --> 00:19:20,000 my usunąć to wszystko, a następnie skopiować i wkleić ze zbioru problemowego 257 00:19:20,000 --> 00:19:26,000 te informacje do naszych pomieszczeń, a miejmy nadzieję, że w ten sposób nie złamać. 258 00:19:26,000 --> 00:19:28,000 Perfect. 259 00:19:28,000 --> 00:19:33,000 Jeśli faceci wszystko zrobić, skopiuj i wklej ten kod do nowego miejsca, 260 00:19:33,000 --> 00:19:43,000 do pustego jeden. 261 00:19:43,000 --> 00:19:47,000 Spróbujmy Daniela. Jeśli skompilować i uruchomić ten program, to działa? 262 00:19:47,000 --> 00:19:49,000 >> No Co on mówi? 263 00:19:49,000 --> 00:19:53,000 Mówi sterowanie osiągnie koniec funkcji non-void. 264 00:19:53,000 --> 00:19:55,000 Tak, więc pozwól mi spróbować uruchomić go. 265 00:19:55,000 --> 00:19:59,000 Czy widzieliście tego wcześniej? Czy wiesz, co to oznacza? 266 00:19:59,000 --> 00:20:01,000 Dobra, wnikliwie ten trochę. 267 00:20:01,000 --> 00:20:10,000 To powiedzenie w file.c na linii 9, kolumna 1 mamy błąd, tak jak pan powiedział, 268 00:20:10,000 --> 00:20:16,000 i mówi, że to wynikające z błędu i ostrzeżenia ostrzeżenia typu powrotnego. 269 00:20:16,000 --> 00:20:18,000 To wygląda jak coś, co się dzieje z zwracanego typu, która ma sens. 270 00:20:18,000 --> 00:20:21,000 Mamy funkcję non-void, co oznacza, że ​​mamy funkcję 271 00:20:21,000 --> 00:20:24,000 że nie powróci pustkę. 272 00:20:24,000 --> 00:20:27,000 Funkcja void jest jeden, który wygląda tak: 273 00:20:27,000 --> 00:20:35,000 void foo (), i to jest nieważne, ponieważ typ zwracany jest nieważna, 274 00:20:35,000 --> 00:20:38,000 co oznacza, że ​​jeśli coś się tutaj 275 00:20:38,000 --> 00:20:45,000 jak powrót 1, to otrzymamy błąd kompilatora dla tego. 276 00:20:45,000 --> 00:20:49,000 Jednakże, mamy non-void funkcja. 277 00:20:49,000 --> 00:20:51,000 Nasze non-void funkcja jest w tym przypadku nasza funkcja wyszukiwania 278 00:20:51,000 --> 00:20:56,000 ponieważ ma zwracanie typu BOOL. 279 00:20:56,000 --> 00:20:59,000 Kiedy mówi, że sterowanie osiągnie koniec funkcja nie pustego, 280 00:20:59,000 --> 00:21:02,000 to dlatego, że wyszukiwarka nie ma instrukcji return. 281 00:21:02,000 --> 00:21:04,000 To nie jest powrót niczego typu BOOL. 282 00:21:04,000 --> 00:21:09,000 >> Możemy to naprawić, a co myślicie 283 00:21:09,000 --> 00:21:13,000 Wyszukiwarka powinna powrócić domyślnie? 284 00:21:13,000 --> 00:21:16,000 Jaka powinna być zwracana wartość domyślna wyszukiwania? 285 00:21:16,000 --> 00:21:19,000 Bo to, co możemy umieścić na końcu. 286 00:21:19,000 --> 00:21:21,000 Charlotte, masz wszelkie-? 287 00:21:21,000 --> 00:21:23,000 Prawda czy fałsz? >> Prawda czy fałsz. 288 00:21:23,000 --> 00:21:26,000 Który? 289 00:21:26,000 --> 00:21:28,000 False. Nie wiem. 290 00:21:28,000 --> 00:21:30,000 Fałsz? Spróbujmy. 291 00:21:30,000 --> 00:21:32,000 Dlaczego chcesz powiedzieć return false? To świetna intuicja. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] I nie wiem. 293 00:21:35,000 --> 00:21:39,000 Będziemy return false w tym przypadku, ponieważ to będzie nasz domyślny 294 00:21:39,000 --> 00:21:44,000 jeśli z jakiegoś powodu lista jest pusta lub igła 295 00:21:44,000 --> 00:21:46,000 że szukasz, nie istnieje. 296 00:21:46,000 --> 00:21:50,000 Następnie na samym końcu, jeśli nie zwróci true wcześniej w tej funkcji, 297 00:21:50,000 --> 00:21:55,000 zawsze wiemy, że funkcja ta nie powie nope, to nie jest w tablicy. 298 00:21:55,000 --> 00:21:58,000 To nie jest w stogu siana. 299 00:21:58,000 --> 00:22:03,000 Jeśli teraz skompilować i uruchomić go-pozwól mi zapisać to tak, możemy wyciągnąć go. 300 00:22:03,000 --> 00:22:08,000 Jeśli teraz skompilować i uruchomić nasz program, buduje. 301 00:22:08,000 --> 00:22:12,000 Mamy naszą małą monitu. 302 00:22:12,000 --> 00:22:20,000 Gdybym uderzył 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Nie drukuje nic. Wygląda na to, że wszystko skończyło dobrze. 304 00:22:25,000 --> 00:22:35,000 Musimy wypełnić to w. 305 00:22:35,000 --> 00:22:39,000 Rozmawialiśmy o algorytmie w Pseudokod trochę temu. 306 00:22:39,000 --> 00:22:44,000 Pozwól mi zobaczyć, zapisać to, 307 00:22:44,000 --> 00:22:49,000 i będę ciągnąć ten algorytm z powrotem ponownie. 308 00:22:49,000 --> 00:22:51,000 Miejmy hit tego faceta. Nope. 309 00:22:51,000 --> 00:22:58,000 Jest. 310 00:22:58,000 --> 00:23:03,000 W jaki sposób możemy to zrobić? 311 00:23:03,000 --> 00:23:11,000 Jaki byłby dobry strategia ruszania ten kod? 312 00:23:11,000 --> 00:23:16,000 Musisz wybrać liczbę w środku. 313 00:23:16,000 --> 00:23:23,000 Jak mamy wybrać numer w środku tablicy? 314 00:23:23,000 --> 00:23:25,000 Jakieś sugestie? 315 00:23:25,000 --> 00:23:27,000 [Student] strlen podzielone przez 2. 316 00:23:27,000 --> 00:23:32,000 Strlen podzielić przez 2. To jest wielki. 317 00:23:32,000 --> 00:23:35,000 Strlen działa ze szczególnych rodzajów tablic. 318 00:23:35,000 --> 00:23:38,000 Jakie rodzaje tablic? 319 00:23:38,000 --> 00:23:44,000 Tablice String, tablice znaków. 320 00:23:44,000 --> 00:23:48,000 To ten sam rodzaj pojęcia, że ​​chcemy zastosować, 321 00:23:48,000 --> 00:23:52,000 ale nie możemy używać strlen ponieważ nie mamy tablicę znaków. 322 00:23:52,000 --> 00:23:55,000 Mamy tablicę liczb całkowitych. 323 00:23:55,000 --> 00:23:58,000 Ale co strlen uzyskać dla nas? 324 00:23:58,000 --> 00:24:01,000 Czy wiesz, co robi dla nas? 325 00:24:01,000 --> 00:24:03,000 [Student] strlen dostaje nam długości. 326 00:24:03,000 --> 00:24:05,000 Dokładnie, to robi się nam długość. 327 00:24:05,000 --> 00:24:09,000 Strlen dostaje długość tablicy dla nas. 328 00:24:09,000 --> 00:24:14,000 >> Jak dostaniemy się, że w naszym programie wyszukiwania binarnego? 329 00:24:14,000 --> 00:24:18,000 Jak można uzyskać długość tablicy? 330 00:24:18,000 --> 00:24:20,000 [Student] strlen? 331 00:24:20,000 --> 00:24:25,000 Można dostać się na długość odpowiednio sformatowanej tablicy c łańcuch z strlen. 332 00:24:25,000 --> 00:24:31,000 Problemem jest jednak to, że nie mamy tablicę ciągów. 333 00:24:31,000 --> 00:24:36,000 Jeśli spojrzymy na ten kod, mamy tę tablicę liczb całkowitych. 334 00:24:36,000 --> 00:24:38,000 Skąd wiemy, jak długo to jest? 335 00:24:38,000 --> 00:24:44,000 [Student] Czy istnieje odpowiednik jeden dla punktu końcowego, jak int l, czy coś? 336 00:24:44,000 --> 00:24:49,000 Okazuje się, że w rzeczywistości nie jest, a więc w pewnym sensie, jest to 337 00:24:49,000 --> 00:24:52,000 jedna z tych rzeczy, które po prostu warto wiedzieć o C, 338 00:24:52,000 --> 00:24:57,000 , że nie ma sposobu, aby długości tablicy 339 00:24:57,000 --> 00:24:59,000 jeśli wszystko ci dać to tablica. 340 00:24:59,000 --> 00:25:02,000 Powód to działa z ciągów, powodem strlen prace, 341 00:25:02,000 --> 00:25:06,000 dlatego, jeśli ciąg jest poprawnie sformatowany, 342 00:25:06,000 --> 00:25:12,000 będzie miał ten szczególny znak \ 0 na samym końcu. 343 00:25:12,000 --> 00:25:16,000 >> Można też sobie wyobrazić, jeśli masz źle sformatowany tekst 344 00:25:16,000 --> 00:25:20,000 i nie ma \ 0 znak tam, wtedy cała sprawa nie działa. 345 00:25:20,000 --> 00:25:22,000 [Student] można dodać \ 0? 346 00:25:22,000 --> 00:25:24,000 Możemy w tym przypadku. 347 00:25:24,000 --> 00:25:29,000 Moglibyśmy dodać jakąś \ 0 348 00:25:29,000 --> 00:25:33,000 lub jakaś wyraźna postać, a następnie użyć. 349 00:25:33,000 --> 00:25:36,000 Ale to nie jest całkiem zadziała 350 00:25:36,000 --> 00:25:40,000 ponieważ 0 \ dla char typu 351 00:25:40,000 --> 00:25:43,000 i tutaj mamy wskazówki. 352 00:25:43,000 --> 00:25:46,000 Inna sprawa, czy byliśmy użyć specjalnej wartości 353 00:25:46,000 --> 00:25:49,000 jak -1 aby zaznaczyć koniec tablicy 354 00:25:49,000 --> 00:25:54,000 potem nie mogliśmy zapisać -1 w naszych całkowitych tablic. 355 00:25:54,000 --> 00:25:56,000 Chcemy być zatrzymany. 356 00:25:56,000 --> 00:26:00,000 Okazuje się, że jedynym sposobem, aby uzyskać długość 357 00:26:00,000 --> 00:26:03,000 z tablicy w języku C jest faktycznie pamiętam 358 00:26:03,000 --> 00:26:08,000 gdy go skonfigurować, a następnie przekazać ją wokół z tablicy 359 00:26:08,000 --> 00:26:14,000 tak, że gdy mam funkcji, która ma zamiar popracować 360 00:26:14,000 --> 00:26:18,000 na tablicy liczb całkowitych lub pływaków lub podwaja czy co tam jeszcze, 361 00:26:18,000 --> 00:26:22,000 Również trzeba dać funkcję tablicy na długość, 362 00:26:22,000 --> 00:26:26,000 i to jest dokładnie to, co zrobiliśmy tutaj w funkcji wyszukiwania. 363 00:26:26,000 --> 00:26:30,000 Jeśli spojrzeć, co zrobiliśmy, gdy przechodzimy w naszej tablicy tutaj 364 00:26:30,000 --> 00:26:36,000 również przekazać w długości, rozmiaru. 365 00:26:36,000 --> 00:26:41,000 To po prostu zdarza się, że nazwaliśmy tę zmienną tutaj 366 00:26:41,000 --> 00:26:43,000 ten parametr lub argument. 367 00:26:43,000 --> 00:26:46,000 Jest to tak zwana funkcja w listę argumentów lub listę parametrów, 368 00:26:46,000 --> 00:26:51,000 i te nazywane są również argumenty lub parametry. 369 00:26:51,000 --> 00:26:53,000 Ludzie używają różnych terminów w różnych czasach. 370 00:26:53,000 --> 00:26:55,000 Czasem zamienić je sobie. 371 00:26:55,000 --> 00:27:00,000 Tak się składa, że ​​to zmienna o nazwie podobnie 372 00:27:00,000 --> 00:27:03,000 do tego # define tutaj. 373 00:27:03,000 --> 00:27:06,000 Ale to nie to samo. 374 00:27:06,000 --> 00:27:11,000 Kapitalizacja ma znaczenie. 375 00:27:11,000 --> 00:27:14,000 >> Jeśli spojrzeć na to, co dzieje się tutaj, deklarujemy 376 00:27:14,000 --> 00:27:18,000 nasz int tablica, której kiedykolwiek numerów. 377 00:27:18,000 --> 00:27:23,000 Daliśmy mu nasz rozmiar, który odpowiada naszej # define się na szczycie. 378 00:27:23,000 --> 00:27:27,000 To będzie 8. 379 00:27:27,000 --> 00:27:35,000 A potem, kiedy wywołujemy naszą funkcję wyszukiwania na dole, 380 00:27:35,000 --> 00:27:40,000 mijamy liczby chcemy wyszukać, co mamy monit, 381 00:27:40,000 --> 00:27:43,000 dostał od użytkownika. 382 00:27:43,000 --> 00:27:46,000 Mijamy w tablicy, te liczby, 383 00:27:46,000 --> 00:27:51,000 , a następnie również zdać w wielkości tablicy 384 00:27:51,000 --> 00:27:57,000 i wartość wielkości 8 zostaje zmagazynowany 385 00:27:57,000 --> 00:28:01,000 lub przekazywane do tej zmiennej całkowitej o nazwie wielkości. 386 00:28:01,000 --> 00:28:08,000 Mamy rozmiar tablicy. 387 00:28:08,000 --> 00:28:11,000 Teraz, jeśli chcemy wrócić do tego, co mówiliśmy wcześniej, 388 00:28:11,000 --> 00:28:14,000 Myślę, że Missy wychowany punkt, że to, co musieliśmy zrobić, to długość tablicy 389 00:28:14,000 --> 00:28:20,000 i podzielić przez 2, a to da nam punkt środkowy. 390 00:28:20,000 --> 00:28:22,000 Zobaczmy. 391 00:28:22,000 --> 00:28:25,000 Czy mogę mieć ktoś napisać to i zapisać je w przestrzeni? 392 00:28:25,000 --> 00:28:27,000 Jak o Leila? 393 00:28:27,000 --> 00:28:31,000 Czy mogę napisać to w? 394 00:28:31,000 --> 00:28:35,000 Napisz pierwszą linię, gdzie wziąć długość tablicy i dostać punkt środkowy 395 00:28:35,000 --> 00:28:41,000 i zapisać go w nowej zmiennej. 396 00:28:41,000 --> 00:28:44,000 Dam ci kilka sekund. Czy jesteś gotowy? 397 00:28:44,000 --> 00:28:46,000 [Student niesłyszalne] 398 00:28:46,000 --> 00:28:50,000 Jasne, mógłbym obliczyć punkt środkowy 399 00:28:50,000 --> 00:28:55,000 macierzy haystack wewnątrz funkcji wyszukiwania 400 00:28:55,000 --> 00:29:03,000 przy długości tablicy stogu siana, które jest zmienne wielkości? 401 00:29:03,000 --> 00:29:08,000 Nic trudne tutaj. 402 00:29:08,000 --> 00:29:12,000 [Leila] Just rozmiar / 2 i po prostu- 403 00:29:12,000 --> 00:29:17,000 I zapisz go i naciśnij przycisk Zapisz się tutaj, na górze, 404 00:29:17,000 --> 00:29:19,000 i będziemy ciągnąć ją. 405 00:29:19,000 --> 00:29:22,000 Perfect. 406 00:29:22,000 --> 00:29:28,000 Proszę bardzo. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Jak jest, będzie to skompilować? 408 00:29:30,000 --> 00:29:32,000 [Leila] Nie, to musi być wyższa. 409 00:29:32,000 --> 00:29:34,000 [Nate] Tak, więc co trzeba zrobić? 410 00:29:34,000 --> 00:29:36,000 [Leila] Podoba int środkowego czy coś. 411 00:29:36,000 --> 00:29:41,000 Awesome. Tak, zróbmy to, int midpoint = rozmiar. 412 00:29:41,000 --> 00:29:44,000 Będzie to skompilować? 413 00:29:44,000 --> 00:29:47,000 Usuńmy ten komentarz i dostać go z drogi. 414 00:29:47,000 --> 00:29:50,000 Co nie będzie kompilować na ten temat? 415 00:29:50,000 --> 00:29:52,000 Nie robimy nic z liczby całkowitej, 416 00:29:52,000 --> 00:29:55,000 więc trzeba go wydrukować lub coś takiego. 417 00:29:55,000 --> 00:29:58,000 Tak, dokładnie. 418 00:29:58,000 --> 00:30:00,000 Dostaniemy nieużywaną zmienną. 419 00:30:00,000 --> 00:30:02,000 Co jeszcze nie będzie działać na ten temat? 420 00:30:02,000 --> 00:30:06,000 Myślę, że powiedział coś, Sam. Średnikami. 421 00:30:06,000 --> 00:30:08,000 Tak mi brakuje tych średników. 422 00:30:08,000 --> 00:30:14,000 To będzie stałą rzeczą w trakcie trwania kadencji. 423 00:30:14,000 --> 00:30:17,000 Ostatnią rzeczą zrobię to włożę jakiś spacje po obu stronach 424 00:30:17,000 --> 00:30:23,000 tego operatora tutaj, ponieważ jest to zazwyczaj jak to robimy 425 00:30:23,000 --> 00:30:26,000 zgodnie z naszym przewodniku. 426 00:30:26,000 --> 00:30:29,000 Mamy punkt środkowy naszej tablicy. 427 00:30:29,000 --> 00:30:32,000 Teraz, jeśli pamiętamy, z powrotem do naszego algorytmu, 428 00:30:32,000 --> 00:30:37,000 co drugi krok, że mieliśmy do czynienia, gdy będziemy mieli punkt środkowy? 429 00:30:37,000 --> 00:30:42,000 [Student] Jeśli jest większy [niesłyszalne]. 430 00:30:42,000 --> 00:30:48,000 Tak, więc musimy zrobić jakieś porównania, i co my tu porównanie? 431 00:30:48,000 --> 00:30:53,000 Powiedziałeś, że jeśli jest ona większa niż. Co jest w tym zdaniu na myśli? 432 00:30:53,000 --> 00:30:57,000 Numer, który pojawia się, jeśli jest to więcej niż w połowie, a następnie przejść do tablicy? 433 00:30:57,000 --> 00:31:05,000 Dokładnie, więc numer, który pojawia się, gdy we- 434 00:31:05,000 --> 00:31:10,000 Igła, więc jesteśmy w stosunku do igły, 435 00:31:10,000 --> 00:31:12,000 i co mamy porównanie z igłą? 436 00:31:12,000 --> 00:31:15,000 Ponieważ igły jest to, czego szukasz. 437 00:31:15,000 --> 00:31:18,000 Mamy porównanie jej dostać się do środkowego. 438 00:31:18,000 --> 00:31:21,000 >> Ale czy jest sens, aby sprawdzić, 439 00:31:21,000 --> 00:31:27,000 jeśli igła = midpoint? 440 00:31:27,000 --> 00:31:32,000 Czy to ma sens? 441 00:31:32,000 --> 00:31:35,000 Czy ktoś się nie zgadza? 442 00:31:35,000 --> 00:31:40,000 Dajmy mu spróbować, jeśli (igła == midpoint). 443 00:31:40,000 --> 00:31:42,000 [Student] Czy printf go znalazłeś. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Znaleźliśmy go \ n"); 445 00:31:51,000 --> 00:31:56,000 Inaczej-Jestem zamiar zacząć robić coś innego tutaj. 446 00:31:56,000 --> 00:32:00,000 Mam zamiar rozpocząć wprowadzanie nawiasy klamrowe wokół if cały czas 447 00:32:00,000 --> 00:32:05,000 tylko dlatego, że jeśli dodamy więcej rzeczy, a następnie 448 00:32:05,000 --> 00:32:07,000 nie mamy do kompilatorów. 449 00:32:07,000 --> 00:32:09,000 Tak, Sam. Masz rację. 450 00:32:09,000 --> 00:32:12,000 Problem jest, że punkt środkowy reprezentuje pozycję w tablicy, 451 00:32:12,000 --> 00:32:15,000 ale można je dostać do reprezentacji wartości w tej pozycji tablicy. 452 00:32:15,000 --> 00:32:17,000 To świetny punkt. 453 00:32:17,000 --> 00:32:19,000 Czy wszyscy usłyszeć, co powiedział Sam? 454 00:32:19,000 --> 00:32:22,000 Powiedział, że jak to jest punkt środkowy 455 00:32:22,000 --> 00:32:28,000 reprezentuje tylko pozycję w tablicy, ale nie jest to rzeczywisty element w tablicy. 456 00:32:28,000 --> 00:32:30,000 Jeśli myślisz o kodzie jak pisemnej teraz, 457 00:32:30,000 --> 00:32:35,000 jeśli przyjrzymy się tej tablicy na dół, który ma 8 elementów w nim, 458 00:32:35,000 --> 00:32:39,000 co jest wartością midpoint będzie w tej funkcji? 459 00:32:39,000 --> 00:32:41,000 [Student] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Jeśli spojrzymy na liczbę 4 - 462 00:32:51,000 --> 00:32:54,000 i możemy po prostu uruchomić ten kod i umieścić trochę smutną twarz tutaj 463 00:32:54,000 --> 00:32:58,000 dlatego, że nie uważają, że-jeśli ten kod 464 00:32:58,000 --> 00:33:04,000 jak to jest teraz, przesyłając go, budynek, niech przewijać w dół, 465 00:33:04,000 --> 00:33:09,000 i jeśli spojrzymy na liczbę 4, 466 00:33:09,000 --> 00:33:18,000 okazało się to, ale nie dostaliśmy to printf tak. 467 00:33:18,000 --> 00:33:23,000 Jednym z powodów jest to, że nie zwraca true, 468 00:33:23,000 --> 00:33:26,000 ale naprawdę znaleźć numer 4? 469 00:33:26,000 --> 00:33:28,000 I Sam mówi nie. 470 00:33:28,000 --> 00:33:31,000 Co widzimy? 471 00:33:31,000 --> 00:33:35,000 Naprawdę znaleźć punkt środkowy, który jeśli spojrzymy na tablicy na dole, 472 00:33:35,000 --> 00:33:38,000 to będzie elementem o indeksie 4, że mamy do czynienia, 473 00:33:38,000 --> 00:33:42,000 który jest 23. 474 00:33:42,000 --> 00:33:46,000 >> Jak możemy rzeczywiście dostać ten element w połowie 475 00:33:46,000 --> 00:33:48,000 i to nie tylko midpoint sama? 476 00:33:48,000 --> 00:33:52,000 [Student] Chcielibyśmy wprowadzić znak, czy coś? 477 00:33:52,000 --> 00:33:55,000 Co by to zrobić, po prostu z ciekawości? 478 00:33:55,000 --> 00:33:57,000 Możesz rozwinąć trochę więcej? 479 00:33:57,000 --> 00:34:02,000 Trzeba przekształcić pozycję w liczbie, 480 00:34:02,000 --> 00:34:05,000 więc masz zrobić jakiś związek-Myślę, że to znak, ale to nie może być. 481 00:34:05,000 --> 00:34:07,000 Tak, to dobry punkt. 482 00:34:07,000 --> 00:34:12,000 Robiliśmy dużo tego stanowiska do konwersji znaków, znaki te, 483 00:34:12,000 --> 00:34:14,000 W dwóch pierwszych problemów. 484 00:34:14,000 --> 00:34:18,000 Okazuje się, że tutaj jest to podobne do prawie 485 00:34:18,000 --> 00:34:24,000 dostępu do Ith charakter w ciągu, jeśli to ma sens. 486 00:34:24,000 --> 00:34:30,000 Tutaj chcemy uzyskać dostęp do elementu środkowego. 487 00:34:30,000 --> 00:34:34,000 W jaki sposób możemy to zrobić? 488 00:34:34,000 --> 00:34:39,000 Kevin, masz jakieś propozycje w jaki sposób możemy to zrobić? 489 00:34:39,000 --> 00:34:44,000 Można zrobić stóg, open bracket, mid, zamknięty nawias. 490 00:34:44,000 --> 00:34:46,000 Można napisać, że dla nas? 491 00:34:46,000 --> 00:34:51,000 Zapisz go w tutaj, i będziemy ciągnąć tę górę. 492 00:34:51,000 --> 00:34:56,000 Patrzymy na tej linii 9, 493 00:34:56,000 --> 00:34:59,000 i mamy świadomość, że nie chcemy, aby porównać igłę do punktu środkowego, 494 00:34:59,000 --> 00:35:03,000 , ale zamiast tego, chcemy porównać igłę 495 00:35:03,000 --> 00:35:07,000 do elementu, w środkowym położeniu w naszej tablicy stogu siana. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Proszę bardzo. 498 00:35:12,000 --> 00:35:15,000 Tak, to wygląda całkiem nieźle, jeśli (igła == stóg [midpoint]). 499 00:35:15,000 --> 00:35:18,000 Znaleźliśmy ją. 500 00:35:18,000 --> 00:35:22,000 Jeśli teraz uruchomić kod we'll plecy się trochę- 501 00:35:22,000 --> 00:35:26,000 kompiluje, uruchamia, a teraz, jeśli spojrzymy na 4, 502 00:35:26,000 --> 00:35:30,000 nie znaleźliśmy, bo teraz jesteśmy rzeczywiście coraz numer 23. 503 00:35:30,000 --> 00:35:33,000 Dostajemy wartość za 23, i to, co mamy w stosunku do naszej igły. 504 00:35:33,000 --> 00:35:35,000 Ale to dobrze. To krok w dobrym kierunku. 505 00:35:35,000 --> 00:35:37,000 >> To, co staramy się robić. 506 00:35:37,000 --> 00:35:40,000 Nie chcemy, aby porównać igłę przed pozycji w tablicy 507 00:35:40,000 --> 00:35:44,000 ale raczej w stosunku do rzeczywistych elementów w tablicy. 508 00:35:44,000 --> 00:35:49,000 Jeśli spojrzymy ponownie teraz na kolejny krok w naszym algorytmie, 509 00:35:49,000 --> 00:35:51,000 jaki jest następny krok? 510 00:35:51,000 --> 00:35:57,000 Leila już wspomniano krótko. 511 00:35:57,000 --> 00:36:00,000 [Student] Sprawdź, czy jest większa lub mniejsza niż, a następnie zdecydować, w którą stronę się ruszyć. 512 00:36:00,000 --> 00:36:03,000 [Nate] Tak, tak, w jaki sposób to zrobić? 513 00:36:03,000 --> 00:36:07,000 Czy można umieścić w jakimś-Będę zapisać zmiany, 514 00:36:07,000 --> 00:36:13,000 , a następnie, jeśli umieścić w niektórych liniach, że tego nie zrobi. 515 00:36:13,000 --> 00:36:15,000 Tak, Charlotte. >> Mam pytanie. 516 00:36:15,000 --> 00:36:19,000 Czy nie powinno być midpoint - 1, ponieważ pierwszą rzeczą jest 517 00:36:19,000 --> 00:36:26,000 to 0 indeksowane, więc jeśli do 4, to nie jest faktycznie charakter szukamy? 518 00:36:26,000 --> 00:36:30,000 Tak, drugi problem, że jest, 519 00:36:30,000 --> 00:36:35,000 że to świetny chwyt, bo to, co się dzieje do końca się dzieje ewentualnie 520 00:36:35,000 --> 00:36:42,000 jeśli będziemy w ruchu, a my nie zawsze dostosować początkowo? 521 00:36:42,000 --> 00:36:46,000 Chyba to, co możemy w końcu robić próbuje uzyskać dostęp do 522 00:36:46,000 --> 00:36:49,000 Element na 8. pozycji tablicy 523 00:36:49,000 --> 00:36:53,000 która w tym przypadku nie istnieje. 524 00:36:53,000 --> 00:36:56,000 My chcemy zrobić jakieś księgowania fakt 525 00:36:56,000 --> 00:36:59,000 że mamy pewne zera indeksowanie. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Przepraszam, miałem na myśli środkowy - 1 w nawiasach kwadratowych. 527 00:37:05,000 --> 00:37:08,000 Możemy to zrobić. 528 00:37:08,000 --> 00:37:10,000 Wrócimy do tej kwestii za chwilę. 529 00:37:10,000 --> 00:37:13,000 Kiedy zaczynają się do rzeczywistej zapętlenia, 530 00:37:13,000 --> 00:37:16,000 wtedy będziemy naprawdę zobaczyć to wchodzą w grę. 531 00:37:16,000 --> 00:37:21,000 W chwili obecnej, możemy to zrobić, ale jesteś całkowicie w porządku. 532 00:37:21,000 --> 00:37:28,000 Że zero indeksowanie będzie miał wpływ, że musimy uwzględnić. 533 00:37:28,000 --> 00:37:30,000 Zobaczmy. 534 00:37:30,000 --> 00:37:34,000 >> Jak jest powyżej i poniżej,? 535 00:37:34,000 --> 00:37:36,000 [Student] mam jak zrobić powyżej i poniżej części. 536 00:37:36,000 --> 00:37:41,000 Po prostu nie byłem pewien, co do drukowania, jeśli okaże się, że jest to mniej niż w połowie stogu siana lub większa. 537 00:37:41,000 --> 00:37:43,000 Tutaj można zapisać co I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Tak, jeśli zapiszesz, co masz, i będziemy ciągnąć ją. 539 00:37:47,000 --> 00:37:49,000 Proszę bardzo. 540 00:37:49,000 --> 00:37:51,000 [Student] I umieścić znaki zapytania na to, czego nie wiem. 541 00:37:51,000 --> 00:37:54,000 [Nate] To wygląda świetnie. 542 00:37:54,000 --> 00:37:58,000 Tutaj mamy znaki zapytania, bo jeszcze nie wiem 543 00:37:58,000 --> 00:38:06,000 co będziemy robić jeszcze dość. 544 00:38:06,000 --> 00:38:12,000 Co mielibyśmy zrobić-ups, mamy kilka szelki wszystko funkowe na nas. 545 00:38:12,000 --> 00:38:15,000 Będziemy skorygować te szelki. 546 00:38:15,000 --> 00:38:19,000 Proszę bardzo. 547 00:38:19,000 --> 00:38:22,000 A więc co chcemy robić, zgodnie z naszym algorytmie, 548 00:38:22,000 --> 00:38:27,000 jeśli nie możemy znaleźć igłę? 549 00:38:27,000 --> 00:38:32,000 Powiedzieć w przypadku, że igła jest mniej niż to, co mamy do czynienia. Kevin. 550 00:38:32,000 --> 00:38:34,000 Patrzeć tylko na lewej połowie. 551 00:38:34,000 --> 00:38:40,000 Prawo, tak więc możemy umieścić komentarz w tutaj, że mówi: "spójrz na lewej połowie." 552 00:38:40,000 --> 00:38:46,000 A jeśli igła jest większa niż stogu siana w połowie, co chcemy zrobić? 553 00:38:46,000 --> 00:38:48,000 [Student] Następnie spojrzeć na prawej połowie. 554 00:38:48,000 --> 00:38:53,000 Spójrz na prawej połowie, "spojrzeć na prawej połowie." 555 00:38:53,000 --> 00:38:58,000 Nie zbyt brudny. 556 00:38:58,000 --> 00:39:05,000 Ok, więc w tym momencie, sprawy wyglądają całkiem nieźle. 557 00:39:05,000 --> 00:39:13,000 Problem z kodem, jak pisemnej jest co? 558 00:39:13,000 --> 00:39:15,000 [Student] Nie masz punkty końcowe dla połowy. 559 00:39:15,000 --> 00:39:18,000 Racja, nie mamy punkty końcowe dla połowy. 560 00:39:18,000 --> 00:39:20,000 Również tylko będzie przejść przez to raz. 561 00:39:20,000 --> 00:39:23,000 My tylko będzie wyglądać w jednym punkcie środkowym. 562 00:39:23,000 --> 00:39:27,000 Albo element jest tam, czy to nie jest. 563 00:39:27,000 --> 00:39:34,000 W celu uzupełnienia tego, musimy zrobić jakieś powtarzanie. 564 00:39:34,000 --> 00:39:39,000 Musimy powtarzać, aż okaże się, że 565 00:39:39,000 --> 00:39:43,000 albo element jest tam bo mamy zawężony i wreszcie znalazłem, 566 00:39:43,000 --> 00:39:46,000 czy to nie jest tam, bo szukałem przez wszystkie rzeczy, 567 00:39:46,000 --> 00:39:52,000 w odpowiednich połówek tablicy i znaleziono, że nie ma tam. 568 00:39:52,000 --> 00:39:56,000 >> Ilekroć mamy to powtórzenie dzieje, co będziemy w użyciu? 569 00:39:56,000 --> 00:39:58,000 [Student] pętla. 570 00:39:58,000 --> 00:40:00,000 Jakiś rodzaj pętli. Tak. 571 00:40:00,000 --> 00:40:03,000 [Student] możemy zrobić do-while i go zrobić, a następnie przy 572 00:40:03,000 --> 00:40:10,000 Igła nie nie równa-Jestem pewien, gdzie idę z tym. 573 00:40:10,000 --> 00:40:18,000 Ale tak jakby zrobić dopóki nie jest równa wartości, że dane wejściowe. 574 00:40:18,000 --> 00:40:21,000 Tak, więc zobaczymy, jak można to napisać sam? 575 00:40:21,000 --> 00:40:23,000 Mówiłeś, użyjmy do-while. 576 00:40:23,000 --> 00:40:26,000 Gdzie zrobić początek? 577 00:40:26,000 --> 00:40:33,000 [Student] Zaraz po wielkości / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Dobra, i co my teraz zrobimy? 579 00:40:42,000 --> 00:40:44,000 Będziemy wypełnić chwilę później. 580 00:40:44,000 --> 00:40:46,000 Co my teraz zrobimy? 581 00:40:46,000 --> 00:40:49,000 [Student] Nie chcemy robić wszystkie rzeczy mamy w razie części? 582 00:40:49,000 --> 00:40:52,000 [Nate] Czy to wszystko, to świetnie. 583 00:40:52,000 --> 00:40:55,000 Kopiuj i wklej. 584 00:40:55,000 --> 00:40:59,000 Oh, man. 585 00:40:59,000 --> 00:41:03,000 Zobaczmy, czy to działa, jeśli możemy to ponad tab. 586 00:41:03,000 --> 00:41:08,000 Beautiful. 587 00:41:08,000 --> 00:41:16,000 Okay, a my zapisać to tak, macie to. 588 00:41:16,000 --> 00:41:21,000 Dobra, i mamy zamiar to zrobić, gdy- 589 00:41:21,000 --> 00:41:25,000 co było warunkiem, gdy byłeś po? 590 00:41:25,000 --> 00:41:31,000 [Student] Podczas gdy igła nie równa, tak jak wykrzyknikiem. 591 00:41:31,000 --> 00:41:37,000 Ale nie jestem pewien, co to dokładnie jest jeszcze. 592 00:41:37,000 --> 00:41:39,000 [Nate] Tak, to jest jeden sposób, aby to zrobić. 593 00:41:39,000 --> 00:41:41,000 Sam, masz komentarz? 594 00:41:41,000 --> 00:41:43,000 [Sam] Pamiętam, kiedy patrzyłem na filmy, 595 00:41:43,000 --> 00:41:48,000 Zrobiłem zrzut ekranu z jednej, jak wtedy, gdy robiliśmy Pseudokod dla niego, 596 00:41:48,000 --> 00:41:52,000 był jakiś związek między max i min. 597 00:41:52,000 --> 00:41:58,000 Myślę, że to było coś jakby max jest zawsze mniej niż min. 598 00:41:58,000 --> 00:42:00,000 Rozumiem. 599 00:42:00,000 --> 00:42:04,000 [Sam] Albo jak jeśli max jest nie mniejsza niż min lub coś takiego, 600 00:42:04,000 --> 00:42:06,000 bo to znaczy, że został przeszukany wszystko. 601 00:42:06,000 --> 00:42:13,000 >> Tak, i co to brzmi max i min były na myśli? 602 00:42:13,000 --> 00:42:16,000 [Sam] Wartości że-liczby całkowite, że się zmieni 603 00:42:16,000 --> 00:42:18,000 w stosunku do których możemy umieścić punkt środkowy. 604 00:42:18,000 --> 00:42:20,000 Dokładnie. 605 00:42:20,000 --> 00:42:24,000 [Sam] W tym momencie, to będzie [niesłyszalne] obliczyć max i min. 606 00:42:24,000 --> 00:42:29,000 Punkt środkowy jest to max i pomysł min. 607 00:42:29,000 --> 00:42:35,000 Czy to ma sens do ludzi? 608 00:42:35,000 --> 00:42:39,000 Jeżeli mielibyśmy zacząć patrzeć na jaki mamy zamiar to zrobić iteracji, 609 00:42:39,000 --> 00:42:43,000 masz całkowitą rację, że chcemy użyć jakiegoś-while pętli. 610 00:42:43,000 --> 00:42:49,000 Ale myślę, że jeśli będziemy pamiętać, co dzieje się w miejscu, z tej tablicy 611 00:42:49,000 --> 00:42:53,000 i to, co faktycznie dzieje się-Jestem zamiar napisać tutaj- 612 00:42:53,000 --> 00:42:58,000 w pierwszej iteracji binarnego wyszukiwania, mamy- 613 00:42:58,000 --> 00:43:05,000 Zamierzam użyć B i E do oznaczenia początku. 614 00:43:05,000 --> 00:43:10,000 A potem koniec naszej tablicy. 615 00:43:10,000 --> 00:43:14,000 Wiemy, że na początku jest na 4 prawa tutaj, 616 00:43:14,000 --> 00:43:18,000 i wiemy, że koniec jest na 108. 617 00:43:18,000 --> 00:43:23,000 Powiedzieć, że jesteśmy wyszukanie numeru 15. 618 00:43:23,000 --> 00:43:27,000 Pierwszy raz to zrobić, jak widzieliśmy wcześniej, 619 00:43:27,000 --> 00:43:30,000 midpoint jest albo będzie 16 lub 23 620 00:43:30,000 --> 00:43:34,000 w zależności od sposobu obliczania rzeczy. 621 00:43:34,000 --> 00:43:37,000 Ponieważ dzieląc równo w połowie da nam tę przestrzeń 622 00:43:37,000 --> 00:43:42,000 między 16 i 23, nie można równo podzielić 623 00:43:42,000 --> 00:43:47,000 lub podzielić go i dostać w prawdziwego środkowego. 624 00:43:47,000 --> 00:43:49,000 Przyjrzymy 16. 625 00:43:49,000 --> 00:43:55,000 My sobie sprawę, "Hej, 16> 15, że szukamy". 626 00:43:55,000 --> 00:43:59,000 Aby następnie spójrz na lewej połowie tablicy 627 00:43:59,000 --> 00:44:03,000 co będziemy w końcu robić to odrzucając 628 00:44:03,000 --> 00:44:07,000 cała górna część 629 00:44:07,000 --> 00:44:16,000 i mówi: "Dobra, teraz nasz końcowy będzie tutaj". 630 00:44:16,000 --> 00:44:22,000 Następna iteracja naszej pętli, jesteśmy teraz patrząc na tej tablicy 631 00:44:22,000 --> 00:44:25,000 faktycznie po wyrzucić tę część, bo teraz 632 00:44:25,000 --> 00:44:30,000 jeśli bierzemy punkt środkowy jako różnica pomiędzy początkiem i końcem, 633 00:44:30,000 --> 00:44:34,000 odnajdujemy nasz midpoint być 8, 634 00:44:34,000 --> 00:44:40,000 które możemy następnie przetestować 8 aby zobaczyć, gdzie to jest w stosunku do liczby szukamy, 635 00:44:40,000 --> 00:44:44,000 15, okaże się, że 15 jest większa, 636 00:44:44,000 --> 00:44:49,000 więc musimy przenieść się do prawej części listy, 637 00:44:49,000 --> 00:44:51,000 co wiemy, bo jesteśmy ludźmi i możemy go zobaczyć. 638 00:44:51,000 --> 00:44:54,000 Wiemy, że prawa część będzie gdzie go znaleźć, 639 00:44:54,000 --> 00:45:01,000 ale komputer nie wie, że to co będziemy robić to faktycznie dowiemy 640 00:45:01,000 --> 00:45:04,000 za to w górę, a teraz początek i koniec 641 00:45:04,000 --> 00:45:11,000 są tym samym miejscu, to staje się punkt środkowy tylko numer na liście w tym momencie, 642 00:45:11,000 --> 00:45:16,000 który jest 15, a my już ją znalazł. 643 00:45:16,000 --> 00:45:21,000 Czy to rzucić trochę światła na którym cała ta notacja min max i będzie, 644 00:45:21,000 --> 00:45:24,000 śledzenie końców tablicy, aby dowiedzieć się, 645 00:45:24,000 --> 00:45:35,000 jak zawęzić rzeczy w dół? 646 00:45:35,000 --> 00:45:42,000 >> Co by się stało, gdyby to nie była równa 15 teraz? 647 00:45:42,000 --> 00:45:52,000 Co zrobić, jeśli szukaliśmy 15 i zamiast tego numeru były również 16? 648 00:45:52,000 --> 00:45:54,000 Chcemy powiedzieć: "Och, to jest większa. 649 00:45:54,000 --> 00:45:57,000 Chcemy wrócić do lewej ". 650 00:45:57,000 --> 00:46:01,000 I chcemy przenieść nasze e prawo, 651 00:46:01,000 --> 00:46:06,000 W tym momencie mamy punkt końcowy, które byłoby sprzeczne. 652 00:46:06,000 --> 00:46:09,000 Nie będzie w stanie znaleźć wszystkie inne elementy 653 00:46:09,000 --> 00:46:13,000 bo teraz mamy punkt końcowy i nasz punkt początkowy, 654 00:46:13,000 --> 00:46:16,000 nasz max i nasz min, teraz odwrócony. 655 00:46:16,000 --> 00:46:23,000 Mamy przeszukiwać całej tablicy. Nie możemy niczego znaleźć. 656 00:46:23,000 --> 00:46:27,000 To jest punkt, w którym chcielibyśmy powiedzieć: "Dobra, mamy zamiar zatrzymać tego algorytmu. 657 00:46:27,000 --> 00:46:34,000 Nie znaleziono niczego. Wiemy, że nie jest tutaj. " 658 00:46:34,000 --> 00:46:36,000 Jak to się dzieje? 659 00:46:36,000 --> 00:46:40,000 [Student] Jak dokładnie działa komputer przełączyć koniec? 660 00:46:40,000 --> 00:46:45,000 Jak koniec skończyć przed początkiem? 661 00:46:45,000 --> 00:46:48,000 End kończy się przed rozpoczęciem 662 00:46:48,000 --> 00:46:54,000 ze względu na matematyce, że będziemy robić za każdym razem to zrobić. 663 00:46:54,000 --> 00:47:00,000 Sposób wymiany jest, jeśli spojrzeć na po raz pierwszy robimy to swapa 664 00:47:00,000 --> 00:47:03,000 gdzie mamy początek na 4 i koniec 665 00:47:03,000 --> 00:47:13,000 w dół na 108 i nasz punkt środkowy, powiedzmy, w 16 - 666 00:47:13,000 --> 00:47:20,000 Mam zamiar przywrócić to z powrotem do 15-jeśli patrzymy na 15, 667 00:47:20,000 --> 00:47:25,000 wiedzieliśmy, że to, co zrobiliśmy, gdy zameldowaliśmy się 16 i zobaczyłem, że był większy 668 00:47:25,000 --> 00:47:28,000 i chciał odrzucić całą prawą część listy, 669 00:47:28,000 --> 00:47:36,000 widzieliśmy, że to, co chcieliśmy zrobić, to przenieść ten e tutaj. 670 00:47:36,000 --> 00:47:44,000 Skutecznie, e zostaliśmy przeniesieni do jednego przed środkowego. 671 00:47:44,000 --> 00:47:48,000 Podobnie, gdy zrobiliśmy to iteracji algorytmu 672 00:47:48,000 --> 00:47:51,000 i był na 8 punkt środkowy, 673 00:47:51,000 --> 00:47:55,000 okazało się, że 8 <15, więc chcieliśmy, aby przenieść b. 674 00:47:55,000 --> 00:48:00,000 jeden obok środkowego. 675 00:48:00,000 --> 00:48:07,000 Teraz, początek i koniec są zarówno razem w tym 15. 676 00:48:07,000 --> 00:48:10,000 >> Gdybyśmy dzieje szukać jakiejś innej wartości, a nie 15, 677 00:48:10,000 --> 00:48:14,000 lub, jeśli zamiast 15 było już 16, 678 00:48:14,000 --> 00:48:20,000 nie stwierdzono, że e chcemy przenieść jeden przed środkowym. 679 00:48:20,000 --> 00:48:33,000 E teraz odwrócony będzie nie mniej niż w B. 680 00:48:33,000 --> 00:48:39,000 Przejdźmy przez jak faktycznie kończy się ten algorytm kodowania. 681 00:48:39,000 --> 00:48:44,000 Wiemy, że chcemy mieć to obliczenie środkowego. 682 00:48:44,000 --> 00:48:48,000 Wiemy również, że chcemy śledzić początek i koniec tablicy 683 00:48:48,000 --> 00:48:51,000 naszej aktualnej tablicy, dzięki czemu możemy dowiedzieć się 684 00:48:51,000 --> 00:48:56,000 w przypadku gdy lewa połowa liście i gdzie prawa połowa jest na liście. 685 00:48:56,000 --> 00:49:03,000 Robimy to albo z rozpoczęcia i zakończenia, 686 00:49:03,000 --> 00:49:07,000 lub możemy nazwać ich min i max. 687 00:49:07,000 --> 00:49:10,000 Użyję rozpoczyna i kończy się tym razem. 688 00:49:10,000 --> 00:49:15,000 Kiedy zaczynamy, jeśli spojrzymy na nasz przykład tu, 689 00:49:15,000 --> 00:49:20,000 nasz początek był ustawiony na początku tablicy, jako naturalne. 690 00:49:20,000 --> 00:49:25,000 Co indeks to było? Jakie powinny być nasze zaczynają być? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Tak, więc możemy ustawić go równa stogu [0]. 694 00:49:37,000 --> 00:49:40,000 Problem jest jednak to, że nie daje nam położenie pierwszego elementu. 695 00:49:40,000 --> 00:49:45,000 To daje wskaźnik pierwszego elementu lub wartości rzeczywistej w tym pierwszym położeniu. 696 00:49:45,000 --> 00:49:47,000 [Student] To będzie konwersja do 0.20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Co to będzie zrobić, to, no cóż, to nie będzie żadnych konwersji. 698 00:49:52,000 --> 00:49:56,000 Co to będzie zrobić, to będzie przechowywać 4 w początek, 699 00:49:56,000 --> 00:49:59,000 i to będzie trudne do porównań przed rozpoczęciem 700 00:49:59,000 --> 00:50:03,000 bo begin zorganizuje wartość 4, 701 00:50:03,000 --> 00:50:06,000 która jest początkiem naszej tablicy, 702 00:50:06,000 --> 00:50:08,000 ale chcemy śledzić indeksy w tablicy 703 00:50:08,000 --> 00:50:11,000 w przeciwieństwie do wartości. 704 00:50:11,000 --> 00:50:17,000 Będziemy faktycznie użyć 0, tak. 705 00:50:17,000 --> 00:50:20,000 Do końca tablicy-Charlotte przyniósł to się trochę wcześniej. 706 00:50:20,000 --> 00:50:23,000 To jest, gdy weźmiemy pod uwagę zerowy indeksowanie. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, co koniec tablicy? 708 00:50:25,000 --> 00:50:28,000 Co to jest indeks na końcu? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Rozmiar - 1. 710 00:50:30,000 --> 00:50:32,000 Tak, i jaki rozmiar powinniśmy użyć? 711 00:50:32,000 --> 00:50:35,000 Powinniśmy wykorzystać wielkości kapitału lub małą wielkość? 712 00:50:35,000 --> 00:50:37,000 Wielkość kapitału. 713 00:50:37,000 --> 00:50:42,000 W tym przypadku, może używamy wielkość kapitału. 714 00:50:42,000 --> 00:50:45,000 Jeśli chcieliśmy funkcja być przenośne 715 00:50:45,000 --> 00:50:48,000 i korzystać z tej funkcji w innych programach, 716 00:50:48,000 --> 00:50:50,000 faktycznie możemy wykorzystać małą wielkość. 717 00:50:50,000 --> 00:50:52,000 To jest w porządku. 718 00:50:52,000 --> 00:51:01,000 Ale Charlotte jest całkowicie słuszne, że chcemy mieć rozmiar - 1. 719 00:51:01,000 --> 00:51:03,000 W tym momencie, 720 00:51:03,000 --> 00:51:05,000 [Student] Jak to jest, że można używać wielkiej rozmiaru? 721 00:51:05,000 --> 00:51:07,000 Jak to jest, że możemy korzystać z wielkiej rozmiaru? 722 00:51:07,000 --> 00:51:13,000 Okazuje się, że te # definiuje są naprawdę, 723 00:51:13,000 --> 00:51:19,000 pod maską, tekst jak znaleźć i wymienić, jeśli to ma sens. 724 00:51:19,000 --> 00:51:24,000 Podczas kompilowania kodu, faza przerób 725 00:51:24,000 --> 00:51:27,000 z kompilatora przechodzi pliku, 726 00:51:27,000 --> 00:51:31,000 i wygląda na to, że na całym świecie napisałeś wielkość kapitału, 727 00:51:31,000 --> 00:51:39,000 i zastępuje ten tekst dosłownie z 8, tak po prostu. 728 00:51:39,000 --> 00:51:42,000 W tym sensie, to jest bardzo różni się od zmiennej. 729 00:51:42,000 --> 00:51:45,000 Nie zajmuje miejsca w pamięci. 730 00:51:45,000 --> 00:51:52,000 Jest to prosta sztuczka replace text. 731 00:51:52,000 --> 00:51:57,000 W tym przypadku, mamy zamiar wykorzystać rozmiar. 732 00:51:57,000 --> 00:52:01,000 Stąd chcę zrobić jakieś powtórzenie, 733 00:52:01,000 --> 00:52:03,000 i jesteśmy na dobrej drodze z naszym do-while. 734 00:52:03,000 --> 00:52:08,000 Chcemy coś zrobić, dopóki stan nie utrzymuje już, 735 00:52:08,000 --> 00:52:12,000 i jak widzieliśmy wcześniej, widzieliśmy, że warunek 736 00:52:12,000 --> 00:52:19,000 było rzeczywiście, że nie chcemy się do końca 737 00:52:19,000 --> 00:52:24,000 powinna być mniejsza niż rozpocząć. 738 00:52:24,000 --> 00:52:26,000 >> To jest nasz stan zatrzymania. 739 00:52:26,000 --> 00:52:35,000 Jeśli to nastąpi, chcemy się zatrzymać i jak deklaruje, "Hej, nie znalazłem nic." 740 00:52:35,000 --> 00:52:43,000 Aby wyrazić to, chcemy użyć jakiejś pętli. 741 00:52:43,000 --> 00:52:49,000 W tym przypadku, to byłoby do-while, do pętli, pętla? 742 00:52:49,000 --> 00:52:51,000 Mamy do-while tutaj. 743 00:52:51,000 --> 00:52:53,000 Czy faceci lubią tego podejścia? 744 00:52:53,000 --> 00:52:59,000 Czy uważasz, że powinniśmy spróbować innego podejścia? 745 00:52:59,000 --> 00:53:01,000 Kevin, jakieś przemyślenia? 746 00:53:01,000 --> 00:53:06,000 Moglibyśmy mieć pętlę while, ponieważ wiemy, maksymalnie 747 00:53:06,000 --> 00:53:11,000 będzie większa od min w tak czy inaczej startu. 748 00:53:11,000 --> 00:53:14,000 Tak, więc nie ma inicjalizacji, który musi się zdarzyć. 749 00:53:14,000 --> 00:53:17,000 Te-while Pętle są świetne, kiedy masz coś do zainicjowania 750 00:53:17,000 --> 00:53:21,000 wcześniej badania, podczas gdy tutaj 751 00:53:21,000 --> 00:53:26,000 wiemy, że nie będziemy trzymać reinitializing zarówno początek i koniec 752 00:53:26,000 --> 00:53:28,000 każda runda pętli. 753 00:53:28,000 --> 00:53:32,000 Wiemy, że chcemy zainicjować je, a następnie sprawdzić naszą kondycję. 754 00:53:32,000 --> 00:53:38,000 W tym przypadku, ja rzeczywiście iść z prostego pętli. 755 00:53:38,000 --> 00:53:44,000 Okazuje się, że do-while stosowane są pętle dość rzadko. 756 00:53:44,000 --> 00:53:49,000 Wiele miejsc nawet nie nauczy nie pętle while. 757 00:53:49,000 --> 00:53:53,000 Są dobre do obsługi danych wejściowych użytkownika, więc widzieliśmy wiele z nich do tej pory. 758 00:53:53,000 --> 00:53:59,000 Ale normalne, a gdy pętle są dużo bardziej powszechne. 759 00:53:59,000 --> 00:54:03,000 Okazuje się, że warunek ten, jak napisane 760 00:54:03,000 --> 00:54:09,000 nie będzie nam naprawdę wiele dobrego, a to dlaczego? 761 00:54:09,000 --> 00:54:11,000 Przykro mi, nie wiem, jak się nazywasz. 762 00:54:11,000 --> 00:54:13,000 Jestem Jerry. >> Przepraszam? 763 00:54:13,000 --> 00:54:15,000 To B-O-R-I-U. 764 00:54:15,000 --> 00:54:18,000 Oh, w porządku. 765 00:54:18,000 --> 00:54:23,000 Nie widzę Cię na mojej liście. 766 00:54:23,000 --> 00:54:26,000 Oh, to dlatego, oh, to ma sens. 767 00:54:26,000 --> 00:54:31,000 Czy masz jakiś pomysł, dlaczego ta pętla może nie działać zgodnie z przeznaczeniem, 768 00:54:31,000 --> 00:54:38,000 jak napisane z warunkiem? 769 00:54:38,000 --> 00:54:43,000 [Jerry] To znaczy, jak chcesz wszystkie rzeczy po nim do-? 770 00:54:43,000 --> 00:54:46,000 Tak, tak, że jest jedna. 771 00:54:46,000 --> 00:54:49,000 Możemy umieścić wszystkie z tych rzeczy do pętli while, która jest całkowicie prawdziwe. 772 00:54:49,000 --> 00:54:55,000 Inna sprawa, że ​​to trochę bardziej problematyczne jest jednak to, że warunek ten nie działa. 773 00:54:55,000 --> 00:54:57,000 [Student] Musisz przerzucić go. 774 00:54:57,000 --> 00:55:04,000 Dobra, więc ten warunek nie będzie nigdy prawdziwym początkowo sposób rozmawialiśmy o tym. 775 00:55:04,000 --> 00:55:08,000 Chcemy coś zrobić, dopóki 00:55:13,000 ale my chcemy zrobić coś, podczas 777 00:55:13,000 --> 00:55:21,000 rozpocząć koniec ≤. 778 00:55:21,000 --> 00:55:24,000 >> Jest, że odwrócenie logiki tam. 779 00:55:24,000 --> 00:55:27,000 Jestem popełnia te błędy cały czas. 780 00:55:27,000 --> 00:55:31,000 [Student] Dlaczego to musi być mniejsza lub równa? 781 00:55:31,000 --> 00:55:33,000 Ponieważ Pamiętasz sprawę, że mamy do 782 00:55:33,000 --> 00:55:36,000 gdzie był tylko jeden element, a my w dół, 783 00:55:36,000 --> 00:55:43,000 i szukaliśmy na tylko 15 w naszej tablicy? 784 00:55:43,000 --> 00:55:47,000 A nasz początek i nasz koniec był taki sam element. 785 00:55:47,000 --> 00:55:50,000 Chcemy się upewnić, że załatwiamy tę sprawę. 786 00:55:50,000 --> 00:55:54,000 Jeśli nie bezpośrednio poniżej, 787 00:55:54,000 --> 00:55:58,000 chcemy być w stanie dostać się do 2-elementu tablicy. 788 00:55:58,000 --> 00:56:06,000 Kiedy dostaliśmy się do tego ostatniego elementu, jeśli to nasz element, że nigdy nie znajdziesz. 789 00:56:06,000 --> 00:56:10,000 Teraz tutaj, możemy zrobić dokładnie tak, jak mówisz. 790 00:56:10,000 --> 00:56:15,000 Możemy zacząć plopping rzeczy prawo w środku naszej pętli. 791 00:56:15,000 --> 00:56:20,000 Możemy plop naszego środkowego. 792 00:56:20,000 --> 00:56:24,000 Możemy podjąć wszystkie te instrukcje if, 793 00:56:24,000 --> 00:56:30,000 wyciągnąć ich z tego do-while, 794 00:56:30,000 --> 00:56:34,000 plop je, 795 00:56:34,000 --> 00:56:39,000 czyste rzeczy się trochę, 796 00:56:39,000 --> 00:56:48,000 a ja pójdę dalej i zapisać zmiany. 797 00:56:48,000 --> 00:56:53,000 I w tym momencie jesteśmy już całkiem blisko. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Myślę, że trzeba też mieć int półmetku size = - 1/2. 800 00:56:58,000 --> 00:57:01,000 Masz to, rozmiar - 1/2. 801 00:57:01,000 --> 00:57:05,000 Czy coś jeszcze trzeba zmienić w tym wierszu? 802 00:57:05,000 --> 00:57:10,000 To był dobry chwyt. 803 00:57:10,000 --> 00:57:14,000 >> Jakie rozmiar zrobić? Czy kiedykolwiek zmiany rozmiaru? 804 00:57:14,000 --> 00:57:17,000 W celu zachowania linii tak, musimy zmienić rozmiar. 805 00:57:17,000 --> 00:57:21,000 Musimy zmienić rozmiar każdym razem gdy pojedziemy wokół pętli for. 806 00:57:21,000 --> 00:57:25,000 Ale pamiętam, kiedy szliśmy przez naszego przykładu tylko trochę wcześniej, 807 00:57:25,000 --> 00:57:30,000 i mieliśmy początek na 4 808 00:57:30,000 --> 00:57:33,000 i koniec wszystkie sposób w temperaturze 108? 809 00:57:33,000 --> 00:57:35,000 Jak obliczyć punkt środkowy? 810 00:57:35,000 --> 00:57:38,000 Gdybyśmy na podstawie rozmiaru? 811 00:57:38,000 --> 00:57:40,000 Lub używaliśmy rozpocząć i zakończyć w zamian? 812 00:57:40,000 --> 00:57:42,000 Jest to różnica pomiędzy końcem i początkiem. 813 00:57:42,000 --> 00:57:50,000 Dokładnie, i jak dokładnie należy napisać, że Charlotte? 814 00:57:50,000 --> 00:57:52,000 Tylko koniec - zaczyna. 815 00:57:52,000 --> 00:57:55,000 Nie musisz zrobić - 1 816 00:57:55,000 --> 00:57:58,000 ponieważ - 1 został w końcu i zacząć już. 817 00:57:58,000 --> 00:58:00,000 [Nate] Świetnie, jesteś całkowicie w porządku. 818 00:58:00,000 --> 00:58:03,000 Nie mamy zrobić - 1, ponieważ - 1 został ujęty 819 00:58:03,000 --> 00:58:08,000 i stanowiły kiedy zainicjować zmienną zakończenia. 820 00:58:08,000 --> 00:58:11,000 >> Czy jest jeszcze coś, co należy zrobić, aby składniowo ta linia ma sens? 821 00:58:11,000 --> 00:58:13,000 [Student] Plus zaczyna. >> Plus zacząć? 822 00:58:13,000 --> 00:58:15,000 [Student] Pod koniec. 823 00:58:15,000 --> 00:58:20,000 Bo to jedynie liczone pół długości. 824 00:58:20,000 --> 00:58:26,000 Musisz dodać rozpocząć. 825 00:58:26,000 --> 00:58:31,000 [Nate] Co by to obliczyć dla nas? 826 00:58:31,000 --> 00:58:35,000 Jeśli myślimy o końcu tej pierwszej iteracji, 827 00:58:35,000 --> 00:58:40,000 end będzie w indeksie pozycji 7. 828 00:58:40,000 --> 00:58:43,000 Zaczyna się w pozycji 0. 829 00:58:43,000 --> 00:58:47,000 Pamiętaj, że szukamy albo 830 00:58:47,000 --> 00:58:52,000 pozycji 3 lub 4 pozycji. 831 00:58:52,000 --> 00:58:56,000 Jeśli przyjrzymy się tej matmy, żeby zrobić to trochę bardziej namacalna, 832 00:58:56,000 --> 00:59:02,000 umieścić kilka numerów tutaj, mamy 7, 0, 833 00:59:02,000 --> 00:59:10,000 tak 7 - 0, i / 2 834 00:59:10,000 --> 00:59:19,000 3 w jest liczbą całkowitą podziału, która jest. 835 00:59:19,000 --> 00:59:26,000 Wtedy nie musimy dodaj ponownie nasz zacząć? 836 00:59:26,000 --> 00:59:28,000 My nie w tym przypadku. 837 00:59:28,000 --> 00:59:31,000 W pierwszej iteracji, to będzie w porządku, bo begin jest 0. 838 00:59:31,000 --> 00:59:36,000 Ale jak postęp, mamy naprawdę wszystko, tylko trzeba 839 00:59:36,000 --> 00:59:42,000 end - rozpocząć / 2. 840 00:59:42,000 --> 00:59:46,000 Jest jeszcze jedna sztuczka, tutaj, i to mianowicie jedna z pierwszeństwa. 841 00:59:46,000 --> 00:59:49,000 [Student] Czy musimy nawiasów? 842 00:59:49,000 --> 00:59:53,000 [Nate] Dokładnie, a to dlatego, że jeśli nie umieścić te nawiasy, 843 00:59:53,000 --> 00:59:58,000 to ta linia będzie interpretować zamiast 844 00:59:58,000 --> 01:00:09,000 as (end) - (początek / 2), która na pewno nie chcesz. 845 01:00:09,000 --> 01:00:11,000 Uważaj na tych reguł priorytetowych. 846 01:00:11,000 --> 01:00:15,000 [Student] Dlaczego nie jest to skończy + zacząć? 847 01:00:15,000 --> 01:00:17,000 Dlaczego nie jest to skończy + zacząć? 848 01:00:17,000 --> 01:00:19,000 [Student] Dlaczego nie jest to? 849 01:00:19,000 --> 01:00:24,000 Dlaczego miałby to być +? 850 01:00:24,000 --> 01:00:26,000 Myślę, że masz rację. 851 01:00:26,000 --> 01:00:28,000 [Student] Bo to jest średnia? 852 01:00:28,000 --> 01:00:31,000 [Nate] Koniec + zacząć, masz całkowitą rację. 853 01:00:31,000 --> 01:00:34,000 Wow, ja całkowicie goofed. Masz rację. 854 01:00:34,000 --> 01:00:39,000 Jeśli robimy znak minus, to chcemy dodać rozpocząć widok 855 01:00:39,000 --> 01:00:43,000 W tym przypadku, że jesteś bardzo dobrze, że chcemy wziąć średnią z dwóch, 856 01:00:43,000 --> 01:00:45,000 więc chcesz je dodać, a nie odjąć im. 857 01:00:45,000 --> 01:00:49,000 [Student] Będzie również działać, jeśli nie koniec - rozpoczyna / 2 + zacząć. 858 01:00:49,000 --> 01:00:55,000 Byłoby jeśli robimy-Wierzę, że tak. 859 01:00:55,000 --> 01:01:00,000 >> Na przykład, jeśli zostały patrząc rozpoczęciem 860 01:01:00,000 --> 01:01:04,000 i przesunął go tutaj 861 01:01:04,000 --> 01:01:08,000 do 15. 862 01:01:08,000 --> 01:01:12,000 Teraz zaczyna się w pozycji 2 jest. 863 01:01:12,000 --> 01:01:15,000 Koniec jest w pozycji 7. 864 01:01:15,000 --> 01:01:21,000 Jeśli odejmiemy je dostajemy 5. 865 01:01:21,000 --> 01:01:24,000 Podzielić, że przez 2, otrzymujemy 2. 866 01:01:24,000 --> 01:01:27,000 A następnie dodajemy 2 z powrotem, 867 01:01:27,000 --> 01:01:30,000 i że ma nas na 4. pozycji, 868 01:01:30,000 --> 01:01:33,000 który jest tutaj, co jest midpoint. 869 01:01:33,000 --> 01:01:36,000 [Student] Czy trzeba dbać o opakowaniu? 870 01:01:36,000 --> 01:01:39,000 W jakim sensie musimy dbać owijania? 871 01:01:39,000 --> 01:01:43,000 Jeśli suma lub różnica pomiędzy 872 01:01:43,000 --> 01:01:45,000 w zależności od tego, jak to zrobić, nawet nie jest liczbą. 873 01:01:45,000 --> 01:01:49,000 Następnie komputer się pogubi, czy kiedy to 2,5; 874 01:01:49,000 --> 01:01:52,000 Ci przejść w lewo lub w prawo, aby określić, który jest środkiem boku? 875 01:01:52,000 --> 01:01:54,000 Rozumiem. 876 01:01:54,000 --> 01:01:56,000 Okazuje się, że z całkowitej podziału, 877 01:01:56,000 --> 01:01:59,000 nie zawsze dostać tych liczb zmiennoprzecinkowych. 878 01:01:59,000 --> 01:02:01,000 Nigdy nie dostać po przecinku. 879 01:02:01,000 --> 01:02:04,000 Jest całkowicie odrzucone. 880 01:02:04,000 --> 01:02:08,000 Jeśli masz komputer dzielą dwa int zmienne, 881 01:02:08,000 --> 01:02:11,000 i jeden 7, a drugi jest 2, 882 01:02:11,000 --> 01:02:13,000 nie dostaniesz 3,5 wyniku. 883 01:02:13,000 --> 01:02:16,000 Będzie się 3. 884 01:02:16,000 --> 01:02:19,000 Pozostała część zostanie odrzucona, więc jest skutecznie zaokrąglania 885 01:02:19,000 --> 01:02:24,000 nie okrągły, lecz piętro, jeśli faceci znają, że w matematyce, 886 01:02:24,000 --> 01:02:27,000 gdzie można całkowicie odrzucić przecinku, 887 01:02:27,000 --> 01:02:31,000 i tak jesteś w zasadzie obcinania go w dół do najbliższej 888 01:02:31,000 --> 01:02:33,000 Cała pozycja, do najbliższej liczby całkowitej. 889 01:02:33,000 --> 01:02:38,000 [Student] Ale to jest to problematyczne, ponieważ jeśli masz tablicę 7 elementów 890 01:02:38,000 --> 01:02:43,000 wtedy automatycznie wykona 3-ej z punktu środkowego, a nie 4.. 891 01:02:43,000 --> 01:02:46,000 Jak możemy sobie z tym poradzić? 892 01:02:46,000 --> 01:02:49,000 Jest to problematyczne, ponieważ jeśli mielibyśmy tablicy 7, 893 01:02:49,000 --> 01:02:54,000 to pick 3-ci zamiast 4th. 894 01:02:54,000 --> 01:02:56,000 Czy mógłbyś wyjaśnić nieco więcej? 895 01:02:56,000 --> 01:02:59,000 [Student] Bo jeśli masz 7 elementów następnie 4-ej 896 01:02:59,000 --> 01:03:04,000 będzie midpoint, prawda? 897 01:03:04,000 --> 01:03:07,000 Zapamiętaj swój komentarz o zerowej indeksowane, choć. 898 01:03:07,000 --> 01:03:10,000 [Student] Tak, tak, w pozycji 3. To byłoby midpoint. 899 01:03:10,000 --> 01:03:12,000 Tak. 900 01:03:12,000 --> 01:03:16,000 Oh, w porządku. Rozumiem, co masz na myśli. 901 01:03:16,000 --> 01:03:19,000 To trochę dziwne, jak przyzwyczaisz się do tej całej koncepcji 902 01:03:19,000 --> 01:03:22,000 pozbycie przecinku. 903 01:03:22,000 --> 01:03:26,000 To świetny punkt. 904 01:03:26,000 --> 01:03:30,000 Skończmy to. 905 01:03:30,000 --> 01:03:32,000 Mamy obliczyć nasz środkowy. 906 01:03:32,000 --> 01:03:37,000 >> Testujemy czy igła jest naszą równa średniej wartości. 907 01:03:37,000 --> 01:03:41,000 Jesteśmy drukowania, że ​​znaleźliśmy go, ale tak naprawdę, co chcemy zrobić w tej sytuacji? 908 01:03:41,000 --> 01:03:46,000 Znaleźliśmy go, więc chcemy dać rozmówcy wiedzą, że ją znalazł. 909 01:03:46,000 --> 01:03:49,000 Mamy funkcję, która jest logiczna wpisywanych funkcji. 910 01:03:49,000 --> 01:03:54,000 Sposób, w jaki sygnał do wywołującego naszej funkcji, że jesteśmy gotowi do 911 01:03:54,000 --> 01:03:58,000 jest powiedzieć: "Hej, to jest prawda." 912 01:03:58,000 --> 01:04:00,000 W jaki sposób to zrobić, Kevin? 913 01:04:00,000 --> 01:04:02,000 Jesteś kiwając głową. >> [Kevin] Dodaj return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Dokładnie, zwróci true. 915 01:04:06,000 --> 01:04:12,000 Teraz, jeśli nie jest równa, w jaki sposób patrzymy na lewej połowie? 916 01:04:12,000 --> 01:04:16,000 Jakieś pomysły? 917 01:04:16,000 --> 01:04:18,000 Stella, jakieś pomysły? 918 01:04:18,000 --> 01:04:21,000 Musisz ustawić nową pozycję końca. 919 01:04:21,000 --> 01:04:23,000 Tak. 920 01:04:23,000 --> 01:04:29,000 Tak więc mamy do czynienia pozycji środkowego - końcowy. 921 01:04:29,000 --> 01:04:33,000 Great. 922 01:04:33,000 --> 01:04:36,000 Musimy ustawić nową pozycję na koniec 923 01:04:36,000 --> 01:04:38,000 spojrzeć na lewej połowie. 924 01:04:38,000 --> 01:04:41,000 Było to o czym rozmawialiśmy przed gdzie 925 01:04:41,000 --> 01:04:44,000 I wracamy do tego przykładu. 926 01:04:44,000 --> 01:04:50,000 I zaczyna się tutaj, a następnie do końca mam całą drogę tutaj. 927 01:04:50,000 --> 01:04:53,000 >> Ponownie, jeśli szukamy 15, a nasz punkt środkowy przypada na 16, 928 01:04:53,000 --> 01:04:56,000 i zdajemy sobie sprawę, "Oops, 16 jest większa. 929 01:04:56,000 --> 01:04:59,000 Chcemy, aby przejść do lewej połowie. " 930 01:04:59,000 --> 01:05:02,000 Mielibyśmy wtedy przesunąć koniec do 15, 931 01:05:02,000 --> 01:05:06,000 i robimy to, że biorąc jeden z dala od punktu środkowego 932 01:05:06,000 --> 01:05:09,000 i ustawienie, że naszym nowym końca. 933 01:05:09,000 --> 01:05:12,000 Podobnie, jeśli chcemy, aby spojrzeć na prawej połowie, w jaki sposób to zrobić? 934 01:05:12,000 --> 01:05:14,000 Czy masz jakiś pomysł? 935 01:05:14,000 --> 01:05:22,000 [Student] Wystarczy ustawić zacząć półmetku + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Great. 937 01:05:24,000 --> 01:05:29,000 I teraz w przypadku, że nie znajdziemy niczego, 938 01:05:29,000 --> 01:05:32,000 zgadza się, że dostać się pod opieką dla nas? 939 01:05:32,000 --> 01:05:36,000 Daniel, to ma się pod opieką dla nas? 940 01:05:36,000 --> 01:05:38,000 [Daniel] L. 941 01:05:38,000 --> 01:05:40,000 [Nate] Jeśli robimy to przez cały zespół i nie znajdziemy niczego, 942 01:05:40,000 --> 01:05:42,000 gdzie by to być pod opieką, czy powinniśmy się tym zająć? 943 01:05:42,000 --> 01:05:44,000 [Daniel] warunek while. 944 01:05:44,000 --> 01:05:48,000 [Nate] Tak, warunkiem natomiast, dokładnie. 945 01:05:48,000 --> 01:05:51,000 Będzie dbać, przechodząc przez całą tablicę, jeśli nie znalazł niczego. 946 01:05:51,000 --> 01:05:53,000 Ta pętla będzie końca. 947 01:05:53,000 --> 01:05:56,000 Nigdy nie spotkałem tego warunku, 948 01:05:56,000 --> 01:06:03,000 i możemy powrócić false. 949 01:06:03,000 --> 01:06:10,000 Możemy też zostawić to, czy tu tak 950 01:06:10,000 --> 01:06:14,000 bo jeśli to, jeśli stwierdzenie jest prawdziwe, 951 01:06:14,000 --> 01:06:16,000 i nasza funkcja powróci, 952 01:06:16,000 --> 01:06:21,000 i tak będzie w istocie abort ta funkcja w tym punkcie 953 01:06:21,000 --> 01:06:24,000 kiedy wrócimy prawda. 954 01:06:24,000 --> 01:06:28,000 Ale co się dzieje z tym struktury tutaj? 955 01:06:28,000 --> 01:06:34,000 To będzie działać w całości, czy też istnieje jakiś logiczny błąd w tam? 956 01:06:34,000 --> 01:06:37,000 >> Istnieje pewna logiczna wada tam z sposób to skonfigurować. 957 01:06:37,000 --> 01:06:40,000 Co to może być? 958 01:06:40,000 --> 01:06:43,000 [Student] Dlaczego musisz - i + 1s? 959 01:06:43,000 --> 01:06:47,000 Który wyznacza naszą tablicę do być nasz nowy lewy i prawy pół pół. 960 01:06:47,000 --> 01:06:51,000 [Student] Ale dlaczego nie można tego zrobić bez - 1s i + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Możemy ustawić go równa połowie? 962 01:06:53,000 --> 01:07:04,000 , Co może być problematyczne, o tym? 963 01:07:04,000 --> 01:07:08,000 [Student] Myślę, że to nieskuteczne, ponieważ jesteś sprawdzanie wartości, które już zostało zaznaczone. 964 01:07:08,000 --> 01:07:11,000 [Nate] Dokładnie, więc Sam jest całkowicie w porządku. 965 01:07:11,000 --> 01:07:15,000 Jeśli ustawisz się do końca i zacząć równa połowie 966 01:07:15,000 --> 01:07:18,000 zamiast - 1 + 1 i refleksyjnie, 967 01:07:18,000 --> 01:07:22,000 w pewnym momencie w przyszłości będziemy skończyć sprawdzając środkowy ponownie. 968 01:07:22,000 --> 01:07:26,000 [Student] zacząłem PSET, a potem miałem coś podobnego 969 01:07:26,000 --> 01:07:30,000 gdzie Zapomniałem + 1, i utknął w nieskończonej pętli. 970 01:07:30,000 --> 01:07:34,000 Racja, bo w pewnym momencie, że nigdy nie będziemy się zaczynać i kończyć 971 01:07:34,000 --> 01:07:39,000 faktycznie pokrywają. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Jest jeszcze jedna logiczna wada, i że jest to, że z całą pewnością należy 974 01:07:44,000 --> 01:07:48,000 else if. 975 01:07:48,000 --> 01:07:55,000 Jaka może być tego przyczyna? 976 01:07:55,000 --> 01:07:59,000 >> Powodem jest to, jeśli to nie jest inny, jeśli-to widziałaś, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Tak, bo jesteś zmieniających punkt końcowy. 978 01:08:02,000 --> 01:08:05,000 [Nate] Dokładnie. 979 01:08:05,000 --> 01:08:07,000 Mamy zmianę punktu końcowego, 980 01:08:07,000 --> 01:08:12,000 i jeśli jest napisane jak to zrobić-we'll przestrzenie między- 981 01:08:12,000 --> 01:08:14,000 będzie sprawdzić tę sprawę. 982 01:08:14,000 --> 01:08:18,000 W takim przypadku, jeśli się powiedzie, zostanie przerwana z funkcji. 983 01:08:18,000 --> 01:08:21,000 Wtedy będzie sprawdzić to kolejny przypadek, 984 01:08:21,000 --> 01:08:24,000 a jeśli to się uda, będzie to ustawić punkt końcowy, 985 01:08:24,000 --> 01:08:28,000 a następnie będzie dalej i sprawdzić tę sprawę. 986 01:08:28,000 --> 01:08:31,000 Ale w tym momencie, że nie chcemy go kontynuować sprawdzanie. 987 01:08:31,000 --> 01:08:35,000 Na szczęście nie mamy zresetować środkowy tutaj 988 01:08:35,000 --> 01:08:39,000 i wiemy, że ta sprawa nie uda. 989 01:08:39,000 --> 01:08:44,000 Ale na pewno chcesz umieścić if tam 990 01:08:44,000 --> 01:08:48,000 mimo że może w tym przypadku 991 01:08:48,000 --> 01:08:52,000 ponieważ nie jesteśmy dostosowując środkowy, czy to coś zmienia? 992 01:08:52,000 --> 01:08:54,000 Nie, ponieważ te sprawy są ekskluzywne. 993 01:08:54,000 --> 01:08:58,000 Znowu, mój błąd. 994 01:08:58,000 --> 01:09:01,000 Nie, myślę, że trzeba ten else if. 995 01:09:01,000 --> 01:09:05,000 Możemy spróbować i uruchom go i zobacz co się dzieje. 996 01:09:05,000 --> 01:09:08,000 Budynek, wystąpił błąd. 997 01:09:08,000 --> 01:09:12,000 To pewnie dlatego, że zostawili te B i E jest tutaj. 998 01:09:12,000 --> 01:09:14,000 Mam nic więcej z tych się na szczycie? 999 01:09:14,000 --> 01:09:16,000 To nie wygląda na to. 1000 01:09:16,000 --> 01:09:20,000 Mamy pomniejszyć, budować, 1001 01:09:20,000 --> 01:09:24,000 tam to idzie, więc teraz, gdy szukamy 15, 1002 01:09:24,000 --> 01:09:28,000 Tak. 1003 01:09:28,000 --> 01:09:30,000 Pozwól mi powiększyć 1004 01:09:30,000 --> 01:09:33,000 15, tak. Możemy uruchomić go ponownie. 1005 01:09:33,000 --> 01:09:36,000 Wgrywanie kod źródłowy, budowę, uruchomienie. 1006 01:09:36,000 --> 01:09:41,000 Możemy poszukać coś jak 13, 1007 01:09:41,000 --> 01:09:45,000 i nie mamy nic drukowania, więc to nie jest stwierdzenie, że dla nas. 1008 01:09:45,000 --> 01:09:51,000 To świetnie, bo to nie jest na naszej liście. 1009 01:09:51,000 --> 01:09:53,000 >> Jesteśmy teraz czasu. 1010 01:09:53,000 --> 01:09:55,000 Że będzie to w tym tygodniu. 1011 01:09:55,000 --> 01:10:00,000 Dziękujemy za przyłączenie się i do zobaczenia później. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]