1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Wszystko w porządku. 3 00:00:11,940 --> 00:00:16,470 Jest to więc CS50, a to Teraz początek trzeciego tygodnia. 4 00:00:16,470 --> 00:00:19,960 >> Tak, aż do teraz, mamy pisze programy w C 5 00:00:19,960 --> 00:00:23,210 które wyglądają trochę coś jak to tutaj. 6 00:00:23,210 --> 00:00:25,470 Więc mamy kilka ostry zawiera na górze. 7 00:00:25,470 --> 00:00:28,490 Mamy int, główny, nieważne, i wtedy coś zrobić w środku, 8 00:00:28,490 --> 00:00:30,590 jakiś kawałek kodu wewnątrz tej funkcji. 9 00:00:30,590 --> 00:00:34,170 Jednak klucz jest to, że byliśmy mówiąc nieważne tutaj. 10 00:00:34,170 --> 00:00:39,320 Więc nieważne, cały ten czas, określa że ten program, po uruchomieniu, 11 00:00:39,320 --> 00:00:41,300 można uruchomić tylko poprzez jego nazwę. 12 00:00:41,300 --> 00:00:46,330 Nie można wpisać inne słowa lub Numery po nazwie programu, gdy 13 00:00:46,330 --> 00:00:46,830 uruchomienie go. 14 00:00:46,830 --> 00:00:51,200 Tak więc, na przykład, w przypadku programu były kompilowane do pliku o nazwie hello, 15 00:00:51,200 --> 00:00:53,480 można zrobić ./hello, ale to jest to. 16 00:00:53,480 --> 00:00:56,750 >> Tylko w ten sposób, że można wkład do tego programu 17 00:00:56,750 --> 00:00:57,960 jest przez wywołanie funkcji. 18 00:00:57,960 --> 00:00:59,790 Na przykład, co funkcja my do tej pory była używana 19 00:00:59,790 --> 00:01:00,950 aby uzyskać wejście od użytkownika? 20 00:01:00,950 --> 00:01:02,117 >> PUBLICZNOŚCI: Uzyskaj ciąg. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Aby uzyskać ciąg, lub uzyskać int, lub widziałeś inne, 22 00:01:04,700 --> 00:01:07,630 nawet jeśli nie korzystali z nich jeszcze, jak inne długości długich i podobne. 23 00:01:07,630 --> 00:01:09,380 Ale załóżmy, że rzeczywiście chcesz uruchomić 24 00:01:09,380 --> 00:01:12,760 pisania programów, które są nieco bardziej wszechstronny, i, szczerze mówiąc, trochę więcej 25 00:01:12,760 --> 00:01:15,090 jak poleceń, które zostały dostaję, miejmy nadzieję, 26 00:01:15,090 --> 00:01:16,550 trochę przyzwyczajeni. 27 00:01:16,550 --> 00:01:18,560 Jak cd przestrzeni Dropbox. 28 00:01:18,560 --> 00:01:20,800 To, oczywiście, zmiany Twój katalogu, zakładając 29 00:01:20,800 --> 00:01:23,590 jesteś w domu Johna Harvarda Katalog, do folderu Dropbox. 30 00:01:23,590 --> 00:01:27,380 Tymczasem, jak to polecenie Tworzy nowy katalog o nazwie pset2, 31 00:01:27,380 --> 00:01:30,290 a może masz już lub wkrótce do problemu ustawić dwa. 32 00:01:30,290 --> 00:01:33,970 Dodać Witam, oczywiście, jest polecenie że buduje program o nazwie komentarzy 33 00:01:33,970 --> 00:01:35,770 z pliku o nazwie komentarzy kropka c. 34 00:01:35,770 --> 00:01:39,140 I w każdym z nich przypadki, teraz, mieliśmy 35 00:01:39,140 --> 00:01:43,620 dostarczyć argument na tak zwane wiersz polecenia, szybka migać, 36 00:01:43,620 --> 00:01:48,540 tak, że producent wie, co do budowy, a więc że mkdir wie, co folder, do tworzenia, 37 00:01:48,540 --> 00:01:51,110 i tak, że cd wie gdzie chcesz iść. 38 00:01:51,110 --> 00:01:54,720 Ale do tej pory, wciąż mówiąc że głównym, domyślna funkcja, 39 00:01:54,720 --> 00:01:58,500 ma wyraz void wewnątrz tych nawiasów, 40 00:01:58,500 --> 00:02:01,250 co oznacza, że nie może podjąć żadnych argumentów. 41 00:02:01,250 --> 00:02:03,240 >> Więc od dzisiaj, to, co mamy zamiar zrobić 42 00:02:03,240 --> 00:02:06,270 jest, mamy zamiar rozpocząć wsparcie takie rzeczy nawet. 43 00:02:06,270 --> 00:02:08,990 W rzeczywistości, w tym przypadku, co cię nie zazwyczaj ręcznie wpisać, 44 00:02:08,990 --> 00:02:11,130 Sprawdź, robi to dla nas, nie ma 45 00:02:11,130 --> 00:02:15,840 jeden, jedno, dwa, trzy dodatkowe struny po nazwie programu jest 46 00:02:15,840 --> 00:02:16,850 dzyń. 47 00:02:16,850 --> 00:02:18,240 Więc w jaki sposób to osiągnąć? 48 00:02:18,240 --> 00:02:20,260 >> No cóż, od dzisiaj, w przypadkach, gdy chcemy 49 00:02:20,260 --> 00:02:22,855 o dostarczenie danych poprzez tzw linii poleceń, 50 00:02:22,855 --> 00:02:24,980 mamy zamiar rozpocząć dodawanie o co w yellow-- 51 00:02:24,980 --> 00:02:30,520 zastępując nieważne z int argc przecinkami Ciąg argv otwarty uchwyt nawiasu. 52 00:02:30,520 --> 00:02:32,520 Teraz to jest ciekawe na kilka powodów. 53 00:02:32,520 --> 00:02:35,690 Jeden, to będzie zapiszmy Programy, które są trochę bardziej dynamiczny. 54 00:02:35,690 --> 00:02:37,570 Ale, co nieodparcie, to się otwiera 55 00:02:37,570 --> 00:02:40,340 obecnie rozmowy w celu co może naprawdę tablice 56 00:02:40,340 --> 00:02:43,300 być stosowane, na co sznurku naprawdę jest pod maską, 57 00:02:43,300 --> 00:02:47,320 do przyszłego tygodnia, kiedy zaczynamy nurkować w jeszcze głębiej, w jaki urządzenie jest 58 00:02:47,320 --> 00:02:48,590 co się z treścią pracy rzeczy. 59 00:02:48,590 --> 00:02:51,920 Ale teraz, niech rysować, być może, obraz. 60 00:02:51,920 --> 00:02:54,950 >> Podczas pisania programu z głównym oświadczył 61 00:02:54,950 --> 00:02:58,810 W ten sposób, tak, że główną przyjmuje dwa argumenty int 62 00:02:58,810 --> 00:03:03,233 i-- jaki typ danych jest drugi argument? 63 00:03:03,233 --> 00:03:04,529 >> PUBLICZNOŚCI: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Tak to wygląda na pierwszy rzut oka, jak to ciąg, ale zauważ nawiasach kwadratowych. 66 00:03:09,170 --> 00:03:12,760 Przypomnijmy, że wprowadzone ostatnio Pojęcie tablicy. 67 00:03:12,760 --> 00:03:16,210 I tablice używać nawiasów kwadratowych w kilku kontekstach. 68 00:03:16,210 --> 00:03:19,160 Możesz korzystać z placu Uchwyty iść do tablicy 69 00:03:19,160 --> 00:03:22,710 i uzyskać konkretny element, jak Wspornik 0 lub 1 lub wspornik wspornik 2. 70 00:03:22,710 --> 00:03:25,500 Ale widzieliśmy, czy krótko, w zeszłym tygodniu, że również 71 00:03:25,500 --> 00:03:28,790 korzystać z tych nawiasach kwadratowych do Oświadczam, rozmiar tablicy, 72 00:03:28,790 --> 00:03:31,790 jeśli z góry wiadomo, ile ints lub ile ciągi lub cokolwiek 73 00:03:31,790 --> 00:03:32,630 rzeczywiście chcesz. 74 00:03:32,630 --> 00:03:34,790 Tak więc okazuje się, że jest trzeci kontekst tutaj 75 00:03:34,790 --> 00:03:37,890 że nie ma numeru wewnątrz w nawiasach kwadratowych. 76 00:03:37,890 --> 00:03:41,920 Po określeniu, jak ja tutaj, nazwa coś jak argv, 77 00:03:41,920 --> 00:03:44,550 który jest tylko fantazyjny sposób mówiąc wektor argumentów, które 78 00:03:44,550 --> 00:03:47,750 jest inny fantazyjny sposób mówiąc tablicę argumentów, 79 00:03:47,750 --> 00:03:50,870 otwarte tylko wspornik nawiasu oznacza, że ​​nie muszą 80 00:03:50,870 --> 00:03:52,960 z góry wiedzieć, jak duże Tablica będzie, 81 00:03:52,960 --> 00:03:55,070 ale wiesz, że to będzie tablica. 82 00:03:55,070 --> 00:03:57,320 Więc jeśli nie wiesz, Numer nie umieścić go tam, 83 00:03:57,320 --> 00:04:01,160 na otwartym uchwytem blisko wspornika Oznacza to, że argv nie jest ciągiem znaków, 84 00:04:01,160 --> 00:04:03,124 ale tablica łańcuchów. 85 00:04:03,124 --> 00:04:05,040 Więc składniowo, jeśli Ciebie wracam w zeszłym tygodniu, 86 00:04:05,040 --> 00:04:09,460 to jest bardzo podobne do powiedzenie coś jak int wieku otwarta nawiasów, 87 00:04:09,460 --> 00:04:10,984 i wtedy coś później. 88 00:04:10,984 --> 00:04:12,150 Więc co to ma wyglądać? 89 00:04:12,150 --> 00:04:13,399 Niech faktycznie narysować obrazek. 90 00:04:13,399 --> 00:04:18,756 Więc po uruchomieniu tego programu z głównymi po dwa argumenty zdefiniowane wewnątrz 91 00:04:18,756 --> 00:04:21,339 z tych nawiasach, to w istocie mają co najmniej dwa klocki 92 00:04:21,339 --> 00:04:23,560 z pamięci, a do Ciebie pod wyciągiem. 93 00:04:23,560 --> 00:04:26,550 Jeden, jak będę zwraca jako prostokąta, będzie nazywany argc. 94 00:04:26,550 --> 00:04:30,645 I tak jak szybki Przypomnę, co to jest typ danych argc? 95 00:04:30,645 --> 00:04:31,270 Więc jest to int. 96 00:04:31,270 --> 00:04:33,480 Tak więc ilość będzie iść w argc-- tur 97 00:04:33,480 --> 00:04:35,660 się, że stoi na liczby argumentów. 98 00:04:35,660 --> 00:04:38,887 Tymczasem ja wyciągnąć argv jako tablicy. 99 00:04:38,887 --> 00:04:40,970 I naprawdę nie wiem, jak długo to będzie, 100 00:04:40,970 --> 00:04:42,470 więc dla dzisiejszych potrzeb kropka kropka kropka. 101 00:04:42,470 --> 00:04:43,636 Może dostać jakiegoś długości. 102 00:04:43,636 --> 00:04:45,640 Ale ja na zdjęciu co najmniej cztery prostokąty. 103 00:04:45,640 --> 00:04:50,970 Więc argv kawałek pamięci, która przechowuje ciąg ciąg ciąg dot dot dot, 104 00:04:50,970 --> 00:04:53,950 i argc to tylko jeden kawałek pamięci do liczb całkowitych. 105 00:04:53,950 --> 00:04:55,710 >> Więc teraz, bądźmy trochę bardziej precyzyjny. 106 00:04:55,710 --> 00:04:59,200 W przypadku, gdy mam ciągi w tej tablicy, zwany 107 00:04:59,200 --> 00:05:03,290 argv, chcę dostać się do nich indywidualnie, tak jak w zeszłym tygodniu, 108 00:05:03,290 --> 00:05:05,670 będziemy używać notacji jak wspornika argv 0 109 00:05:05,670 --> 00:05:07,650 dostać pierwszą rzeczą tablicę. 110 00:05:07,650 --> 00:05:10,440 Argv uchwyt 1, aby uzyskać Druga rzecz, i tak dalej. 111 00:05:10,440 --> 00:05:14,597 Kluczem tutaj jest nadal jesteśmy 0 indexed-- my wciąż licząc od 0. 112 00:05:14,597 --> 00:05:16,430 Więc teraz niech faktycznie umieścić coś w tym. 113 00:05:16,430 --> 00:05:21,670 Gdybym skompilować program o nazwie witam z pliku o nazwie komentarzy kropka c, 114 00:05:21,670 --> 00:05:24,340 a następnie uruchomić ten program z kropką slash komentarzy, 115 00:05:24,340 --> 00:05:28,380 co robi mój komputer, mój laptop, wygląda pod maską 116 00:05:28,380 --> 00:05:31,300 Chwilę uruchomić kropka slash komentarzy i naciśnij Enter? 117 00:05:31,300 --> 00:05:33,500 Cóż, to jest być może co moglibyśmy opisać 118 00:05:33,500 --> 00:05:37,010 jako treść Twoim komputerem pamięci lub pamięci RAM-- Random Access. 119 00:05:37,010 --> 00:05:40,330 Innymi słowy, komputer dla ciebie jakoś magicznie, 120 00:05:40,330 --> 00:05:45,360 umieszcza numer 1 w argc, AKA argcount, i stawia dosłownie ciąg 121 00:05:45,360 --> 00:05:48,200 ./hello w uchwycie argv 0. 122 00:05:48,200 --> 00:05:51,750 Nie mam pojęcia, szczerze mówiąc, co jest Uchwyt argv 1 albo 2 albo 3, 123 00:05:51,750 --> 00:05:55,550 dlatego, jeśli użytkownik nie ma wpisane nic oprócz ./hello, 124 00:05:55,550 --> 00:05:58,550 będziemy zakładać, że te są najbardziej prawdopodobne wartości śmieci, 125 00:05:58,550 --> 00:05:59,700 że tak powiem. 126 00:05:59,700 --> 00:06:02,650 Te fragmenty pamięci istnieje, ale to nie zależy od nas 127 00:06:02,650 --> 00:06:05,710 patrzeć na nich, ponieważ argcount jest tylko jeden. 128 00:06:05,710 --> 00:06:07,870 >> Teraz, w międzyczasie, jeśli I Napisać uruchomić inny program, 129 00:06:07,870 --> 00:06:12,250 CD, które jest właściwie komenda, w migającym prompt-- przestrzeni cd 130 00:06:12,250 --> 00:06:17,200 Dropbox-- gdy uruchamiam, że skutecznie, gdy program cd uruchomieniu argc, 131 00:06:17,200 --> 00:06:22,270 wewnątrz pamięci mojego komputera, to dla Najbardziej najkrócej drugi numer 2. 132 00:06:22,270 --> 00:06:25,936 A następnie wspornik o ma argv cd, wspornik argv 1 ma Dropbox, 133 00:06:25,936 --> 00:06:28,560 i oczywiście polecenie kończy, więc wszystkie te pamięci 134 00:06:28,560 --> 00:06:30,420 zasadniczo odchodzi i służy do czegoś innego. 135 00:06:30,420 --> 00:06:32,270 I dlatego mówię, tylko ułamek sekundy. 136 00:06:32,270 --> 00:06:35,720 >> Tymczasem, jeśli robimy mkdir pset2, obraz wygląda prawie tak samo, 137 00:06:35,720 --> 00:06:37,900 ale z różnych ciągów wewnątrz argv. 138 00:06:37,900 --> 00:06:42,570 Jeśli zrobić clang kreskę komentarzy witam kropka c, sam pomysł. 139 00:06:42,570 --> 00:06:47,060 Więcej rzeczy jest wypełnione przez argv i argc, oczywiście, jest 4. 140 00:06:47,060 --> 00:06:49,150 Tak więc, innymi słowy, Pomimo tego wybór 141 00:06:49,150 --> 00:06:52,950 może być kropka kropka kropka, niektórych zmienna długość, by tak rzec, 142 00:06:52,950 --> 00:06:56,720 zawsze wiesz, gdzie koniec tego jest, bo argc powie ci 143 00:06:56,720 --> 00:07:00,120 w którym momencie trzeba się zatrzymać patrząc na elementy w argv. 144 00:07:00,120 --> 00:07:03,660 Można patrzeć tylko na czterech w sumie w tym przypadku. 145 00:07:03,660 --> 00:07:06,600 >> Więc teraz przyjrzeć się, być może, prosty program. 146 00:07:06,600 --> 00:07:09,070 Który po prostu mówi cześć do kogoś takiego jak Zamyla. 147 00:07:09,070 --> 00:07:12,620 Więc twierdzić Zamierzam napisać program za chwilę, za pomocą którego mógłbym zrobić 148 00:07:12,620 --> 00:07:16,670 ./hello miejsca Zamyla, a następnie chcę mój program wydrukować coś 149 00:07:16,670 --> 00:07:18,520 super proste jak "Witaj, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Teraz w przeszłości używaliśmy getString. 151 00:07:20,100 --> 00:07:22,850 Tak więc w przeszłości, nawet jesteś nowy w programowaniu, 152 00:07:22,850 --> 00:07:27,180 kursy są można wzbudzać program, który wykorzystuje getString 153 00:07:27,180 --> 00:07:29,390 a następnie używa printf aby przywitać się Zamyla. 154 00:07:29,390 --> 00:07:31,290 Ale nie używać getString ten czas. 155 00:07:31,290 --> 00:07:37,510 Pozwól, że zamiast iść do Appliant i nie obejmują standardowe I o kropki h. 156 00:07:37,510 --> 00:07:41,160 Pozwól, że to także CS50 dot godz. 157 00:07:41,160 --> 00:07:44,730 Teraz int main, a teraz jestem nie zrobi nieważne dziś. 158 00:07:44,730 --> 00:07:51,200 Zamiast tego, mam zamiar zrobić int argc Ciąg argv otwarty uchwyt nawiasu, 159 00:07:51,200 --> 00:07:52,640 nie podając numeru. 160 00:07:52,640 --> 00:07:54,644 A teraz tutaj jest mój tzw zrobić. 161 00:07:54,644 --> 00:07:57,560 Co mam teraz zrobić, to, że jestem zamiar zrobić trochę skok wiary, 162 00:07:57,560 --> 00:08:00,560 Mam zamiar założyć, że użytkownik jest będzie prawidłowo korzystać z tego programu, 163 00:08:00,560 --> 00:08:04,980 a ja po prostu będzie zrobić printf komentarzy,% Sn. 164 00:08:04,980 --> 00:08:06,630 Więc nic nowego. 165 00:08:06,630 --> 00:08:11,470 Ale chcę teraz umieścić cokolwiek słowo Typy użytkowników po nazwie programu. 166 00:08:11,470 --> 00:08:16,970 Więc jeśli ja ./hello miejsca Zamyla, ja chcą w jakiś sposób programowo dostęp 167 00:08:16,970 --> 00:08:20,870 cytatu "Zamyla." więc może pójść do mojego argumentu wektora, 168 00:08:20,870 --> 00:08:25,980 moja tablica łańcuchów i jeśli komendy, ponownie, była ./hello miejsca Zamyla, 169 00:08:25,980 --> 00:08:29,340 co chcę zrobić numer umieścić w argv tutaj? 170 00:08:29,340 --> 00:08:29,840 PUBLICZNOŚCI: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, ponieważ Okazuje się wspornik 0 172 00:08:32,355 --> 00:08:34,230 będzie Nazwa programu, jak widzieliśmy. 173 00:08:34,230 --> 00:08:37,789 Tak Uchwyt 1 jest pierwsze słowo że ja, użytkownik, zostało wpisane. 174 00:08:37,789 --> 00:08:39,559 Mam zamiar iść do przodu i zapisz to. 175 00:08:39,559 --> 00:08:42,830 Mam zamiar iść do mojego folderu gdzie mam umieścić ten plik. 176 00:08:42,830 --> 00:08:44,920 Mam zamiar zrobić, aby cześć 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp Io. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Co zrobiłem źle? 180 00:08:54,480 --> 00:08:57,270 Byłem zaskoczeni ja tam tylko na chwilę. 181 00:08:57,270 --> 00:08:58,230 Co zrobiłem źle? 182 00:08:58,230 --> 00:08:59,220 >> PUBLICZNOŚCI: Nazwa. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: plik jest faktycznie nazywa hello3.c. 184 00:09:01,767 --> 00:09:03,850 I zrobiłem to tylko dla spójność, ponieważ mamy 185 00:09:03,850 --> 00:09:06,550 mieli hello.c w przeszłości w trybie online. 186 00:09:06,550 --> 00:09:11,550 Warto więc rozwiązać ten ./hello Uchwyt kreska 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 A teraz mamy znajomych, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Tymczasem, można zmienić na być Rob, czy naprawdę każdy inny wyraz. 190 00:09:17,650 --> 00:09:19,230 >> Ale rozważmy przypadek rożny. 191 00:09:19,230 --> 00:09:24,360 Czego można się spodziewać się stanie, jeśli Nie mam wpisać czyjeś imię w ogóle? 192 00:09:24,360 --> 00:09:25,270 >> PUBLICZNOŚCI: Błąd. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: błąd z jakiejś, być może. 194 00:09:27,300 --> 00:09:28,200 Zobaczmy. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Tak więc w rzeczywistości jest printf Trochę nas ochronna 198 00:09:33,870 --> 00:09:38,131 tu, i dosłownie drukowania otwarte paren null, ale jeszcze gorsze rzeczy mogą się zdarzyć. 199 00:09:38,131 --> 00:09:40,130 I tylko w celu wykazania coś, czego absolutnie 200 00:09:40,130 --> 00:09:42,800 nie należy robić, idziemy w tu i zacząć zabawę. 201 00:09:42,800 --> 00:09:43,300 Prawda? 202 00:09:43,300 --> 00:09:46,410 Jeśli wiem, że obraz w pamięć jest w istocie to, 203 00:09:46,410 --> 00:09:52,660 argv Uchwyt 1 ma Zamyla, argv Wspornik 0 ma ./hello lub ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Co znajduje się w przedziale 2? 205 00:09:55,400 --> 00:09:58,210 Więc mogę odpowiedzieć na to pytanie kwestionuje się, prawda? 206 00:09:58,210 --> 00:10:00,460 Mogę tylko zmienić 1 na 2. 207 00:10:00,460 --> 00:10:07,270 Teraz mogę przekompilować cześć 3, ./hello3 Miejmy powiększyć i naciśnij Enter. 208 00:10:07,270 --> 00:10:08,270 Ups. 209 00:10:08,270 --> 00:10:10,660 Nie cudzysłów. 210 00:10:10,660 --> 00:10:12,540 Ciekawe. 211 00:10:12,540 --> 00:10:15,530 Tak, że niby fajnie co jeszcze jest tutaj. 212 00:10:15,530 --> 00:10:17,130 >> Więc co jeszcze jest w środku mojego laptopa? 213 00:10:17,130 --> 00:10:20,390 Ratujmy go z uchwytem 3. 214 00:10:20,390 --> 00:10:25,190 Dodać hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Ciekawy. 216 00:10:26,500 --> 00:10:30,560 A teraz przejdźmy naprawdę bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Więc to jest bardzo głębokie nurkowania do pamięci mojego komputera. 218 00:10:34,340 --> 00:10:35,930 50 indeksy w. 219 00:10:35,930 --> 00:10:41,950 Tak, aby cześć 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Ciekawy. 221 00:10:42,680 --> 00:10:44,660 Dobra, teraz jestem po prostu dostanie lekkomyślny. 222 00:10:44,660 --> 00:10:47,331 Chodźmy do 5000. 223 00:10:47,331 --> 00:10:47,830 Wszystko w porządku. 224 00:10:47,830 --> 00:10:49,520 Więc pozwól mi ponownie skompilować. 225 00:10:49,520 --> 00:10:51,460 Dodać hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Teraz niektórzy z was, nie może być żarówka będzie wyłączona. 229 00:10:59,250 --> 00:11:01,900 Jak wielu z was widziałem ten komunikat przed? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Tak, to dlaczego? 232 00:11:04,420 --> 00:11:07,250 >> Kursy are-- i nie inaczej rzeczy, które mogą powodować to, 233 00:11:07,250 --> 00:11:09,730 i wyraźnie, że jesteś w dobrym company-- mamy jasno 234 00:11:09,730 --> 00:11:11,900 spowodowało to, co się nazywa błąd segmentacji. 235 00:11:11,900 --> 00:11:15,890 I długie opowiadanie na dzisiaj, ja dotknął segment pamięci 236 00:11:15,890 --> 00:11:17,060 że nie powinienem mieć. 237 00:11:17,060 --> 00:11:19,970 Gdzie odcinek po prostu oznacza, kawałek z pamięci, że nie powinienem mieć. 238 00:11:19,970 --> 00:11:25,530 Teraz komputer gwarantuje, że jeśli uruchomić ./helloZamyla że mogę dotknąć argv 239 00:11:25,530 --> 00:11:27,760 być 0 i argv Uchwyt Uchwyt 1. 240 00:11:27,760 --> 00:11:32,730 Ale argc jest wartość 2, co oznacza, że ​​jestem tylko allowed-- to rodzaj honoru 241 00:11:32,730 --> 00:11:35,180 system-- dotykać Uchwyt Uchwyt 0 i 1. 242 00:11:35,180 --> 00:11:37,990 Jeśli pójdę dalej, nie absolutnie będzie tam pamięć. 243 00:11:37,990 --> 00:11:40,660 Mój RAM istnieje fizycznie w komputerze. 244 00:11:40,660 --> 00:11:42,080 Ale kto wie, co tam jest? 245 00:11:42,080 --> 00:11:44,450 Rzeczywiście, Biegnę wielokrotność programy w jednym czasie. 246 00:11:44,450 --> 00:11:46,910 Może mam seen-- jeśli nie były robi to na Appliant 247 00:11:46,910 --> 00:11:49,937 ale na moim komputerze Mac lub PC-- mógłbym widać zawartość wiadomości e-mail. 248 00:11:49,937 --> 00:11:52,270 Może widziałem natychmiastowy Komunikat I niedawno wysłany. 249 00:11:52,270 --> 00:11:55,390 Wszystko, co może być ociąganie się wokół pamięci 250 00:11:55,390 --> 00:11:59,180 może być dostępny w formie Zapis ten arbitralny kwadratowy uchwyt. 251 00:11:59,180 --> 00:12:02,850 Albo, co gorsza, może być Znaleziono jeden z moich haseł 252 00:12:02,850 --> 00:12:05,859 że ja niedawno wpisane, że Program był przechowywany w pamięci, tak jak 253 00:12:05,859 --> 00:12:07,900 mnie uwierzytelniania i a potem po prostu go trochę w lewo 254 00:12:07,900 --> 00:12:09,910 w pamięci RAM, aż rzuciłem ten program. 255 00:12:09,910 --> 00:12:12,860 >> I rzeczywiście, jest to jedna z niebezpieczeństwo i jeden uprawnienia 256 00:12:12,860 --> 00:12:15,980 z wykorzystaniem języka jak C Masz nieograniczony dostęp 257 00:12:15,980 --> 00:12:18,860 do całej zawartości z pamięci danego programu, 258 00:12:18,860 --> 00:12:21,340 i co źli mogą nawet nie w tych cases-- 259 00:12:21,340 --> 00:12:23,807 zwłaszcza gdy dostać się do programowania WWW 260 00:12:23,807 --> 00:12:26,890 pod koniec semestru, to będzie ponownie ten topic-- się rozglądamy, 261 00:12:26,890 --> 00:12:31,660 potencjalnie, ktoś komputer jest pamięci i znaleźć takie ciekawe rzeczy 262 00:12:31,660 --> 00:12:32,570 jak widzieliśmy tam. 263 00:12:32,570 --> 00:12:36,900 Albo nawet jeszcze gorzej, hasła, że lub ona może używać do robienia złych rzeczy. 264 00:12:36,900 --> 00:12:40,240 >> Tak wyraźnie, że nie powinien tego zrobić, bo dziwne rzeczy zaczynają się dziać. 265 00:12:40,240 --> 00:12:42,310 Rzeczywiście, to zawiesza programu. 266 00:12:42,310 --> 00:12:44,580 Byłoby to równoważne Mac OS lub Windows 267 00:12:44,580 --> 00:12:46,770 Okno programu po prostu znikają. 268 00:12:46,770 --> 00:12:48,300 Nieoczekiwany błąd. 269 00:12:48,300 --> 00:12:50,840 W środowisku wiersza polecenia widzimy coś takiego. 270 00:12:50,840 --> 00:12:54,480 Ale właśnie dlatego, jest mi po prostu dotykając pamięci, która nie należy do mnie. 271 00:12:54,480 --> 00:12:57,090 >> Warto więc bronić się przed tym a nieco inaczej 272 00:12:57,090 --> 00:12:59,010 patrząc na ten program tutaj. 273 00:12:59,010 --> 00:13:01,000 A więc znowu, szkielet które widzieliśmy earlier-- 274 00:13:01,000 --> 00:13:02,480 a ja tym razem int podkreślił. 275 00:13:02,480 --> 00:13:05,900 I cały czas ma główny rzeczywiście zwracane wartości. 276 00:13:05,900 --> 00:13:09,120 Mimo, że w większości z naszego wykładu przykłady nigdy nie raz wykorzystane 277 00:13:09,120 --> 00:13:10,990 nic w głównym powrócić. 278 00:13:10,990 --> 00:13:13,710 Po prostu napisz printf zamknij nawias klamrowy i to jest to. 279 00:13:13,710 --> 00:13:16,500 Ale za darmo, co kompilator robi dla Ciebie, 280 00:13:16,500 --> 00:13:19,510 skutecznie, zwraca 0 dla Ciebie. 281 00:13:19,510 --> 00:13:22,950 Okazuje out-- i to trochę counterintuitive-- że 0 jest dobra. 282 00:13:22,950 --> 00:13:24,690 To nie znaczy fałszywe per se. 283 00:13:24,690 --> 00:13:29,080 0 jest dobre, a wszelkie nie-0 wartości, świat postanowił, 284 00:13:29,080 --> 00:13:30,619 może oznaczać błąd. 285 00:13:30,619 --> 00:13:32,910 Więc jeśli kiedykolwiek zawiedli coś się na komputerze, 286 00:13:32,910 --> 00:13:36,600 lub program właśnie na Ciebie i zmarł dotarłeś jakieś błędne okno 287 00:13:36,600 --> 00:13:40,360 na ekranie, mówiąc błąd ujemny 49 lub błąd 23-- 288 00:13:40,360 --> 00:13:44,170 niektóre pozornie to arbitralne value-- ponieważ programista zakodowane 289 00:13:44,170 --> 00:13:49,370 wartość jak pozytywny lub negatywny 49 23 reprezentować dowolną liczbę, ośmielę się powiedzieć, 290 00:13:49,370 --> 00:13:53,340 z 4 miliardów możliwych rzeczy że może nie udać się w programie. 291 00:13:53,340 --> 00:13:55,700 >> Więc jak mogę wziąć Zaletą tego sam? 292 00:13:55,700 --> 00:13:58,970 Cóż, pozwól mi otworzyć program że napisałem wcześniej, 293 00:13:58,970 --> 00:14:01,450 i grzebać w Internecie nazywa cześć 4. 294 00:14:01,450 --> 00:14:05,650 I to jest prawie identyczne, z tym że Jej ale trochę Sprawdzanie błędów. 295 00:14:05,650 --> 00:14:09,660 W tym przypadku, mam ponownie oświadczył Głównym jako biorąc dwa argumenty, 296 00:14:09,660 --> 00:14:13,180 ale tym razem, na linii 17, informacja Robię kawałek testow. 297 00:14:13,180 --> 00:14:17,100 Jestem upewnić się, że argc równa jest równa 2. 298 00:14:17,100 --> 00:14:18,960 Bo jeśli tak jest, że oznacza, że ​​można bezpiecznie 299 00:14:18,960 --> 00:14:21,420 nie tylko dotknąć, ale wspornik wspornik 0 1. 300 00:14:21,420 --> 00:14:24,330 I idę do przodu i wydrukować, w tym przypadku, Zamyla lub Rob 301 00:14:24,330 --> 00:14:26,020 lub cokolwiek słowo Wpisałem się. 302 00:14:26,020 --> 00:14:28,020 A teraz tylko po to żeby nieco bardziej właściwe, 303 00:14:28,020 --> 00:14:31,910 Zamierzam wyraźnie powrócić 0 oznaczać wszystkie dobrze. 304 00:14:31,910 --> 00:14:33,300 Nic złego się nie stało. 305 00:14:33,300 --> 00:14:38,590 >> Ale zwyczajowo, zamierzam powrót 1, lub mówiąc każda wartość niż 0, 306 00:14:38,590 --> 00:14:40,160 Jeśli coś poszło nie tak. 307 00:14:40,160 --> 00:14:43,270 Teraz użytkownik nie będzie naprawdę zauważyć, co się dzieje. 308 00:14:43,270 --> 00:14:50,410 Rzeczywiście, jeśli pójdę do tego katalogu, możemy powiększać i robią cześć 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla zachowuje się jak oczekuję. 310 00:14:54,210 --> 00:14:58,570 Ale jeśli nie wpisz zamiast nic, nic się nie dzieje, 311 00:14:58,570 --> 00:14:59,680 ale to nie psuje. 312 00:14:59,680 --> 00:15:04,660 A jeśli zamiast zrobić coś jak Rob jest Proctor 313 00:15:04,660 --> 00:15:07,550 w Thayer-- dzielenia dowolne informacje. 314 00:15:07,550 --> 00:15:13,680 Ale informacja, argv 1, 2, 3, 4, i 5 powinien istnieć w pamięci. 315 00:15:13,680 --> 00:15:16,540 To też nie to, co jest mój program oczekuje, 316 00:15:16,540 --> 00:15:20,300 bo już sprawdzone, czy argc równa jest równe 2 lub nie. 317 00:15:20,300 --> 00:15:22,140 Więc jestem teraz bronić się przed tym. 318 00:15:22,140 --> 00:15:25,290 >> Teraz, jak na bok, my programmer-- czy raczej my users-- 319 00:15:25,290 --> 00:15:29,670 Nie widać, że wartość 0 lub 1, ale stosując Narzędzie o nazwie Debugger lub innych narzędzi, 320 00:15:29,670 --> 00:15:32,250 jak zobaczymy, zanim długo, programista 321 00:15:32,250 --> 00:15:36,590 można rzeczywiście zobaczyć, co może być nie tak wewnątrz programu. 322 00:15:36,590 --> 00:15:39,170 >> Tak więc, wszelkie pytania dotyczące argc? 323 00:15:39,170 --> 00:15:40,873 Tak. 324 00:15:40,873 --> 00:15:45,292 >> PUBLICZNOŚCI: Widziałem gdzie nie miały charakteru, [niesłyszalne] 325 00:15:45,292 --> 00:15:49,669 tylko, że gwiazdy, jak sznur d Znak gwiazdki przecinek. 326 00:15:49,669 --> 00:15:50,710 Są one równoważne tutaj? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Są. 328 00:15:51,626 --> 00:15:55,080 Więc pytanie jest, masz sporadycznie widziane programy 329 00:15:55,080 --> 00:15:57,270 tak że nie powiedzieć, wspornik łańcuch argv 330 00:15:57,270 --> 00:16:01,015 ale zamiast powiedzieć coś jak char uchwycie gwiazda argv. 331 00:16:01,015 --> 00:16:03,140 I jest jeszcze inny warianty, które można zobaczyć. 332 00:16:03,140 --> 00:16:04,264 Są one rzeczywiście równoważne. 333 00:16:04,264 --> 00:16:06,240 Na razie mamy ich rodzaju kółka 334 00:16:06,240 --> 00:16:09,737 on w postaci łańcucha w CS50 biblioteki, ale w nieco ponad tydzień 335 00:16:09,737 --> 00:16:12,570 i tak mamy zamiar usunąć, że całkowicie i rzeczywiście przeszkoda 336 00:16:12,570 --> 00:16:16,820 Sprawdź co char i gwiazdy są, i jak te odnoszą się do pamięci 337 00:16:16,820 --> 00:16:18,140 reprezentacja bardziej ogólnie. 338 00:16:18,140 --> 00:16:19,540 Więc wrócimy do tego. 339 00:16:19,540 --> 00:16:21,540 >> Inne pytania na temat naszej argv i argc? 340 00:16:21,540 --> 00:16:22,397 Tak. 341 00:16:22,397 --> 00:16:24,438 PUBLICZNOŚCI: Dlaczego powrót Błąd [niesłyszalne]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Dlaczego to zrobił zwróci błąd only-- oh! 344 00:16:29,230 --> 00:16:31,813 W poprzednim przypadku, kiedy zostały futzing dokoła z pamięci, 345 00:16:31,813 --> 00:16:35,110 dlaczego to tylko zwróci błąd kiedy naprawdę wpisane wielką liczbę? 346 00:16:35,110 --> 00:16:36,620 Krótka odpowiedź jest taka, że ​​po prostu miał szczęście. 347 00:16:36,620 --> 00:16:39,240 Ogólnie rzecz biorąc, komputer przydziela pamięć w kawałki, 348 00:16:39,240 --> 00:16:42,900 i dał mi wystarczająco duży fragment, że I uciekł, nie będąc zauważonym, 349 00:16:42,900 --> 00:16:46,280 dotykać uchwytu wspornika 2, 3, wspornik 50, ale jak tylko pchnął 350 00:16:46,280 --> 00:16:49,080 moje szczęście, poszedłem poza Granice fragmencie pamięci 351 00:16:49,080 --> 00:16:50,520 System operacyjny dał mi. 352 00:16:50,520 --> 00:16:52,720 I wtedy go zaciśnięta w dół i powiedział, nie. 353 00:16:52,720 --> 00:16:54,580 Błąd segmentacji. 354 00:16:54,580 --> 00:16:55,692 Tak. 355 00:16:55,692 --> 00:16:58,890 >> PUBLICZNOŚCI: Jak działa komputer znać wartość argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Jak Komputer poznać wartość argc? 357 00:17:02,390 --> 00:17:07,920 Po uruchomieniu programu, program, przez naturę wierszu miga, 358 00:17:07,920 --> 00:17:11,359 jest przekazywane na tablicę Słowa, które zostały wpisane 359 00:17:11,359 --> 00:17:13,300 w wierszu polecenia, które było wpisane w wierszu. 360 00:17:13,300 --> 00:17:16,569 I tak to jest twój operacyjny System, który zasadniczo 361 00:17:16,569 --> 00:17:20,329 zapełnia argumentów głównych dla Ciebie. 362 00:17:20,329 --> 00:17:22,829 Więc to jest jedna z usług że pojawi się, jakby skrycie 363 00:17:22,829 --> 00:17:24,869 pod maską system operacyjny. 364 00:17:24,869 --> 00:17:27,118 Inne pytania? 365 00:17:27,118 --> 00:17:27,618 Tak. 366 00:17:27,618 --> 00:17:29,787 >> PUBLICZNOŚCI: Co rdzeń nora oznacza? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Co rdzeń nora oznacza? 368 00:17:31,370 --> 00:17:32,950 Więc to jest dobre pytanie. 369 00:17:32,950 --> 00:17:35,312 I pozwól mi wrócić do katalog ten tutaj. 370 00:17:35,312 --> 00:17:37,270 I można zauważyć, że Mam nowy plik tam. 371 00:17:37,270 --> 00:17:41,670 To rzeczywiście zwany rdzeń, i to faktycznie zazwyczaj przyzwoite wielkości pliku. 372 00:17:41,670 --> 00:17:45,300 To jest w zasadzie zrzut zawartość pamięci mojego programu 373 00:17:45,300 --> 00:17:46,902 lub pamięci RAM, gdy rozbił. 374 00:17:46,902 --> 00:17:49,110 I będzie przydatna potencjalnie, diagnostycznie, 375 00:17:49,110 --> 00:17:52,850 raz porozmawiamy w przyszłym wykładu i rozdział na temat debugowania, 376 00:17:52,850 --> 00:17:55,730 bo rzeczywiście można zrobić odpowiednik autopsji cyfrowej 377 00:17:55,730 --> 00:18:00,300 na tym pliku, aby pomóc dowiedzieć się, co zrobiłeś źle w swoim programie. 378 00:18:00,300 --> 00:18:01,220 Tak. 379 00:18:01,220 --> 00:18:04,450 >> PUBLICZNOŚCI: Czy argc polecenia w może sam, lub wybrać nazwę,? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Dobre pytanie. 381 00:18:05,575 --> 00:18:08,040 Czy argc polecenia sam w sobie, czy można nazwać to coś? 382 00:18:08,040 --> 00:18:09,290 To zdecydowanie nie polecenie. 383 00:18:09,290 --> 00:18:13,500 To jest po prostu zmienna Nazwa lub argument za, 384 00:18:13,500 --> 00:18:15,481 my i tak absolutnie może wywołać to foo, 385 00:18:15,481 --> 00:18:18,480 moglibyśmy nazwać ten pasek, które mają tendencję się iść do słów komputerowych 386 00:18:18,480 --> 00:18:19,860 Naukowiec idzie. 387 00:18:19,860 --> 00:18:22,820 Ale zwyczajowo używamy argc i argv. 388 00:18:22,820 --> 00:18:25,360 Ale to tylko ludzka konwencja, nic więcej. 389 00:18:25,360 --> 00:18:25,860 Wszystko w porządku. 390 00:18:25,860 --> 00:18:28,140 Tak więc okazuje się, że byli mówiąc trochę białym lie-- 391 00:18:28,140 --> 00:18:31,264 i szczerze mówiąc, w przyszłości, zobaczysz byliśmy mówiąc inne białe kłamstwa. 392 00:18:31,264 --> 00:18:33,510 Ale teraz, będziemy obierać powrót jednego z nich. 393 00:18:33,510 --> 00:18:37,310 W tym przypadku, gdy wcześniej tutaj prowadził program jak ./hello lub ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla mieliśmy zawartość mojego pamięci komputera, patrząc z grubsza jak 395 00:18:42,780 --> 00:18:43,280 tego. 396 00:18:43,280 --> 00:18:45,070 Ale pamiętam, co ciąg jest. 397 00:18:45,070 --> 00:18:49,279 Co powiedzieć, co tydzień temu Ciąg rzeczywiście jest pod maską? 398 00:18:49,279 --> 00:18:50,320 PUBLICZNOŚCI: Tablica znaków. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: To Tablica znaków, prawda? 400 00:18:52,111 --> 00:18:55,760 Więc może mamy tablicę struny, ale z kolei ciąg 401 00:18:55,760 --> 00:18:57,150 jest tablicą znaków. 402 00:18:57,150 --> 00:19:00,010 Więc jeśli naprawdę chcesz być analny, kiedy rysuję tego obrazu, 403 00:19:00,010 --> 00:19:03,290 Powinien naprawdę być rysunek to trochę tak, 404 00:19:03,290 --> 00:19:08,000 przy czym w każdym z tych indeksy mojej tablicy argv, 405 00:19:08,000 --> 00:19:11,432 nie jest sama w sobie cały łańcuch który sam w sobie jest w tablicy. 406 00:19:11,432 --> 00:19:13,140 I teraz białe kłamstwo Dzisiaj mówimy 407 00:19:13,140 --> 00:19:15,181 jest to, że obraz nie wygląda całkiem tak. 408 00:19:15,181 --> 00:19:19,110 W rzeczywistości, są małe kwadraty zazwyczaj poza dużych prostokątów 409 00:19:19,110 --> 00:19:19,610 tam. 410 00:19:19,610 --> 00:19:21,280 Ale wrócimy do tego niebawem. 411 00:19:21,280 --> 00:19:25,440 Ale to ./hello backslash 0, że jest specjalny znak, że 412 00:19:25,440 --> 00:19:28,310 rozgranicza koniec łańcucha, a my mamy jeszcze jeden po 413 00:19:28,310 --> 00:19:29,360 Nazwa Zamyla za. 414 00:19:29,360 --> 00:19:30,900 Więc co to oznacza? 415 00:19:30,900 --> 00:19:33,410 >> Cóż, pozwól mi iść do przodu i otworzyć dwa inne przykłady 416 00:19:33,410 --> 00:19:35,220 , które są dostępne w Internecie. 417 00:19:35,220 --> 00:19:40,590 Jeden nazywa argv1.c i drugi argv2. 418 00:19:40,590 --> 00:19:44,260 Jest to program prosty, że super- różni się od poprzednich programów 419 00:19:44,260 --> 00:19:47,260 się, że obecnie używam argc i argv tutaj. 420 00:19:47,260 --> 00:19:54,300 A teraz mam dla integracji z pętli w wierszu 18 od i = 0 na maksymalnie argC. 421 00:19:54,300 --> 00:19:56,850 I co ja mam zrobić z tej linii kodu tutaj? 422 00:19:56,850 --> 00:19:58,270 W języku angielskim. 423 00:19:58,270 --> 00:20:00,510 To oczywiście pokazuje wykorzystanie argc. 424 00:20:00,510 --> 00:20:03,670 Ale w języku angielskim, co robi to zrobić, jeśli uruchomić ten program? 425 00:20:03,670 --> 00:20:04,366 Tak? 426 00:20:04,366 --> 00:20:07,386 >> PUBLICZNOŚCI: To będzie drukować ekran tyle razy, ile chcesz. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Dokładnie. 428 00:20:08,260 --> 00:20:10,480 Więc co mi słów wpisz w wierszu, to 429 00:20:10,480 --> 00:20:13,120 będzie regurgitate im na mnie, po jednej w wierszu. 430 00:20:13,120 --> 00:20:14,370 Więc śmiało i to zrobić. 431 00:20:14,370 --> 00:20:17,862 Pozwól mi iść do mojego katalogu i robią argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 A teraz, niech keep it simple. 434 00:20:21,770 --> 00:20:23,834 Zróbmy nic na początku. 435 00:20:23,834 --> 00:20:26,750 To nie wydrukować jedną rzecz, a to rzeczywiście nazwa programu, 436 00:20:26,750 --> 00:20:28,240 bo to jest w przedziale 0. 437 00:20:28,240 --> 00:20:33,290 Jeśli teraz powiedzieć, foo, to zrobi te dwa, a jeśli powiem foo bar, 438 00:20:33,290 --> 00:20:35,580 to będzie powiedzieć te trzy rzeczy. 439 00:20:35,580 --> 00:20:37,740 Teraz jest to nieco ciekawe, być może. 440 00:20:37,740 --> 00:20:41,450 Ale przypominam, że argv jest tablica łańcuchów, 441 00:20:41,450 --> 00:20:45,960 ale ciąg jest tablica znaków, więc możemy wziąć się w garść 442 00:20:45,960 --> 00:20:48,560 i zastosowania, że ​​podstawowe Logika i uczynić kod 443 00:20:48,560 --> 00:20:51,160 wygląda trochę bardziej tajemnicze, prawda. 444 00:20:51,160 --> 00:20:53,540 Ale poprzez zagnieżdżone pętla, coś w rodzaju 445 00:20:53,540 --> 00:20:57,030 do tego, co może pamiętacie z Mario, na przykład, jeśli nie to w ten sposób. 446 00:20:57,030 --> 00:21:00,380 >> Więc teraz zauważyć na linii 19, jestem ponownie iterowanie moich argumentów, 447 00:21:00,380 --> 00:21:02,410 od 0 o do argC. 448 00:21:02,410 --> 00:21:05,510 A teraz, zgodnie 21-- jestem pożyczki trick z ubiegłego week-- 449 00:21:05,510 --> 00:21:11,090 Mam sprawdzanie co jest Długość wspornika argv i. 450 00:21:11,090 --> 00:21:12,920 Jestem przechowywania tę odpowiedź w N. 451 00:21:12,920 --> 00:21:18,230 A potem ja na integrację z j do n, gdzie j ustawia się na 0. 452 00:21:18,230 --> 00:21:19,460 Tak, Konwencja liczenia. 453 00:21:19,460 --> 00:21:22,335 Po używane i, jeśli masz zagnieżdżonych pętli, nie można użyć jeszcze raz, 454 00:21:22,335 --> 00:21:25,770 inaczej będziesz sprać, potencjalnie, Wartość poza wewnętrzną pętlę. 455 00:21:25,770 --> 00:21:27,200 Więc używam j umownie. 456 00:21:27,200 --> 00:21:28,020 Możemy użyć k. 457 00:21:28,020 --> 00:21:31,080 Jeśli masz więcej niż k, prawdopodobnie mają zbyt dużo zagnieżdżania, zazwyczaj. 458 00:21:31,080 --> 00:21:33,800 Ale teraz, zauważył mój printf Linia jest nieco inny. 459 00:21:33,800 --> 00:21:37,520 Nie jestem drukowania% s, jestem drukowanie% C, co, oczywiście, 460 00:21:37,520 --> 00:21:39,460 jest symbolem zastępczym dla char. 461 00:21:39,460 --> 00:21:40,770 >> A teraz zauważyć tej składni. 462 00:21:40,770 --> 00:21:41,270 Nowy. 463 00:21:41,270 --> 00:21:42,630 Nie widzieliśmy go wcześniej. 464 00:21:42,630 --> 00:21:47,290 Ale logicznie, to po prostu oznacza, -ty się ciąg w argv 465 00:21:47,290 --> 00:21:50,067 i uzyskać j co? 466 00:21:50,067 --> 00:21:50,900 PUBLICZNOŚCI: Charakter. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: postaci w tym ciągu. 468 00:21:52,800 --> 00:21:57,100 Więc za pomocą nawiasów kwadratowych następnie nawiasach kwadratowych, 469 00:21:57,100 --> 00:22:00,390 jest to pierwsze nurkowanie na ciągi argv, w 470 00:22:00,390 --> 00:22:02,225 i druga nawiasy kwadratowe z j 471 00:22:02,225 --> 00:22:06,580 jest nurkowanie do bohaterów że zwłaszcza ciąg w argv. 472 00:22:06,580 --> 00:22:09,562 A następnie, po prostu środek na dobre, Jestem tu nowy druk linii. 473 00:22:09,562 --> 00:22:12,020 Więc teraz pozwól mi iść do przodu i otworzyć się nieco większym oknie 474 00:22:12,020 --> 00:22:13,600 więc możemy zobaczyć w akcji. 475 00:22:13,600 --> 00:22:15,700 Pozwól mi wejść do tego folderu. 476 00:22:15,700 --> 00:22:22,550 A teraz robią argv-2-- whoops-- dokonać argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 I to jest trochę trudne czytać w pionie, 479 00:22:24,860 --> 00:22:27,920 ale to rzeczywiście nazwa Program, po pustej linii. 480 00:22:27,920 --> 00:22:30,210 Teraz pozwól mi iść dalej i zrobić foo. 481 00:22:30,210 --> 00:22:33,210 Podobnie trudne do odczytania, ale to rzeczywiście drukowania jednego znaku w wierszu. 482 00:22:33,210 --> 00:22:36,780 A jeśli ja poprzeczkę, to teraz wydrukować je linia po linii. 483 00:22:36,780 --> 00:22:40,140 Więc na wynos tutaj jest nie tyle że, wow, spojrzeć na ten zgrabny nowej sztuczki 484 00:22:40,140 --> 00:22:44,750 gdzie można dostać w treści szczególnych znaków tablicy, w 485 00:22:44,750 --> 00:22:48,380 ale jak bierzesz te podstawowe pomysły, takie jak indeksowanie do tablicy, 486 00:22:48,380 --> 00:22:51,620 a następnie do indeksowania Tablica, która była w tej tablicy, 487 00:22:51,620 --> 00:22:56,180 i tylko stosując te same pomysły nieco bardziej wyrafinowane przykłady. 488 00:22:56,180 --> 00:22:59,560 Ale naprawdę nie ma podstaw zmiany, nawet od zeszłego tygodnia. 489 00:22:59,560 --> 00:23:02,350 >> Teraz jest to rodzaj terminowej, w tym, przypominam, w tygodniu zerowym 490 00:23:02,350 --> 00:23:04,110 graliśmy z książki telefonicznej tak. 491 00:23:04,110 --> 00:23:06,670 Nawet jeśli jest to oczywiste fizyczne kawałki papieru, 492 00:23:06,670 --> 00:23:09,150 można trochę pomyśleć Książka telefoniczna jako tablica. 493 00:23:09,150 --> 00:23:12,770 Oczywiście, jeśli były do ​​reimplement to utwory te kawałki papieru 494 00:23:12,770 --> 00:23:15,260 w komputerze, chyba należało by użyć 495 00:23:15,260 --> 00:23:20,270 jak tablica do przechowywania wszystkich tych, Nazwy i numery z całej drodze 496 00:23:20,270 --> 00:23:23,800 przez Z. Więc to jest ładne, ponieważ pozwala nam okazję, 497 00:23:23,800 --> 00:23:28,310 być może, do rozważenia, w jaki sposób mógłby faktycznie zaimplementować coś takiego. 498 00:23:28,310 --> 00:23:31,250 Podobnie jak w przypadku serii drzwi tutaj. 499 00:23:31,250 --> 00:23:36,380 Więc jeśli could-- potrzebujemy jednego dobrowolnie przyjść na górę. 500 00:23:36,380 --> 00:23:36,980 Zobaczmy. 501 00:23:36,980 --> 00:23:40,650 Nieznane oblicze być może, nieznane oblicze może. 502 00:23:40,650 --> 00:23:42,090 Jak się na pomarańczowo? 503 00:23:42,090 --> 00:23:42,680 Tutaj. 504 00:23:42,680 --> 00:23:45,870 Shirt pomarańczowy, dalej w górę. 505 00:23:45,870 --> 00:23:52,230 >> Idziemy do przodu i teraz ruch te drzwi na bok, 506 00:23:52,230 --> 00:23:54,020 przenieść je z drogi na chwilę. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Jak masz na imię? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID MALAN: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Miło cię poznać. 513 00:23:59,451 --> 00:23:59,950 Wszystko w porządku. 514 00:23:59,950 --> 00:24:04,500 Więc mamy za te sześć Drzwi cyfrowo na screen-- 515 00:24:04,500 --> 00:24:07,810 A raczej siedem drzwi na screen-- całą masę numerów. 516 00:24:07,810 --> 00:24:10,099 A ja nic nie powiedziałem ci w advance-- zgodził? 517 00:24:10,099 --> 00:24:11,140 AJAY: Nic z góry. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Chcę, żebyś teraz jest znaleźć dla mnie, i dla nas, 519 00:24:14,730 --> 00:24:20,920 naprawdę, numer 50, krok w tym samym czasie. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Numer 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: numer 50. 522 00:24:22,580 --> 00:24:24,746 I można ujawnić, co jest Za każdą z tych drzwi 523 00:24:24,746 --> 00:24:27,930 po prostu dotykając go palcem. 524 00:24:27,930 --> 00:24:31,364 Cholera. [Śmiech] 525 00:24:31,364 --> 00:24:34,560 >> [Aplauz] 526 00:24:34,560 --> 00:24:39,540 >> Bardzo dobrze zrobione. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Mamy piękny prezent nagroda dla Ciebie tutaj. 529 00:24:44,090 --> 00:24:46,520 Wybierać możemy filmów omawiane w zeszłym tygodniu. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Och, człowieku. 531 00:24:47,362 --> 00:24:49,050 Och, nigdy nie widziałem Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Kosmiczne jaja. 533 00:24:49,520 --> 00:24:50,140 Wszystko w porządku. 534 00:24:50,140 --> 00:24:53,790 Tak trzymać tylko jednej chwili. 535 00:24:53,790 --> 00:24:57,430 How-- zróbmy to pojętny moment-- 536 00:24:57,430 --> 00:25:00,412 jak się go o znalezienie numer 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: wybrałem losowo. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Więc wybrałem losowo i szczęście. 539 00:25:03,420 --> 00:25:03,790 AJAY: Tak. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Doskonałe. 542 00:25:05,050 --> 00:25:08,470 Więc teraz, gdyby nie ci zdobyć szczęście, co jeszcze 543 00:25:08,470 --> 00:25:10,210 może się stać za tymi drzwiami? 544 00:25:10,210 --> 00:25:12,930 Więc jeśli pójdę do przodu i ujawnić te numery tutaj, 545 00:25:12,930 --> 00:25:15,180 w rzeczywistości są w kolejności losowej. 546 00:25:15,180 --> 00:25:17,750 I najlepiej można mieć zrobić, szczerze mówiąc, jest w ostatecznym rozrachunku, 547 00:25:17,750 --> 00:25:19,410 w najgorszym przypadku, sprawdzając je wszystkie. 548 00:25:19,410 --> 00:25:23,000 Tak masz super szczęście, które nie jest to, co my nazywamy algorytm. 549 00:25:23,000 --> 00:25:24,730 Tak, gratulacje. 550 00:25:24,730 --> 00:25:27,010 Ale teraz let's-- humoru mnie, jeśli można. 551 00:25:27,010 --> 00:25:28,310 Chodźmy do tej zakładce tutaj. 552 00:25:28,310 --> 00:25:31,460 I tu są numery w wyraźnie , co wydaje się być losowa kolejność, 553 00:25:31,460 --> 00:25:32,280 i były. 554 00:25:32,280 --> 00:25:35,160 Ale teraz, gdybym zamiast roszczenia że za tymi drzwiami 555 00:25:35,160 --> 00:25:39,070 są numery, które są sortowane. 556 00:25:39,070 --> 00:25:41,780 Celem jest również znaleźć nam numer 50. 557 00:25:41,780 --> 00:25:45,910 Ale zrobić algorytmicznie, a Powiedz nam, jaki masz zamiar o tym. 558 00:25:45,910 --> 00:25:48,020 A jeśli go znaleźć, zachować ten film. 559 00:25:48,020 --> 00:25:49,520 Państwo nie jest, można go oddać. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Więc mam zamiar sprawdzić końce Po pierwsze, w celu określenia, czy there's-- 562 00:25:58,112 --> 00:26:02,048 [Śmiech i oklaski] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Proszę bardzo. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Rzućmy okiem na jednego z poprzedników Ajay, w 567 00:26:21,700 --> 00:26:25,450 Sean, który nie był tak szczęśliwy. 568 00:26:25,450 --> 00:26:28,670 OK, więc o swoim zadaniu, Sean jest następujące. 569 00:26:28,670 --> 00:26:32,970 Ukryłem się za nich Drzwi numer siedem, 570 00:26:32,970 --> 00:26:37,200 ale schowany w niektórych z tych drzwi oraz inne numery niż negatywne. 571 00:26:37,200 --> 00:26:40,730 I twoim celem jest, aby myśleć o tym Górny rząd liczb, jak tylko tablicy. 572 00:26:40,730 --> 00:26:43,590 Wystarczy sekwencja sztuk papieru z numerami za nimi. 573 00:26:43,590 --> 00:26:47,640 I twoim celem jest, tylko przy użyciu top Tablica tu znaleźć mi numer siedem. 574 00:26:47,640 --> 00:26:51,200 A my wtedy będziemy krytykować jak go o to robi. 575 00:26:51,200 --> 00:26:52,920 Znajdź nas na numer siedem, proszę. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nie 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 To nie jest podchwytliwe pytanie. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 W tym momencie Twój wynik nie jest bardzo dobra, więc równie dobrze można iść dalej. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Idź na. 590 00:27:39,802 --> 00:27:42,510 Szczerze mówiąc, nie mogę pomóc, ale zastanawiam się, czego nawet myśleć. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Mogę wziąć tylko z górnego rzędu. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Tylko górny rząd. 593 00:27:46,240 --> 00:27:47,281 Więc masz trzy w lewo. 594 00:27:47,281 --> 00:27:48,310 Więc znajdź mi 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PUBLICZNOŚCI krzyczy WSKAZÓWKI] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Tak więc oba te były niesamowite z bardzo różnych powodów. 599 00:28:26,130 --> 00:28:29,150 Tak to jest, gdy mamy przerwane przed chwilą, 600 00:28:29,150 --> 00:28:32,530 i Kluczową kwestią tutaj było te drzwi miały numery 601 00:28:32,530 --> 00:28:37,390 za nimi, które były sortowane, idealny dania na wynos, dla których jest to, że można zrobić 602 00:28:37,390 --> 00:28:39,670 zasadniczo lepiej Ten drugi example-- 603 00:28:39,670 --> 00:28:42,380 i rzeczywiście, to był Sean Pierwsza próba z liczb losowych 604 00:28:42,380 --> 00:28:45,460 jak before-- ale najszybciej jak te liczby są sortowane, 605 00:28:45,460 --> 00:28:47,980 podobnie jak w książce telefonicznej, co można oczywiście zrobić? 606 00:28:47,980 --> 00:28:50,090 Lub w jaki sposób można wykorzystać tę wiedzę? 607 00:28:50,090 --> 00:28:51,530 Tak. 608 00:28:51,530 --> 00:28:54,910 >> PUBLICZNOŚCI: Idziesz do połowy [niesłyszalne]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Tak. 610 00:28:55,660 --> 00:28:56,160 Dokładnie. 611 00:28:56,160 --> 00:28:59,680 Więc początkowy Ajay był instynkt sprawdzić końce, jak sobie przypominam, 612 00:28:59,680 --> 00:29:02,320 a potem jakby gotowy Przykładem szybko. 613 00:29:02,320 --> 00:29:05,220 Ale gdybyśmy zaczęli to robić więcej metodycznie wzdłuż tych linii, 614 00:29:05,220 --> 00:29:07,860 ale wychodząc być może w średnim, ponieważ są one klasyfikowane, 615 00:29:07,860 --> 00:29:10,900 jak tylko ujawnić Numer 16, dlatego wiem-- 616 00:29:10,900 --> 00:29:14,850 i zróbmy dokładnie that-- my Dlatego wiem, że 50, w dzisiejszym wypadku 617 00:29:14,850 --> 00:29:16,080 ma być w prawo. 618 00:29:16,080 --> 00:29:18,735 Tak jak w tydzień po zerowej my zerwał się w połowie książki telefonicznej 619 00:29:18,735 --> 00:29:21,490 i rzucił połowę Problem z dala, sam pomysł tutaj. 620 00:29:21,490 --> 00:29:23,680 Możemy rzucić tę połowę problemu z dala. 621 00:29:23,680 --> 00:29:25,730 I prawdopodobnie to co Cię może zrobić algorytmicznie, 622 00:29:25,730 --> 00:29:28,710 gdy wiesz, że 50 musi być z prawej strony, czy to w dowolnym miejscu, 623 00:29:28,710 --> 00:29:31,390 to spróbuj tam, w środku pozostałych drzwi. 624 00:29:31,390 --> 00:29:33,450 Oczywiście, 50 jest większa niż 42, więc możemy 625 00:29:33,450 --> 00:29:36,060 rzucić to pozostałe kwartał problemu z dala, 626 00:29:36,060 --> 00:29:38,510 i wreszcie identyfikacji coś jak 50. 627 00:29:38,510 --> 00:29:41,050 Ale tak jak z książka telefoniczna, numery te 628 00:29:41,050 --> 00:29:44,560 zostały podane do nas już w posortowanych, który pozostawia nas 629 00:29:44,560 --> 00:29:47,450 z pytaniem, jak można dostać rzeczy do posortowanych? 630 00:29:47,450 --> 00:29:49,640 I, szczerze mówiąc, za jaką cenę? 631 00:29:49,640 --> 00:29:51,390 Jest jedna rzecz, aby być wręczył książki telefonicznej 632 00:29:51,390 --> 00:29:54,810 i zaimponować znajomym, stwierdzając telefon bardzo szybko, prawda? 633 00:29:54,810 --> 00:29:58,520 Łzawienie 32 strony, by znaleźć osób, z 4 mld stron, 634 00:29:58,520 --> 00:30:00,470 powiedzieliśmy, był jednym skrajnym przykładem. 635 00:30:00,470 --> 00:30:03,320 Ale ile czasu zajęło Verizon uporządkować tę książkę telefoniczną? 636 00:30:03,320 --> 00:30:06,170 Ile czasu zajęło nam uporządkować te siedem liczb? 637 00:30:06,170 --> 00:30:10,110 To znak, że mamy dotychczas zupełnie ignorowane. 638 00:30:10,110 --> 00:30:12,330 >> Warto więc odpowiedzieć na to pytanie teraz. 639 00:30:12,330 --> 00:30:15,920 I wszyscy jesteśmy z filmów teraz, ale mamy jakieś piłeczki antystresowe. 640 00:30:15,920 --> 00:30:19,480 Jeśli, powiedzmy, ośmiu wolontariuszy Nie miałbym nic przeciwko dołączy do nas tutaj? 641 00:30:19,480 --> 00:30:24,100 Idziemy dalej i zrobić, jak o cztery z was, trzy z was? 642 00:30:24,100 --> 00:30:25,290 Pobierz nowe twarze. 643 00:30:25,290 --> 00:30:27,220 I cztery z was tam? 644 00:30:27,220 --> 00:30:30,760 I teraz-- niech nie stronniczość tutaj-- i Numer osiem tutaj na koniec. 645 00:30:30,760 --> 00:30:32,060 Chodź na górę. 646 00:30:32,060 --> 00:30:32,560 Wszystko w porządku. 647 00:30:32,560 --> 00:30:37,480 Tak więc mamy tu do każdy z was jest liczba. 648 00:30:37,480 --> 00:30:40,055 Jeśli chcesz, aby przejść do przodu, weź ten numer. 649 00:30:40,055 --> 00:30:40,763 Jak masz na imię? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, dobrze. 652 00:30:43,100 --> 00:30:44,297 Jesteś numer 1. 653 00:30:44,297 --> 00:30:45,310 >> AMIN: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID MALAN: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Jesteś numer 2. 657 00:30:47,530 --> 00:30:49,100 I iść do przodu, jak oddam Ci arkusze papieru, 658 00:30:49,100 --> 00:30:52,130 linii sami się przed muzyką oznacza w tym samym porządku jak się tam. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Cześć, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, miło cię widzieć. 661 00:30:53,970 --> 00:30:54,520 Numer 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jakub. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jakub, numer 4. 664 00:30:56,760 --> 00:30:57,549 Witamy na pokładzie. 665 00:30:57,549 --> 00:30:58,090 : GRANT. 666 00:30:58,090 --> 00:30:58,881 DAVID MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Numer 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, numer 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, numer 7. 672 00:31:04,880 --> 00:31:05,200 A? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, numer 8. 675 00:31:06,815 --> 00:31:07,100 Wszystko w porządku. 676 00:31:07,100 --> 00:31:08,766 Śmiało i dostać się w tej kolejności. 677 00:31:08,766 --> 00:31:11,440 Powiem jedno pozostałe muzyka stoją w miejscu. 678 00:31:11,440 --> 00:31:13,670 Gdzie trzeba stanowisko? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Idź przed siebie i po prostu umieścić swoje numery gdzie publiczność może zobaczyć je na, 681 00:31:18,710 --> 00:31:20,340 stojak muzyczny skierowany na zewnątrz. 682 00:31:20,340 --> 00:31:27,240 I miejmy nadzieję, że nasz pierwszy kontrola poprawności tutaj-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Chwileczkę. 685 00:31:29,070 --> 00:31:31,140 Nie mamy się 8. 686 00:31:31,140 --> 00:31:35,180 Potrzebuję do eksmisji z Przykładem jakoś. 687 00:31:35,180 --> 00:31:35,680 Nie 688 00:31:35,680 --> 00:31:36,940 Nie, to jest OK. 689 00:31:36,940 --> 00:31:37,890 Zobaczmy. 690 00:31:37,890 --> 00:31:38,880 Możemy to zrobić. 691 00:31:38,880 --> 00:31:39,440 Stand by. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Nie idziemy. 694 00:31:45,740 --> 00:31:46,800 Prawidłowe. 695 00:31:46,800 --> 00:31:47,360 Wszystko w porządku. 696 00:31:47,360 --> 00:31:50,260 Tak, teraz mamy 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Doskonałe. 699 00:31:51,360 --> 00:31:54,400 >> Więc pytanie jest w zasięgu ręki, w jakie koszty, i poprzez to, co sposób, 700 00:31:54,400 --> 00:31:58,580 może faktycznie możemy posortować te liczby tutaj tak, że możemy trochę działać wstecz, 701 00:31:58,580 --> 00:32:02,759 ostatecznie i decide-- jest to naprawdę imponujący, to jest naprawdę skuteczne, 702 00:32:02,759 --> 00:32:04,550 że mogę dzielić i zdobyć książkę telefoniczną? 703 00:32:04,550 --> 00:32:06,716 Czy to naprawdę wydajny Mogę podzielić i podbić 704 00:32:06,716 --> 00:32:08,600 te kawałki cyfrowe papieru na pokładzie, 705 00:32:08,600 --> 00:32:14,500 czy może to będzie nas kosztować majątek w czasie lub cykli energetycznych lub CPU 706 00:32:14,500 --> 00:32:17,340 rzeczywiście dostać nasze dane do jakiegoś posortowanych? 707 00:32:17,340 --> 00:32:18,930 Warto więc zwrócić na to pytanie. 708 00:32:18,930 --> 00:32:22,077 >> Więc po pierwsze, te liczby są w dość dużo losowej kolejności, 709 00:32:22,077 --> 00:32:24,160 i mam zamiar zaproponować jeden algorytm, lub proces 710 00:32:24,160 --> 00:32:25,970 dzięki którym możemy uporządkować tych ludzi. 711 00:32:25,970 --> 00:32:28,100 Mam zamiar podejść to dość naiwnie. 712 00:32:28,100 --> 00:32:30,730 I idę do uznania że to niby dużo dla mnie 713 00:32:30,730 --> 00:32:32,890 owinąć wokół mojego umysłu od razu cały zestaw danych. 714 00:32:32,890 --> 00:32:33,640 Ale wiesz co? 715 00:32:33,640 --> 00:32:37,450 Idę do niektórych bardzo proste marginalne poprawki. 716 00:32:37,450 --> 00:32:41,152 4 i 2 są w porządku, o ile Celem jest, aby przejść od 1 dnia do 8. 717 00:32:41,152 --> 00:32:41,860 Więc wiesz, co? 718 00:32:41,860 --> 00:32:43,776 Zamierzam cię mieć Chłopaki zamienić, jeśli przełącznik 719 00:32:43,776 --> 00:32:46,380 Pozycje i fizycznie Twoje kawałki papieru. 720 00:32:46,380 --> 00:32:47,894 Teraz 4 i 6 są w porządku. 721 00:32:47,894 --> 00:32:49,060 Mam zamiar zostawić te być. 722 00:32:49,060 --> 00:32:50,227 6 i 8, to są w porządku. 723 00:32:50,227 --> 00:32:51,185 Zamiar zostawić je mieć. 724 00:32:51,185 --> 00:32:52,170 8 AND1, w porządku. 725 00:32:52,170 --> 00:32:54,790 Jeśli dwa nie przeszkadza zamiana. 726 00:32:54,790 --> 00:32:57,300 Teraz 8 i 3, jeśli wam się zamienić. 727 00:32:57,300 --> 00:32:59,320 8 i 7, jeżeli wam się zamienić. 728 00:32:59,320 --> 00:33:01,790 I 8 i 5, jeśli wam się zamienić. 729 00:33:01,790 --> 00:33:03,980 >> Teraz ja mam zrobić? 730 00:33:03,980 --> 00:33:05,200 Nie, oczywiście nie. 731 00:33:05,200 --> 00:33:07,880 Ale zrobiłem Sytuacja lepiej, prawda? 732 00:33:07,880 --> 00:33:09,430 Co jeszcze masz na imię, numer 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Tak Rachel ma skutecznie przepuszcza się dość daleko, 735 00:33:12,850 --> 00:33:15,660 wszystko aż do końca moja tablica z numerami tutaj. 736 00:33:15,660 --> 00:33:17,310 I tak, że problem jest rodzaj rozwiązania. 737 00:33:17,310 --> 00:33:21,670 Teraz wyraźnie 2 nadal wymaga poruszać się nieznacznie i 4 i 6 i 1. 738 00:33:21,670 --> 00:33:24,420 Ale wydaje mi się zdobyć bliżej do roztworu. 739 00:33:24,420 --> 00:33:26,790 Warto więc zastosować to samo naiwny heurystyczna ponownie. 740 00:33:26,790 --> 00:33:27,690 2 i 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 i 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 do 1 mm mm. 743 00:33:29,930 --> 00:33:32,230 Wymieńmy. 744 00:33:32,230 --> 00:33:33,200 6 i 3 mm mm. 745 00:33:33,200 --> 00:33:34,420 Wymieńmy. 746 00:33:34,420 --> 00:33:35,580 6 i 7 jest w porządku. 747 00:33:35,580 --> 00:33:36,590 7 i 5, nope. 748 00:33:36,590 --> 00:33:37,790 Wymieńmy. 749 00:33:37,790 --> 00:33:38,470 A teraz 7 i 8. 750 00:33:38,470 --> 00:33:39,862 A co masz na imię? 751 00:33:39,862 --> 00:33:40,570 FRANCES Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID MALAN Frances. 753 00:33:41,445 --> 00:33:44,230 Więc teraz Frances jest nawet lepiej stanowisko, ponieważ teraz 7 i 8 754 00:33:44,230 --> 00:33:46,440 prawidłowo przepuszcza się do góry. 755 00:33:46,440 --> 00:33:47,510 Tak, 2 i 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 i 1, Wymieńmy się. 757 00:33:48,720 --> 00:33:50,410 4 i 3, Wymieńmy się. 758 00:33:50,410 --> 00:33:51,550 4 i 6, jesteś OK. 759 00:33:51,550 --> 00:33:53,340 6 i 5, Wymieńmy się. 760 00:33:53,340 --> 00:33:54,590 A teraz ci ludzie są dobrzy. 761 00:33:54,590 --> 00:33:55,780 Jesteśmy prawie na miejscu. 762 00:33:55,780 --> 00:33:57,706 2 i 1, w porządku, więc zamienić. 763 00:33:57,706 --> 00:33:59,080 A teraz pozwól mi zrobić test dla pewności. 764 00:33:59,080 --> 00:34:03,080 2 i 3, 3 i 4, 4 i 5, 5 i 6, 6 i 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, więc skończyliśmy. 766 00:34:05,060 --> 00:34:09,310 >> Ale jakim kosztem nie ja sortować te numery tutaj? 767 00:34:09,310 --> 00:34:13,960 Cóż, ile kroków zrobiłeś I potencjalnie podjąć podczas sortowania tych ludzi? 768 00:34:13,960 --> 00:34:15,710 Dobrze, wrócimy do tej kwestii. 769 00:34:15,710 --> 00:34:18,030 Ale, szczerze mówiąc, jeśli masz trochę się nudzić, to 770 00:34:18,030 --> 00:34:22,270 rodzaj ujawniając tym, że nie było to Najbardziej skuteczne może algorytm. 771 00:34:22,270 --> 00:34:25,230 I rzeczywiście, szczerze mówiąc, pocę tym bardziej chodzenie tam iz powrotem. 772 00:34:25,230 --> 00:34:26,639 , Że nie czują się szczególnie skuteczne. 773 00:34:26,639 --> 00:34:27,805 Warto więc spróbować czegoś innego. 774 00:34:27,805 --> 00:34:31,870 Jeśli wam się zresetować sami do tych ośmiu wartości. 775 00:34:31,870 --> 00:34:32,969 Dobra robota. 776 00:34:32,969 --> 00:34:36,570 >> Rzućmy okiem cyfrowo, za tak Chwilę przed spróbować czegoś innego, 777 00:34:36,570 --> 00:34:38,179 na to, co się właśnie stało. 778 00:34:38,179 --> 00:34:41,330 Tu jesteś by zobaczyć wizualizacja tych ośmiu ludzi 779 00:34:41,330 --> 00:34:44,719 przy czym niebieski i czerwony paski oznaczają numery. 780 00:34:44,719 --> 00:34:46,670 Wyższy pasek, większa liczba. 781 00:34:46,670 --> 00:34:48,510 Krótszy pasek, mniejsza ilość. 782 00:34:48,510 --> 00:34:51,560 I co masz zamiar zobaczyć jest w losowo zamówić więcej niż ośmiu z nich. 783 00:34:51,560 --> 00:34:55,830 Masz zamiar zobaczyć te bary coraz klasyfikowane według tego samego algorytmu, 784 00:34:55,830 --> 00:34:59,890 lub zestaw instrukcji, które będziemy nazywać odtąd bubble sort. 785 00:34:59,890 --> 00:35:04,000 Tak więc zauważyć, co druga lub tak, dwa bary są oświetlenia w kolorze czerwonym, 786 00:35:04,000 --> 00:35:05,590 są porównywane przez komputer. 787 00:35:05,590 --> 00:35:08,630 A potem, jeśli duży bar i mały bar są w porządku, 788 00:35:08,630 --> 00:35:11,220 są one zamieniane na mnie. 789 00:35:11,220 --> 00:35:15,120 >> Teraz jest to bardzo uciążliwe oglądać to, na pewno, 790 00:35:15,120 --> 00:35:18,630 bardzo długo, ale zauważ, takeaway-- belki poruszających się w prawo, 791 00:35:18,630 --> 00:35:20,460 małe bary poruszające się w lewo. 792 00:35:20,460 --> 00:35:23,380 Miejmy przerwać proces i to przyspieszyć 793 00:35:23,380 --> 00:35:27,330 się znacznie szybciej, więc możemy zorientować się na wysokim poziomie, co, 794 00:35:27,330 --> 00:35:29,970 rzeczywiście, sortowanie bąbelkowe robi. 795 00:35:29,970 --> 00:35:33,150 Rzeczywiście, nie jest to do propagacji prawa strona na liście 796 00:35:33,150 --> 00:35:35,260 lub tablica, większe bary. 797 00:35:35,260 --> 00:35:40,020 I odwrotnie, małe bary są przepuszczanie ich w dół w lewo 798 00:35:40,020 --> 00:35:42,950 choć w szybszym tempie niż wcześniej zrobił. 799 00:35:42,950 --> 00:35:45,850 Tak, trudniej zobaczyć się z ludźmi, ale wizualnie to rzeczywiście co 800 00:35:45,850 --> 00:35:46,540 się dzieje. 801 00:35:46,540 --> 00:35:49,110 >> Spróbujmy jednak zasadniczo Inne podejście teraz. 802 00:35:49,110 --> 00:35:52,387 Spróbujmy inaczej Algorytm w którym mamy cię 803 00:35:52,387 --> 00:35:59,640 faceci zaczynają w nich przy pozycji, co było to zamówienie tutaj. 804 00:35:59,640 --> 00:36:00,827 I idziemy do przodu teraz. 805 00:36:00,827 --> 00:36:02,910 I mam zamiar zrobić coś jeszcze prostsze, prawda? 806 00:36:02,910 --> 00:36:06,710 Z perspektywy czasu, znowu zamiana parami i znowu, prawie trochę sprytny. 807 00:36:06,710 --> 00:36:10,460 Zróbmy wszystko jeszcze bardziej naiwnie, gdzie jeśli chcę sortować tych ludzi, 808 00:36:10,460 --> 00:36:12,560 Pozwólcie mi zachować się dla najmniejszego elementu. 809 00:36:12,560 --> 00:36:14,570 Więc teraz, 4 jest Najmniej widziałem. 810 00:36:14,570 --> 00:36:15,695 Będę o tym pamiętać. 811 00:36:15,695 --> 00:36:17,750 Nie, 2 jest lepszy, i pamiętaj, że. 812 00:36:17,750 --> 00:36:20,730 1 jest również mniejszy. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 Jedno- jak masz na imię? 816 00:36:23,750 --> 00:36:24,400 >> ARTIE: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID MALAN: Artie. 818 00:36:24,610 --> 00:36:25,460 Tak, Artie, śmiało. 819 00:36:25,460 --> 00:36:27,043 Mam zamiar wyciągnąć cię z tej linii. 820 00:36:27,043 --> 00:36:28,400 Jeśli można tu wrócić. 821 00:36:28,400 --> 00:36:30,790 I muszę zrobić miejsce dla niego. 822 00:36:30,790 --> 00:36:32,040 Mamy punkt decyzyjny tutaj. 823 00:36:32,040 --> 00:36:36,000 Jak możemy zrobić miejsce dla Artiego tutaj Na początku, gdy liczba 1 należy? 824 00:36:36,000 --> 00:36:36,770 >> PUBLICZNOŚCI: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, może przenieść każdego. 826 00:36:38,950 --> 00:36:40,860 Ale proponujemy optymalizację. 827 00:36:40,860 --> 00:36:43,410 Że czuje się trochę irytujące dla mnie, aby zadać cztery osoby 828 00:36:43,410 --> 00:36:44,620 , aby przejść całą drogę w dół. 829 00:36:44,620 --> 00:36:45,520 Co jeszcze mogę zrobić? 830 00:36:45,520 --> 00:36:46,360 >> PUBLICZNOŚCI: Włączyć je. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Włączyć je. 832 00:36:46,850 --> 00:36:47,900 A co masz na imię? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jakub. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jakub, przenieść. 835 00:36:50,330 --> 00:36:54,440 Znacznie bardziej efektywne tylko mieć Jacob lokalizacje swapowe z Artie, 836 00:36:54,440 --> 00:36:56,710 w przeciwieństwie do wymuszania wszystkie cztery z tych ludzi, 837 00:36:56,710 --> 00:36:58,734 Dziękuję bardzo, do ich właściwej pozycji. 838 00:36:58,734 --> 00:37:01,150 Co jest ładne o Artie teraz, on jest w jego prawidłowym położeniu. 839 00:37:01,150 --> 00:37:02,060 Zróbmy to jeszcze raz. 840 00:37:02,060 --> 00:37:03,730 2, to najmniejsza liczba widziałem. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 jest zdecydowanie najmniejszy. 844 00:37:07,467 --> 00:37:08,550 Nie trzeba wykonywać żadnej pracy. 845 00:37:08,550 --> 00:37:09,320 Zróbmy to jeszcze raz. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Najmniejsza? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nie. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Pozwól mi pamiętać, 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Pozwól mi pamiętać, 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Najmniej mam widać na tym przejściu jest 3. 857 00:37:18,490 --> 00:37:20,340 Jeśli chcesz przyjść na zewnątrz. 858 00:37:20,340 --> 00:37:21,986 Gdzie jedziemy do was? 859 00:37:21,986 --> 00:37:22,860 A jak masz na imię? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, jesteśmy będziemy mieć do eksmisji. 862 00:37:25,780 --> 00:37:28,670 Jest to jednak bardziej wydajne po prostu zamienić dwie osoby, 863 00:37:28,670 --> 00:37:31,850 niż mieć wiele ludzi faktycznie ominąć nad. 864 00:37:31,850 --> 00:37:32,850 Teraz możemy to zrobić ponownie. 865 00:37:32,850 --> 00:37:34,980 Mam zamiar wybrać 4, więc wyjdź. 866 00:37:34,980 --> 00:37:36,540 I kto będzie poruszać? 867 00:37:36,540 --> 00:37:37,750 Numer 8, oczywiście. 868 00:37:37,750 --> 00:37:40,260 Gdybym teraz znaleźć numer 5, wyjdź. 869 00:37:40,260 --> 00:37:42,104 Numer 8 będzie się znowu eksmitowany. 870 00:37:42,104 --> 00:37:43,770 Mam teraz zamiar znaleźć numer 6 w miejsce. 871 00:37:43,770 --> 00:37:44,410 7 w miejscu. 872 00:37:44,410 --> 00:37:45,080 8 w miejscu. 873 00:37:45,080 --> 00:37:48,590 >> Co właśnie zrobił to coś, co nazywa wybór sortowania, 874 00:37:48,590 --> 00:37:52,560 i jeśli wyobrazić tego, że to będzie czuć się trochę inaczej. 875 00:37:52,560 --> 00:37:56,800 Idziemy do przodu i od tego Menu tutaj, to visualization-- 876 00:37:56,800 --> 00:38:02,920 zmieńmy to to-- chodź, Firefox. 877 00:38:02,920 --> 00:38:07,610 Zmieńmy to do wyboru rodzaju. 878 00:38:07,610 --> 00:38:11,830 I niech ją przyspieszyć, jak poprzednio, i uruchomić wizualizację teraz. 879 00:38:11,830 --> 00:38:13,990 I ten algorytm ma inny klimat. 880 00:38:13,990 --> 00:38:16,480 Na każdej iteracji, szczerze mówiąc, to jeszcze bardziej oczywiste. 881 00:38:16,480 --> 00:38:18,385 Jestem po prostu wybierając najmniejszy element. 882 00:38:18,385 --> 00:38:21,510 Teraz, szczerze mówiąc, mam trochę szczęścia, że Czas, w tym, że posortowane bardzo szybko. 883 00:38:21,510 --> 00:38:22,660 Elementy były przypadkowe. 884 00:38:22,660 --> 00:38:25,520 To nie jest, jak to będzie w końcu zobacz, zasadniczo szybciej. 885 00:38:25,520 --> 00:38:29,400 Ale zastanówmy się trzeci i ostatni podejście do tego, co tu się dzieje. 886 00:38:29,400 --> 00:38:36,230 Więc śmiało i przywrócić was po raz ostatni, aby być w tym celu tutaj. 887 00:38:36,230 --> 00:38:38,450 >> A teraz, mam zamiar być bardziej sprytny, 888 00:38:38,450 --> 00:38:40,220 tylko dopełniają nasze algorytmy. 889 00:38:40,220 --> 00:38:41,230 Mam zamiar to zrobić. 890 00:38:41,230 --> 00:38:43,140 Mam zamiar nie iść tam iz powrotem tak wiele. 891 00:38:43,140 --> 00:38:44,900 Szczerze mówiąc, jestem zmęczony Wszystko to postępowy. 892 00:38:44,900 --> 00:38:47,691 Mam zamiar wziąć to, co ja podane na początku listy 893 00:38:47,691 --> 00:38:49,460 i idę do sortowania że tu i teraz. 894 00:38:49,460 --> 00:38:50,140 Więc jesteśmy. 895 00:38:50,140 --> 00:38:51,030 Numer 4. 896 00:38:51,030 --> 00:38:53,680 Mam zamiar wstawić numer 4 do posortowanej listy. 897 00:38:53,680 --> 00:38:54,180 Gotowe. 898 00:38:54,180 --> 00:38:58,300 I twierdzą teraz, i tylko do tego więcej jasne, to część mojej listy są sortowane. 899 00:38:58,300 --> 00:39:02,610 To trochę głupie zastrzeżenia, ale w rzeczywistości 4 jest sortowane na liście wielkości jednego. 900 00:39:02,610 --> 00:39:04,210 Teraz mam zamiar wziąć na numer 2. 901 00:39:04,210 --> 00:39:07,670 Numer 2 Mam teraz zamiar włożyć w odpowiednie miejsce. 902 00:39:07,670 --> 00:39:08,680 Więc skąd 2 należą? 903 00:39:08,680 --> 00:39:09,824 Oczywiście, tutaj. 904 00:39:09,824 --> 00:39:11,490 Więc idź naprzód i przenieść z powrotem, jeśli można. 905 00:39:11,490 --> 00:39:14,406 I dlaczego nie faceci po prostu wziąć Twoja muzyka stoi z wami ten czas. 906 00:39:14,406 --> 00:39:17,020 I niech cię siłą wkładać na początku listy. 907 00:39:17,020 --> 00:39:17,936 Więc trochę więcej pracy. 908 00:39:17,936 --> 00:39:20,890 Musiałem przenieść Jacob wokół, a jak masz na imię? 909 00:39:20,890 --> 00:39:21,420 >> AMIN: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID MALAN: Amin. 911 00:39:22,270 --> 00:39:24,350 Ale przynajmniej nie tam iz powrotem. 912 00:39:24,350 --> 00:39:25,739 Po prostu biorę rzeczy, jak przejść. 913 00:39:25,739 --> 00:39:27,530 Ja tylko je wkładając w odpowiednim miejscu. 914 00:39:27,530 --> 00:39:29,220 6, to jest rzeczywiście bardzo proste. 915 00:39:29,220 --> 00:39:31,510 Niech cię tam wprowadzić, jeśli po prostu chciałem, aby przenieść się nieznacznie. 916 00:39:31,510 --> 00:39:32,870 Numer 8, również dość łatwe. 917 00:39:32,870 --> 00:39:33,741 Tam. 918 00:39:33,741 --> 00:39:34,240 Cholera. 919 00:39:34,240 --> 00:39:37,590 Numer 1, nie możemy po prostu SWAP z Amin tutaj, 920 00:39:37,590 --> 00:39:39,340 bo to się dzieje bałagan zamówienia. 921 00:39:39,340 --> 00:39:40,660 Więc musimy być trochę bardziej sprytny. 922 00:39:40,660 --> 00:39:42,770 Tak, Artie, jeśli można kopii zapasowej na chwilę. 923 00:39:42,770 --> 00:39:46,550 Idziemy dalej i zmieniać się, w przeciwieństwie do naszych poprzednich algorytmów, 924 00:39:46,550 --> 00:39:50,910 aby zrobić miejsce dla Artiego tu na początku. 925 00:39:50,910 --> 00:39:54,690 Tak więc na koniec dnia, ja rodzaj robi to, co chciałem, aby uniknąć przed. 926 00:39:54,690 --> 00:39:57,770 A więc mój algorytm sortowania z odwrócona, intelektualnie, 927 00:39:57,770 --> 00:39:59,070 od tego, co pierwotnie było. 928 00:39:59,070 --> 00:40:01,240 Robię tylko to, do przesuwania w innym punkcie. 929 00:40:01,240 --> 00:40:02,291 Teraz jestem na 3. 930 00:40:02,291 --> 00:40:02,790 Cholera. 931 00:40:02,790 --> 00:40:04,039 Musimy zrobić jeszcze więcej pracy. 932 00:40:04,039 --> 00:40:05,060 Więc wcisnąć cię. 933 00:40:05,060 --> 00:40:09,360 Przejdźmy 8, 6, 4-- oh oh-- i 3 pójdzie tam. 934 00:40:09,360 --> 00:40:11,490 Tak przynajmniej niewielkie oszczędności tym razem. 935 00:40:11,490 --> 00:40:13,100 7, nie za dużo do zrobienia. 936 00:40:13,100 --> 00:40:15,370 Więc jeśli chcesz pop z powrotem, niech wstawić ciebie. 937 00:40:15,370 --> 00:40:17,440 I wreszcie, 5, jeśli Ciebie chcesz pop z powrotem, my 938 00:40:17,440 --> 00:40:22,610 trzeba przesunąć ty, ty, Ci, aż pięć znajduje się na miejscu. 939 00:40:22,610 --> 00:40:25,670 >> Więc teraz to zobaczyć na Wysoki poziom graficznie 940 00:40:25,670 --> 00:40:31,080 zróbmy to algorytm wizualizacja jeden dodatkowy czas. 941 00:40:31,080 --> 00:40:33,580 Więc są to nazywamy wstawiania rodzaju. 942 00:40:33,580 --> 00:40:37,700 Będziemy działać tak jak to szybko, i uruchom go tutaj. 943 00:40:37,700 --> 00:40:39,580 I to też ma inny charakter. 944 00:40:39,580 --> 00:40:42,180 To coś w rodzaju coraz lepiej i lepiej, ale nigdy nie jest idealny 945 00:40:42,180 --> 00:40:44,630 aż pójdę i gładka w tych luk. 946 00:40:44,630 --> 00:40:47,860 Bo, znowu, ja tylko przy co Jestem z nich otrzymuje od lewej do prawej. 947 00:40:47,860 --> 00:40:50,350 Więc nie miałem tyle szczęścia że wszystko było idealne. 948 00:40:50,350 --> 00:40:54,190 Dlatego musieliśmy je trochę mispositions że trwałe w czasie. 949 00:40:54,190 --> 00:40:58,890 >> Tak więc wszystkie te algorytmy wydają pracować na nieco innych kroków. 950 00:40:58,890 --> 00:41:02,030 W rzeczywistości, co mówisz, jest najlepszym lub najszybszym do tej pory? 951 00:41:02,030 --> 00:41:03,450 Sortowanie bąbelkowe, w pierwszej kolejności? 952 00:41:03,450 --> 00:41:05,000 Rodzaj selekcji, drugi? 953 00:41:05,000 --> 00:41:08,450 Wstawiania sortowania, trzeci? 954 00:41:08,450 --> 00:41:10,710 Słyszę jakieś rodzaje selekcji. 955 00:41:10,710 --> 00:41:13,280 Inne myśli? 956 00:41:13,280 --> 00:41:16,880 >> Tak więc okazuje się, że Wszystkie z tych algorytmów 957 00:41:16,880 --> 00:41:22,400 są zasadniczo tak samo skuteczne, jak każdy other-- lub odwrotnie, tak jak 958 00:41:22,400 --> 00:41:25,980 nieefektywna wzajemnie ponieważ zasadniczo nie możemy zrobić 959 00:41:25,980 --> 00:41:28,120 lepiej niż wszystkie trzy tych algorytmów. 960 00:41:28,120 --> 00:41:29,990 I to jest trochę biały kłamstwo, też. 961 00:41:29,990 --> 00:41:32,580 kiedy mówię, jako wydajny lub nieskuteczne, 962 00:41:32,580 --> 00:41:35,040 to przynajmniej na super duże wartości n. 963 00:41:35,040 --> 00:41:38,450 Gdy mamy tylko osiem osób tutaj, a może 50 lub tak paski na ekranie, 964 00:41:38,450 --> 00:41:41,645 będziesz absolutnie zauważyć różnice wśród tych trzech algorytmów. 965 00:41:41,645 --> 00:41:44,020 Ale jak N, liczba osób lub liczbę cyfr 966 00:41:44,020 --> 00:41:46,350 lub liczba osób w telefonie książka, lub liczba stron internetowych 967 00:41:46,350 --> 00:41:48,230 w bazie danych Google robi się coraz większy i większy, 968 00:41:48,230 --> 00:41:51,650 zobaczymy, że wszystkie trzy z nich Algorytmy są rzeczywiście bardzo słaba. 969 00:41:51,650 --> 00:41:54,060 I zasadniczo nie możemy zrobić lepiej. 970 00:41:54,060 --> 00:41:56,830 >> Rzućmy okiem, w końcu, na to, co mógłby te algorytmy 971 00:41:56,830 --> 00:41:59,520 brzmieć jak w Kontekst kilku innych 972 00:41:59,520 --> 00:42:03,550 oraz w zasadzie tę wizualizacja tutaj 973 00:42:03,550 --> 00:42:06,860 która wprowadzi nas do liczbę algorytmów. 974 00:42:06,860 --> 00:42:10,330 Idziemy dalej i pogratulować Tutaj nasi uczestnicy, z których wszystkie 975 00:42:10,330 --> 00:42:11,690 sortowane się bardzo dobrze. 976 00:42:11,690 --> 00:42:15,124 Jeśli chcesz wziąć prezent pożegnalny. 977 00:42:15,124 --> 00:42:16,540 Możesz zachować swoje numery, jak również. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 I co zobaczysz, a raczej usłyszeć, teraz, 980 00:42:22,520 --> 00:42:25,710 jest to, że stawiamy dźwięki Do każdego z tych prętów 981 00:42:25,710 --> 00:42:28,660 i powiązać go z oprogramowaniem, różne częstotliwości dźwięku, 982 00:42:28,660 --> 00:42:33,970 można owinąć swój umysł więcej audioly wokół tego, co każdy z tych rzeczy 983 00:42:33,970 --> 00:42:34,470 wyglądać. 984 00:42:34,470 --> 00:42:39,325 Pierwszy z nich jest wprowadzenie sortowania 985 00:42:39,325 --> 00:42:44,275 >> [DŹWIĘKI] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Jest to sortowanie bąbelkowe. 988 00:42:49,720 --> 00:42:54,175 >> [DŹWIĘKI] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Sortuj wybór. 991 00:43:18,222 --> 00:43:22,596 >> [DŹWIĘKI] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Coś, co nazywa seryjnej sortowania. 994 00:43:35,150 --> 00:43:38,140 >> [DŹWIĘKI] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome sort. 997 00:43:51,278 --> 00:43:56,390 >> [DŹWIĘKI] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> To jest to dla CS50. 1000 00:44:09,430 --> 00:44:13,360 Do zobaczenia w środę. 1001 00:44:13,360 --> 00:44:16,671 >> Narrator: A teraz, "Głębokie Myśli, "by Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Dlaczego jest to dla pętli? 1004 00:44:21,590 --> 00:44:23,200 Dlaczego nie zrobić to lepiej? 1005 00:44:23,200 --> 00:44:25,970 Chciałbym zrobić pięć pętli. 1006 00:44:25,970 --> 00:44:28,720 >> [Śmiech]