DAVID MALAN: Wszystko w porządku.
Jest to więc CS50, a to Teraz początek trzeciego tygodnia.
>> Tak, aż do teraz, mamy pisze programy w C
które wyglądają trochę coś jak to tutaj.
Więc mamy kilka ostry zawiera na górze.
Mamy int, główny, nieważne, i wtedy coś zrobić w środku,
jakiś kawałek kodu wewnątrz tej funkcji.
Jednak klucz jest to, że byliśmy mówiąc nieważne tutaj.
Więc nieważne, cały ten czas, określa że ten program, po uruchomieniu,
można uruchomić tylko poprzez jego nazwę.
Nie można wpisać inne słowa lub Numery po nazwie programu, gdy
uruchomienie go.
Tak więc, na przykład, w przypadku programu były kompilowane do pliku o nazwie hello,
można zrobić ./hello, ale to jest to.
>> Tylko w ten sposób, że można wkład do tego programu
jest przez wywołanie funkcji.
Na przykład, co funkcja my do tej pory była używana
aby uzyskać wejście od użytkownika?
>> PUBLICZNOŚCI: Uzyskaj ciąg.
DAVID MALAN: Aby uzyskać ciąg, lub uzyskać int, lub widziałeś inne,
nawet jeśli nie korzystali z nich jeszcze, jak inne długości długich i podobne.
Ale załóżmy, że rzeczywiście chcesz uruchomić
pisania programów, które są nieco bardziej wszechstronny, i, szczerze mówiąc, trochę więcej
jak poleceń, które zostały dostaję, miejmy nadzieję,
trochę przyzwyczajeni.
Jak cd przestrzeni Dropbox.
To, oczywiście, zmiany Twój katalogu, zakładając
jesteś w domu Johna Harvarda Katalog, do folderu Dropbox.
Tymczasem, jak to polecenie Tworzy nowy katalog o nazwie pset2,
a może masz już lub wkrótce do problemu ustawić dwa.
Dodać Witam, oczywiście, jest polecenie że buduje program o nazwie komentarzy
z pliku o nazwie komentarzy kropka c.
I w każdym z nich przypadki, teraz, mieliśmy
dostarczyć argument na tak zwane wiersz polecenia, szybka migać,
tak, że producent wie, co do budowy, a więc że mkdir wie, co folder, do tworzenia,
i tak, że cd wie gdzie chcesz iść.
Ale do tej pory, wciąż mówiąc że głównym, domyślna funkcja,
ma wyraz void wewnątrz tych nawiasów,
co oznacza, że nie może podjąć żadnych argumentów.
>> Więc od dzisiaj, to, co mamy zamiar zrobić
jest, mamy zamiar rozpocząć wsparcie takie rzeczy nawet.
W rzeczywistości, w tym przypadku, co cię nie zazwyczaj ręcznie wpisać,
Sprawdź, robi to dla nas, nie ma
jeden, jedno, dwa, trzy dodatkowe struny po nazwie programu jest
dzyń.
Więc w jaki sposób to osiągnąć?
>> No cóż, od dzisiaj, w przypadkach, gdy chcemy
o dostarczenie danych poprzez tzw linii poleceń,
mamy zamiar rozpocząć dodawanie o co w yellow--
zastępując nieważne z int argc przecinkami Ciąg argv otwarty uchwyt nawiasu.
Teraz to jest ciekawe na kilka powodów.
Jeden, to będzie zapiszmy Programy, które są trochę bardziej dynamiczny.
Ale, co nieodparcie, to się otwiera
obecnie rozmowy w celu co może naprawdę tablice
być stosowane, na co sznurku naprawdę jest pod maską,
do przyszłego tygodnia, kiedy zaczynamy nurkować w jeszcze głębiej, w jaki urządzenie jest
co się z treścią pracy rzeczy.
Ale teraz, niech rysować, być może, obraz.
>> Podczas pisania programu z głównym oświadczył
W ten sposób, tak, że główną przyjmuje dwa argumenty int
i-- jaki typ danych jest drugi argument?
>> PUBLICZNOŚCI: Array.
DAVID MALAN: Array.
Tak to wygląda na pierwszy rzut oka, jak to ciąg, ale zauważ nawiasach kwadratowych.
Przypomnijmy, że wprowadzone ostatnio Pojęcie tablicy.
I tablice używać nawiasów kwadratowych w kilku kontekstach.
Możesz korzystać z placu Uchwyty iść do tablicy
i uzyskać konkretny element, jak Wspornik 0 lub 1 lub wspornik wspornik 2.
Ale widzieliśmy, czy krótko, w zeszłym tygodniu, że również
korzystać z tych nawiasach kwadratowych do Oświadczam, rozmiar tablicy,
jeśli z góry wiadomo, ile ints lub ile ciągi lub cokolwiek
rzeczywiście chcesz.
Tak więc okazuje się, że jest trzeci kontekst tutaj
że nie ma numeru wewnątrz w nawiasach kwadratowych.
Po określeniu, jak ja tutaj, nazwa coś jak argv,
który jest tylko fantazyjny sposób mówiąc wektor argumentów, które
jest inny fantazyjny sposób mówiąc tablicę argumentów,
otwarte tylko wspornik nawiasu oznacza, że ​​nie muszą
z góry wiedzieć, jak duże Tablica będzie,
ale wiesz, że to będzie tablica.
Więc jeśli nie wiesz, Numer nie umieścić go tam,
na otwartym uchwytem blisko wspornika Oznacza to, że argv nie jest ciągiem znaków,
ale tablica łańcuchów.
Więc składniowo, jeśli Ciebie wracam w zeszłym tygodniu,
to jest bardzo podobne do powiedzenie coś jak int wieku otwarta nawiasów,
i wtedy coś później.
Więc co to ma wyglądać?
Niech faktycznie narysować obrazek.
Więc po uruchomieniu tego programu z głównymi po dwa argumenty zdefiniowane wewnątrz
z tych nawiasach, to w istocie mają co najmniej dwa klocki
z pamięci, a do Ciebie pod wyciągiem.
Jeden, jak będę zwraca jako prostokąta, będzie nazywany argc.
I tak jak szybki Przypomnę, co to jest typ danych argc?
Więc jest to int.
Tak więc ilość będzie iść w argc-- tur
się, że stoi na liczby argumentów.
Tymczasem ja wyciągnąć argv jako tablicy.
I naprawdę nie wiem, jak długo to będzie,
więc dla dzisiejszych potrzeb kropka kropka kropka.
Może dostać jakiegoś długości.
Ale ja na zdjęciu co najmniej cztery prostokąty.
Więc argv kawałek pamięci, która przechowuje ciąg ciąg ciąg dot dot dot,
i argc to tylko jeden kawałek pamięci do liczb całkowitych.
>> Więc teraz, bądźmy trochę bardziej precyzyjny.
W przypadku, gdy mam ciągi w tej tablicy, zwany
argv, chcę dostać się do nich indywidualnie, tak jak w zeszłym tygodniu,
będziemy używać notacji jak wspornika argv 0
dostać pierwszą rzeczą tablicę.
Argv uchwyt 1, aby uzyskać Druga rzecz, i tak dalej.
Kluczem tutaj jest nadal jesteśmy 0 indexed-- my wciąż licząc od 0.
Więc teraz niech faktycznie umieścić coś w tym.
Gdybym skompilować program o nazwie witam z pliku o nazwie komentarzy kropka c,
a następnie uruchomić ten program z kropką slash komentarzy,
co robi mój komputer, mój laptop, wygląda pod maską
Chwilę uruchomić kropka slash komentarzy i naciśnij Enter?
Cóż, to jest być może co moglibyśmy opisać
jako treść Twoim komputerem pamięci lub pamięci RAM-- Random Access.
Innymi słowy, komputer dla ciebie jakoś magicznie,
umieszcza numer 1 w argc, AKA argcount, i stawia dosłownie ciąg
./hello w uchwycie argv 0.
Nie mam pojęcia, szczerze mówiąc, co jest Uchwyt argv 1 albo 2 albo 3,
dlatego, jeśli użytkownik nie ma wpisane nic oprócz ./hello,
będziemy zakładać, że te są najbardziej prawdopodobne wartości śmieci,
że tak powiem.
Te fragmenty pamięci istnieje, ale to nie zależy od nas
patrzeć na nich, ponieważ argcount jest tylko jeden.
>> Teraz, w międzyczasie, jeśli I Napisać uruchomić inny program,
CD, które jest właściwie komenda, w migającym prompt-- przestrzeni cd
Dropbox-- gdy uruchamiam, że skutecznie, gdy program cd uruchomieniu argc,
wewnątrz pamięci mojego komputera, to dla Najbardziej najkrócej drugi numer 2.
A następnie wspornik o ma argv cd, wspornik argv 1 ma Dropbox,
i oczywiście polecenie kończy, więc wszystkie te pamięci
zasadniczo odchodzi i służy do czegoś innego.
I dlatego mówię, tylko ułamek sekundy.
>> Tymczasem, jeśli robimy mkdir pset2, obraz wygląda prawie tak samo,
ale z różnych ciągów wewnątrz argv.
Jeśli zrobić clang kreskę komentarzy witam kropka c, sam pomysł.
Więcej rzeczy jest wypełnione przez argv i argc, oczywiście, jest 4.
Tak więc, innymi słowy, Pomimo tego wybór
może być kropka kropka kropka, niektórych zmienna długość, by tak rzec,
zawsze wiesz, gdzie koniec tego jest, bo argc powie ci
w którym momencie trzeba się zatrzymać patrząc na elementy w argv.
Można patrzeć tylko na czterech w sumie w tym przypadku.
>> Więc teraz przyjrzeć się, być może, prosty program.
Który po prostu mówi cześć do kogoś takiego jak Zamyla.
Więc twierdzić Zamierzam napisać program za chwilę, za pomocą którego mógłbym zrobić
./hello miejsca Zamyla, a następnie chcę mój program wydrukować coś
super proste jak "Witaj, Zamyla."
Teraz w przeszłości używaliśmy getString.
Tak więc w przeszłości, nawet jesteś nowy w programowaniu,
kursy są można wzbudzać program, który wykorzystuje getString
a następnie używa printf aby przywitać się Zamyla.
Ale nie używać getString ten czas.
Pozwól, że zamiast iść do Appliant i nie obejmują standardowe I o kropki h.
Pozwól, że to także CS50 dot godz.
Teraz int main, a teraz jestem nie zrobi nieważne dziś.
Zamiast tego, mam zamiar zrobić int argc Ciąg argv otwarty uchwyt nawiasu,
nie podając numeru.
A teraz tutaj jest mój tzw zrobić.
Co mam teraz zrobić, to, że jestem zamiar zrobić trochę skok wiary,
Mam zamiar założyć, że użytkownik jest będzie prawidłowo korzystać z tego programu,
a ja po prostu będzie zrobić printf komentarzy,% Sn.
Więc nic nowego.
Ale chcę teraz umieścić cokolwiek słowo Typy użytkowników po nazwie programu.
Więc jeśli ja ./hello miejsca Zamyla, ja chcą w jakiś sposób programowo dostęp
cytatu "Zamyla." więc może pójść do mojego argumentu wektora,
moja tablica łańcuchów i jeśli komendy, ponownie, była ./hello miejsca Zamyla,
co chcę zrobić numer umieścić w argv tutaj?
PUBLICZNOŚCI: 1.
DAVID MALAN: 1, ponieważ Okazuje się wspornik 0
będzie Nazwa programu, jak widzieliśmy.
Tak Uchwyt 1 jest pierwsze słowo że ja, użytkownik, zostało wpisane.
Mam zamiar iść do przodu i zapisz to.
Mam zamiar iść do mojego folderu gdzie mam umieścić ten plik.
Mam zamiar zrobić, aby cześć 3.
OK Comp Io.
./hello Zamyla Enter.
Co zrobiłem źle?
Byłem zaskoczeni ja tam tylko na chwilę.
Co zrobiłem źle?
>> PUBLICZNOŚCI: Nazwa.
>> DAVID MALAN: plik jest faktycznie nazywa hello3.c.
I zrobiłem to tylko dla spójność, ponieważ mamy
mieli hello.c w przeszłości w trybie online.
Warto więc rozwiązać ten ./hello Uchwyt kreska 3 Zamyla.
Enter.
A teraz mamy znajomych, Zamyla.
Tymczasem, można zmienić na być Rob, czy naprawdę każdy inny wyraz.
>> Ale rozważmy przypadek rożny.
Czego można się spodziewać się stanie, jeśli Nie mam wpisać czyjeś imię w ogóle?
>> PUBLICZNOŚCI: Błąd.
>> DAVID MALAN: błąd z jakiejś, być może.
Zobaczmy.
Enter.
Null.
Tak więc w rzeczywistości jest printf Trochę nas ochronna
tu, i dosłownie drukowania otwarte paren null, ale jeszcze gorsze rzeczy mogą się zdarzyć.
I tylko w celu wykazania coś, czego absolutnie
nie należy robić, idziemy w tu i zacząć zabawę.
Prawda?
Jeśli wiem, że obraz w pamięć jest w istocie to,
argv Uchwyt 1 ma Zamyla, argv Wspornik 0 ma ./hello lub ./hello-3.
Co znajduje się w przedziale 2?
Więc mogę odpowiedzieć na to pytanie kwestionuje się, prawda?
Mogę tylko zmienić 1 na 2.
Teraz mogę przekompilować cześć 3, ./hello3 Miejmy powiększyć i naciśnij Enter.
Ups.
Nie cudzysłów.
Ciekawe.
Tak, że niby fajnie co jeszcze jest tutaj.
>> Więc co jeszcze jest w środku mojego laptopa?
Ratujmy go z uchwytem 3.
Dodać hello3, ./hello-3.
Ciekawy.
A teraz przejdźmy naprawdę bold-- 50.
Więc to jest bardzo głębokie nurkowania do pamięci mojego komputera.
50 indeksy w.
Tak, aby cześć 3 ./hello-3.
Ciekawy.
Dobra, teraz jestem po prostu dostanie lekkomyślny.
Chodźmy do 5000.
Wszystko w porządku.
Więc pozwól mi ponownie skompilować.
Dodać hello3, ./hello-3.
OK.
Teraz niektórzy z was, nie może być żarówka będzie wyłączona.
Jak wielu z was widziałem ten komunikat przed?
OK.
Tak, to dlaczego?
>> Kursy are-- i nie inaczej rzeczy, które mogą powodować to,
i wyraźnie, że jesteś w dobrym company-- mamy jasno
spowodowało to, co się nazywa błąd segmentacji.
I długie opowiadanie na dzisiaj, ja dotknął segment pamięci
że nie powinienem mieć.
Gdzie odcinek po prostu oznacza, kawałek z pamięci, że nie powinienem mieć.
Teraz komputer gwarantuje, że jeśli uruchomić ./helloZamyla że mogę dotknąć argv
być 0 i argv Uchwyt Uchwyt 1.
Ale argc jest wartość 2, co oznacza, że ​​jestem tylko allowed-- to rodzaj honoru
system-- dotykać Uchwyt Uchwyt 0 i 1.
Jeśli pójdę dalej, nie absolutnie będzie tam pamięć.
Mój RAM istnieje fizycznie w komputerze.
Ale kto wie, co tam jest?
Rzeczywiście, Biegnę wielokrotność programy w jednym czasie.
Może mam seen-- jeśli nie były robi to na Appliant
ale na moim komputerze Mac lub PC-- mógłbym widać zawartość wiadomości e-mail.
Może widziałem natychmiastowy Komunikat I niedawno wysłany.
Wszystko, co może być ociąganie się wokół pamięci
może być dostępny w formie Zapis ten arbitralny kwadratowy uchwyt.
Albo, co gorsza, może być Znaleziono jeden z moich haseł
że ja niedawno wpisane, że Program był przechowywany w pamięci, tak jak
mnie uwierzytelniania i a potem po prostu go trochę w lewo
w pamięci RAM, aż rzuciłem ten program.
>> I rzeczywiście, jest to jedna z niebezpieczeństwo i jeden uprawnienia
z wykorzystaniem języka jak C Masz nieograniczony dostęp
do całej zawartości z pamięci danego programu,
i co źli mogą nawet nie w tych cases--
zwłaszcza gdy dostać się do programowania WWW
pod koniec semestru, to będzie ponownie ten topic-- się rozglądamy,
potencjalnie, ktoś komputer jest pamięci i znaleźć takie ciekawe rzeczy
jak widzieliśmy tam.
Albo nawet jeszcze gorzej, hasła, że lub ona może używać do robienia złych rzeczy.
>> Tak wyraźnie, że nie powinien tego zrobić, bo dziwne rzeczy zaczynają się dziać.
Rzeczywiście, to zawiesza programu.
Byłoby to równoważne Mac OS lub Windows
Okno programu po prostu znikają.
Nieoczekiwany błąd.
W środowisku wiersza polecenia widzimy coś takiego.
Ale właśnie dlatego, jest mi po prostu dotykając pamięci, która nie należy do mnie.
>> Warto więc bronić się przed tym a nieco inaczej
patrząc na ten program tutaj.
A więc znowu, szkielet które widzieliśmy earlier--
a ja tym razem int podkreślił.
I cały czas ma główny rzeczywiście zwracane wartości.
Mimo, że w większości z naszego wykładu przykłady nigdy nie raz wykorzystane
nic w głównym powrócić.
Po prostu napisz printf zamknij nawias klamrowy i to jest to.
Ale za darmo, co kompilator robi dla Ciebie,
skutecznie, zwraca 0 dla Ciebie.
Okazuje out-- i to trochę counterintuitive-- że 0 jest dobra.
To nie znaczy fałszywe per se.
0 jest dobre, a wszelkie nie-0 wartości, świat postanowił,
może oznaczać błąd.
Więc jeśli kiedykolwiek zawiedli coś się na komputerze,
lub program właśnie na Ciebie i zmarł dotarłeś jakieś błędne okno
na ekranie, mówiąc błąd ujemny 49 lub błąd 23--
niektóre pozornie to arbitralne value-- ponieważ programista zakodowane
wartość jak pozytywny lub negatywny 49 23 reprezentować dowolną liczbę, ośmielę się powiedzieć,
z 4 miliardów możliwych rzeczy że może nie udać się w programie.
>> Więc jak mogę wziąć Zaletą tego sam?
Cóż, pozwól mi otworzyć program że napisałem wcześniej,
i grzebać w Internecie nazywa cześć 4.
I to jest prawie identyczne, z tym że Jej ale trochę Sprawdzanie błędów.
W tym przypadku, mam ponownie oświadczył Głównym jako biorąc dwa argumenty,
ale tym razem, na linii 17, informacja Robię kawałek testow.
Jestem upewnić się, że argc równa jest równa 2.
Bo jeśli tak jest, że oznacza, że ​​można bezpiecznie
nie tylko dotknąć, ale wspornik wspornik 0 1.
I idę do przodu i wydrukować, w tym przypadku, Zamyla lub Rob
lub cokolwiek słowo Wpisałem się.
A teraz tylko po to żeby nieco bardziej właściwe,
Zamierzam wyraźnie powrócić 0 oznaczać wszystkie dobrze.
Nic złego się nie stało.
>> Ale zwyczajowo, zamierzam powrót 1, lub mówiąc każda wartość niż 0,
Jeśli coś poszło nie tak.
Teraz użytkownik nie będzie naprawdę zauważyć, co się dzieje.
Rzeczywiście, jeśli pójdę do tego katalogu, możemy powiększać i robią cześć 4,
./hello-4 Zamyla zachowuje się jak oczekuję.
Ale jeśli nie wpisz zamiast nic, nic się nie dzieje,
ale to nie psuje.
A jeśli zamiast zrobić coś jak Rob jest Proctor
w Thayer-- dzielenia dowolne informacje.
Ale informacja, argv 1, 2, 3, 4, i 5 powinien istnieć w pamięci.
To też nie to, co jest mój program oczekuje,
bo już sprawdzone, czy argc równa jest równe 2 lub nie.
Więc jestem teraz bronić się przed tym.
>> Teraz, jak na bok, my programmer-- czy raczej my users--
Nie widać, że wartość 0 lub 1, ale stosując Narzędzie o nazwie Debugger lub innych narzędzi,
jak zobaczymy, zanim długo, programista
można rzeczywiście zobaczyć, co może być nie tak wewnątrz programu.
>> Tak więc, wszelkie pytania dotyczące argc?
Tak.
>> PUBLICZNOŚCI: Widziałem gdzie nie miały charakteru, [niesłyszalne]
tylko, że gwiazdy, jak sznur d Znak gwiazdki przecinek.
Są one równoważne tutaj?
>> DAVID MALAN: Są.
Więc pytanie jest, masz sporadycznie widziane programy
tak że nie powiedzieć, wspornik łańcuch argv
ale zamiast powiedzieć coś jak char uchwycie gwiazda argv.
I jest jeszcze inny warianty, które można zobaczyć.
Są one rzeczywiście równoważne.
Na razie mamy ich rodzaju kółka
on w postaci łańcucha w CS50 biblioteki, ale w nieco ponad tydzień
i tak mamy zamiar usunąć, że całkowicie i rzeczywiście przeszkoda
Sprawdź co char i gwiazdy są, i jak te odnoszą się do pamięci
reprezentacja bardziej ogólnie.
Więc wrócimy do tego.
>> Inne pytania na temat naszej argv i argc?
Tak.
PUBLICZNOŚCI: Dlaczego powrót Błąd [niesłyszalne]?
DAVID MALAN: Dlaczego to zrobił zwróci błąd only-- oh!
W poprzednim przypadku, kiedy zostały futzing dokoła z pamięci,
dlaczego to tylko zwróci błąd kiedy naprawdę wpisane wielką liczbę?
Krótka odpowiedź jest taka, że ​​po prostu miał szczęście.
Ogólnie rzecz biorąc, komputer przydziela pamięć w kawałki,
i dał mi wystarczająco duży fragment, że I uciekł, nie będąc zauważonym,
dotykać uchwytu wspornika 2, 3, wspornik 50, ale jak tylko pchnął
moje szczęście, poszedłem poza Granice fragmencie pamięci
System operacyjny dał mi.
I wtedy go zaciśnięta w dół i powiedział, nie.
Błąd segmentacji.
Tak.
>> PUBLICZNOŚCI: Jak działa komputer znać wartość argc?
>> DAVID MALAN: Jak Komputer poznać wartość argc?
Po uruchomieniu programu, program, przez naturę wierszu miga,
jest przekazywane na tablicę Słowa, które zostały wpisane
w wierszu polecenia, które było wpisane w wierszu.
I tak to jest twój operacyjny System, który zasadniczo
zapełnia argumentów głównych dla Ciebie.
Więc to jest jedna z usług że pojawi się, jakby skrycie
pod maską system operacyjny.
Inne pytania?
Tak.
>> PUBLICZNOŚCI: Co rdzeń nora oznacza?
DAVID MALAN: Co rdzeń nora oznacza?
Więc to jest dobre pytanie.
I pozwól mi wrócić do katalog ten tutaj.
I można zauważyć, że Mam nowy plik tam.
To rzeczywiście zwany rdzeń, i to faktycznie zazwyczaj przyzwoite wielkości pliku.
To jest w zasadzie zrzut zawartość pamięci mojego programu
lub pamięci RAM, gdy rozbił.
I będzie przydatna potencjalnie, diagnostycznie,
raz porozmawiamy w przyszłym wykładu i rozdział na temat debugowania,
bo rzeczywiście można zrobić odpowiednik autopsji cyfrowej
na tym pliku, aby pomóc dowiedzieć się, co zrobiłeś źle w swoim programie.
Tak.
>> PUBLICZNOŚCI: Czy argc polecenia w może sam, lub wybrać nazwę,?
>> DAVID MALAN: Dobre pytanie.
Czy argc polecenia sam w sobie, czy można nazwać to coś?
To zdecydowanie nie polecenie.
To jest po prostu zmienna Nazwa lub argument za,
my i tak absolutnie może wywołać to foo,
moglibyśmy nazwać ten pasek, które mają tendencję się iść do słów komputerowych
Naukowiec idzie.
Ale zwyczajowo używamy argc i argv.
Ale to tylko ludzka konwencja, nic więcej.
Wszystko w porządku.
Tak więc okazuje się, że byli mówiąc trochę białym lie--
i szczerze mówiąc, w przyszłości, zobaczysz byliśmy mówiąc inne białe kłamstwa.
Ale teraz, będziemy obierać powrót jednego z nich.
W tym przypadku, gdy wcześniej tutaj prowadził program jak ./hello lub ./hello-3
Zamyla mieliśmy zawartość mojego pamięci komputera, patrząc z grubsza jak
tego.
Ale pamiętam, co ciąg jest.
Co powiedzieć, co tydzień temu Ciąg rzeczywiście jest pod maską?
PUBLICZNOŚCI: Tablica znaków.
DAVID MALAN: To Tablica znaków, prawda?
Więc może mamy tablicę struny, ale z kolei ciąg
jest tablicą znaków.
Więc jeśli naprawdę chcesz być analny, kiedy rysuję tego obrazu,
Powinien naprawdę być rysunek to trochę tak,
przy czym w każdym z tych indeksy mojej tablicy argv,
nie jest sama w sobie cały łańcuch który sam w sobie jest w tablicy.
I teraz białe kłamstwo Dzisiaj mówimy
jest to, że obraz nie wygląda całkiem tak.
W rzeczywistości, są małe kwadraty zazwyczaj poza dużych prostokątów
tam.
Ale wrócimy do tego niebawem.
Ale to ./hello backslash 0, że jest specjalny znak, że
rozgranicza koniec łańcucha, a my mamy jeszcze jeden po
Nazwa Zamyla za.
Więc co to oznacza?
>> Cóż, pozwól mi iść do przodu i otworzyć dwa inne przykłady
, które są dostępne w Internecie.
Jeden nazywa argv1.c i drugi argv2.
Jest to program prosty, że super- różni się od poprzednich programów
się, że obecnie używam argc i argv tutaj.
A teraz mam dla integracji z pętli w wierszu 18 od i = 0 na maksymalnie argC.
I co ja mam zrobić z tej linii kodu tutaj?
W języku angielskim.
To oczywiście pokazuje wykorzystanie argc.
Ale w języku angielskim, co robi to zrobić, jeśli uruchomić ten program?
Tak?
>> PUBLICZNOŚCI: To będzie drukować ekran tyle razy, ile chcesz.
DAVID MALAN: Dokładnie.
Więc co mi słów wpisz w wierszu, to
będzie regurgitate im na mnie, po jednej w wierszu.
Więc śmiało i to zrobić.
Pozwól mi iść do mojego katalogu i robią argv1 ./argv1.
A teraz, niech keep it simple.
Zróbmy nic na początku.
To nie wydrukować jedną rzecz, a to rzeczywiście nazwa programu,
bo to jest w przedziale 0.
Jeśli teraz powiedzieć, foo, to zrobi te dwa, a jeśli powiem foo bar,
to będzie powiedzieć te trzy rzeczy.
Teraz jest to nieco ciekawe, być może.
Ale przypominam, że argv jest tablica łańcuchów,
ale ciąg jest tablica znaków, więc możemy wziąć się w garść
i zastosowania, że ​​podstawowe Logika i uczynić kod
wygląda trochę bardziej tajemnicze, prawda.
Ale poprzez zagnieżdżone pętla, coś w rodzaju
do tego, co może pamiętacie z Mario, na przykład, jeśli nie to w ten sposób.
>> Więc teraz zauważyć na linii 19, jestem ponownie iterowanie moich argumentów,
od 0 o do argC.
A teraz, zgodnie 21-- jestem pożyczki trick z ubiegłego week--
Mam sprawdzanie co jest Długość wspornika argv i.
Jestem przechowywania tę odpowiedź w N.
A potem ja na integrację z j do n, gdzie j ustawia się na 0.
Tak, Konwencja liczenia.
Po używane i, jeśli masz zagnieżdżonych pętli, nie można użyć jeszcze raz,
inaczej będziesz sprać, potencjalnie, Wartość poza wewnętrzną pętlę.
Więc używam j umownie.
Możemy użyć k.
Jeśli masz więcej niż k, prawdopodobnie mają zbyt dużo zagnieżdżania, zazwyczaj.
Ale teraz, zauważył mój printf Linia jest nieco inny.
Nie jestem drukowania% s, jestem drukowanie% C, co, oczywiście,
jest symbolem zastępczym dla char.
>> A teraz zauważyć tej składni.
Nowy.
Nie widzieliśmy go wcześniej.
Ale logicznie, to po prostu oznacza, -ty się ciąg w argv
i uzyskać j co?
PUBLICZNOŚCI: Charakter.
DAVID MALAN: postaci w tym ciągu.
Więc za pomocą nawiasów kwadratowych następnie nawiasach kwadratowych,
jest to pierwsze nurkowanie na ciągi argv, w
i druga nawiasy kwadratowe z j
jest nurkowanie do bohaterów że zwłaszcza ciąg w argv.
A następnie, po prostu środek na dobre, Jestem tu nowy druk linii.
Więc teraz pozwól mi iść do przodu i otworzyć się nieco większym oknie
więc możemy zobaczyć w akcji.
Pozwól mi wejść do tego folderu.
A teraz robią argv-2-- whoops-- dokonać argv-2, ./argv 2.
Enter.
I to jest trochę trudne czytać w pionie,
ale to rzeczywiście nazwa Program, po pustej linii.
Teraz pozwól mi iść dalej i zrobić foo.
Podobnie trudne do odczytania, ale to rzeczywiście drukowania jednego znaku w wierszu.
A jeśli ja poprzeczkę, to teraz wydrukować je linia po linii.
Więc na wynos tutaj jest nie tyle że, wow, spojrzeć na ten zgrabny nowej sztuczki
gdzie można dostać w treści szczególnych znaków tablicy, w
ale jak bierzesz te podstawowe pomysły, takie jak indeksowanie do tablicy,
a następnie do indeksowania Tablica, która była w tej tablicy,
i tylko stosując te same pomysły nieco bardziej wyrafinowane przykłady.
Ale naprawdę nie ma podstaw zmiany, nawet od zeszłego tygodnia.
>> Teraz jest to rodzaj terminowej, w tym, przypominam, w tygodniu zerowym
graliśmy z książki telefonicznej tak.
Nawet jeśli jest to oczywiste fizyczne kawałki papieru,
można trochę pomyśleć Książka telefoniczna jako tablica.
Oczywiście, jeśli były do ​​reimplement to utwory te kawałki papieru
w komputerze, chyba należało by użyć
jak tablica do przechowywania wszystkich tych, Nazwy i numery z całej drodze
przez Z. Więc to jest ładne, ponieważ pozwala nam okazję,
być może, do rozważenia, w jaki sposób mógłby faktycznie zaimplementować coś takiego.
Podobnie jak w przypadku serii drzwi tutaj.
Więc jeśli could-- potrzebujemy jednego dobrowolnie przyjść na górę.
Zobaczmy.
Nieznane oblicze być może, nieznane oblicze może.
Jak się na pomarańczowo?
Tutaj.
Shirt pomarańczowy, dalej w górę.
>> Idziemy do przodu i teraz ruch te drzwi na bok,
przenieść je z drogi na chwilę.
Jak masz na imię?
>> AJAY:
>> DAVID MALAN: Ajay.
David.
Miło cię poznać.
Wszystko w porządku.
Więc mamy za te sześć Drzwi cyfrowo na screen--
A raczej siedem drzwi na screen-- całą masę numerów.
A ja nic nie powiedziałem ci w advance-- zgodził?
AJAY: Nic z góry.
DAVID MALAN: Chcę, żebyś teraz jest znaleźć dla mnie, i dla nas,
naprawdę, numer 50, krok w tym samym czasie.
>> AJAY: Numer 50?
>> DAVID MALAN: numer 50.
I można ujawnić, co jest Za każdą z tych drzwi
po prostu dotykając go palcem.
Cholera. [Śmiech]
>> [Aplauz]
>> Bardzo dobrze zrobione.
OK.
Mamy piękny prezent nagroda dla Ciebie tutaj.
Wybierać możemy filmów omawiane w zeszłym tygodniu.
>> AJAY: Och, człowieku.
Och, nigdy nie widziałem Spaceballs.
>> DAVID MALAN: Kosmiczne jaja.
Wszystko w porządku.
Tak trzymać tylko jednej chwili.
How-- zróbmy to pojętny moment--
jak się go o znalezienie numer 50?
AJAY: wybrałem losowo.
DAVID MALAN: Więc wybrałem losowo i szczęście.
AJAY: Tak.
DAVID MALAN: OK.
Doskonałe.
Więc teraz, gdyby nie ci zdobyć szczęście, co jeszcze
może się stać za tymi drzwiami?
Więc jeśli pójdę do przodu i ujawnić te numery tutaj,
w rzeczywistości są w kolejności losowej.
I najlepiej można mieć zrobić, szczerze mówiąc, jest w ostatecznym rozrachunku,
w najgorszym przypadku, sprawdzając je wszystkie.
Tak masz super szczęście, które nie jest to, co my nazywamy algorytm.
Tak, gratulacje.
Ale teraz let's-- humoru mnie, jeśli można.
Chodźmy do tej zakładce tutaj.
I tu są numery w wyraźnie , co wydaje się być losowa kolejność,
i były.
Ale teraz, gdybym zamiast roszczenia że za tymi drzwiami
są numery, które są sortowane.
Celem jest również znaleźć nam numer 50.
Ale zrobić algorytmicznie, a Powiedz nam, jaki masz zamiar o tym.
A jeśli go znaleźć, zachować ten film.
Państwo nie jest, można go oddać.
AJAY: Więc mam zamiar sprawdzić końce Po pierwsze, w celu określenia, czy there's--
[Śmiech i oklaski]
DAVID MALAN: Proszę bardzo.
Rzućmy okiem na jednego z poprzedników Ajay, w
Sean, który nie był tak szczęśliwy.
OK, więc o swoim zadaniu, Sean jest następujące.
Ukryłem się za nich Drzwi numer siedem,
ale schowany w niektórych z tych drzwi oraz inne numery niż negatywne.
I twoim celem jest, aby myśleć o tym Górny rząd liczb, jak tylko tablicy.
Wystarczy sekwencja sztuk papieru z numerami za nimi.
I twoim celem jest, tylko przy użyciu top Tablica tu znaleźć mi numer siedem.
A my wtedy będziemy krytykować jak go o to robi.
Znajdź nas na numer siedem, proszę.
Nie
5, 19, 13.
To nie jest podchwytliwe pytanie.
1.
W tym momencie Twój wynik nie jest bardzo dobra, więc równie dobrze można iść dalej.
3.
Idź na.
Szczerze mówiąc, nie mogę pomóc, ale zastanawiam się, czego nawet myśleć.
>> SEAN: Mogę wziąć tylko z górnego rzędu.
DAVID MALAN: Tylko górny rząd.
Więc masz trzy w lewo.
Więc znajdź mi 7.
>> [PUBLICZNOŚCI krzyczy WSKAZÓWKI]
Tak więc oba te były niesamowite z bardzo różnych powodów.
Tak to jest, gdy mamy przerwane przed chwilą,
i Kluczową kwestią tutaj było te drzwi miały numery
za nimi, które były sortowane, idealny dania na wynos, dla których jest to, że można zrobić
zasadniczo lepiej Ten drugi example--
i rzeczywiście, to był Sean Pierwsza próba z liczb losowych
jak before-- ale najszybciej jak te liczby są sortowane,
podobnie jak w książce telefonicznej, co można oczywiście zrobić?
Lub w jaki sposób można wykorzystać tę wiedzę?
Tak.
>> PUBLICZNOŚCI: Idziesz do połowy [niesłyszalne].
DAVID MALAN: Tak.
Dokładnie.
Więc początkowy Ajay był instynkt sprawdzić końce, jak sobie przypominam,
a potem jakby gotowy Przykładem szybko.
Ale gdybyśmy zaczęli to robić więcej metodycznie wzdłuż tych linii,
ale wychodząc być może w średnim, ponieważ są one klasyfikowane,
jak tylko ujawnić Numer 16, dlatego wiem--
i zróbmy dokładnie that-- my Dlatego wiem, że 50, w dzisiejszym wypadku
ma być w prawo.
Tak jak w tydzień po zerowej my zerwał się w połowie książki telefonicznej
i rzucił połowę Problem z dala, sam pomysł tutaj.
Możemy rzucić tę połowę problemu z dala.
I prawdopodobnie to co Cię może zrobić algorytmicznie,
gdy wiesz, że 50 musi być z prawej strony, czy to w dowolnym miejscu,
to spróbuj tam, w środku pozostałych drzwi.
Oczywiście, 50 jest większa niż 42, więc możemy
rzucić to pozostałe kwartał problemu z dala,
i wreszcie identyfikacji coś jak 50.
Ale tak jak z książka telefoniczna, numery te
zostały podane do nas już w posortowanych, który pozostawia nas
z pytaniem, jak można dostać rzeczy do posortowanych?
I, szczerze mówiąc, za jaką cenę?
Jest jedna rzecz, aby być wręczył książki telefonicznej
i zaimponować znajomym, stwierdzając telefon bardzo szybko, prawda?
Łzawienie 32 strony, by znaleźć osób, z 4 mld stron,
powiedzieliśmy, był jednym skrajnym przykładem.
Ale ile czasu zajęło Verizon uporządkować tę książkę telefoniczną?
Ile czasu zajęło nam uporządkować te siedem liczb?
To znak, że mamy dotychczas zupełnie ignorowane.
>> Warto więc odpowiedzieć na to pytanie teraz.
I wszyscy jesteśmy z filmów teraz, ale mamy jakieś piłeczki antystresowe.
Jeśli, powiedzmy, ośmiu wolontariuszy Nie miałbym nic przeciwko dołączy do nas tutaj?
Idziemy dalej i zrobić, jak o cztery z was, trzy z was?
Pobierz nowe twarze.
I cztery z was tam?
I teraz-- niech nie stronniczość tutaj-- i Numer osiem tutaj na koniec.
Chodź na górę.
Wszystko w porządku.
Tak więc mamy tu do każdy z was jest liczba.
Jeśli chcesz, aby przejść do przodu, weź ten numer.
Jak masz na imię?
>> ARTIE: Artie.
>> DAVID MALAN: Artie, dobrze.
Jesteś numer 1.
>> AMIN: Amin.
DAVID MALAN: Amin.
David.
Jesteś numer 2.
I iść do przodu, jak oddam Ci arkusze papieru,
linii sami się przed muzyką oznacza w tym samym porządku jak się tam.
>> ANDY: Cześć, Andy.
>> DAVID MALAN: Andy, miło cię widzieć.
Numer 3.
>> JACOB: Jakub.
>> DAVID MALAN: Jakub, numer 4.
Witamy na pokładzie.
: GRANT.
DAVID MALAN: Grant.
Numer 5.
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, numer 6.
>> FRANCES Frances.
DAVID MALAN: Frances, numer 7.
A?
>> RACHEL: Rachel.
>> DAVID MALAN: Rachel, numer 8.
Wszystko w porządku.
Śmiało i dostać się w tej kolejności.
Powiem jedno pozostałe muzyka stoją w miejscu.
Gdzie trzeba stanowisko?
OK.
Idź przed siebie i po prostu umieścić swoje numery gdzie publiczność może zobaczyć je na,
stojak muzyczny skierowany na zewnątrz.
I miejmy nadzieję, że nasz pierwszy kontrola poprawności tutaj-- 4, 2, 6.
Oh-oh.
Chwileczkę.
Nie mamy się 8.
Potrzebuję do eksmisji z Przykładem jakoś.
Nie
Nie, to jest OK.
Zobaczmy.
Możemy to zrobić.
Stand by.
Nie idziemy.
Prawidłowe.
Wszystko w porządku.
Tak, teraz mamy 8, 1, 3 7, 5.
OK.
Doskonałe.
>> Więc pytanie jest w zasięgu ręki, w jakie koszty, i poprzez to, co sposób,
może faktycznie możemy posortować te liczby tutaj tak, że możemy trochę działać wstecz,
ostatecznie i decide-- jest to naprawdę imponujący, to jest naprawdę skuteczne,
że mogę dzielić i zdobyć książkę telefoniczną?
Czy to naprawdę wydajny Mogę podzielić i podbić
te kawałki cyfrowe papieru na pokładzie,
czy może to będzie nas kosztować majątek w czasie lub cykli energetycznych lub CPU
rzeczywiście dostać nasze dane do jakiegoś posortowanych?
Warto więc zwrócić na to pytanie.
>> Więc po pierwsze, te liczby są w dość dużo losowej kolejności,
i mam zamiar zaproponować jeden algorytm, lub proces
dzięki którym możemy uporządkować tych ludzi.
Mam zamiar podejść to dość naiwnie.
I idę do uznania że to niby dużo dla mnie
owinąć wokół mojego umysłu od razu cały zestaw danych.
Ale wiesz co?
Idę do niektórych bardzo proste marginalne poprawki.
4 i 2 są w porządku, o ile Celem jest, aby przejść od 1 dnia do 8.
Więc wiesz, co?
Zamierzam cię mieć Chłopaki zamienić, jeśli przełącznik
Pozycje i fizycznie Twoje kawałki papieru.
Teraz 4 i 6 są w porządku.
Mam zamiar zostawić te być.
6 i 8, to są w porządku.
Zamiar zostawić je mieć.
8 AND1, w porządku.
Jeśli dwa nie przeszkadza zamiana.
Teraz 8 i 3, jeśli wam się zamienić.
8 i 7, jeżeli wam się zamienić.
I 8 i 5, jeśli wam się zamienić.
>> Teraz ja mam zrobić?
Nie, oczywiście nie.
Ale zrobiłem Sytuacja lepiej, prawda?
Co jeszcze masz na imię, numer 8?
>> RACHEL: Rachel.
DAVID MALAN: Tak Rachel ma skutecznie przepuszcza się dość daleko,
wszystko aż do końca moja tablica z numerami tutaj.
I tak, że problem jest rodzaj rozwiązania.
Teraz wyraźnie 2 nadal wymaga poruszać się nieznacznie i 4 i 6 i 1.
Ale wydaje mi się zdobyć bliżej do roztworu.
Warto więc zastosować to samo naiwny heurystyczna ponownie.
2 i 4, OK.
4 i 6, OK.
6 do 1 mm mm.
Wymieńmy.
6 i 3 mm mm.
Wymieńmy.
6 i 7 jest w porządku.
7 i 5, nope.
Wymieńmy.
A teraz 7 i 8.
A co masz na imię?
FRANCES Frances.
DAVID MALAN Frances.
Więc teraz Frances jest nawet lepiej stanowisko, ponieważ teraz 7 i 8
prawidłowo przepuszcza się do góry.
Tak, 2 i 4, OK.
4 i 1, Wymieńmy się.
4 i 3, Wymieńmy się.
4 i 6, jesteś OK.
6 i 5, Wymieńmy się.
A teraz ci ludzie są dobrzy.
Jesteśmy prawie na miejscu.
2 i 1, w porządku, więc zamienić.
A teraz pozwól mi zrobić test dla pewności.
2 i 3, 3 i 4, 4 i 5, 5 i 6, 6 i 7, 8.
OK, więc skończyliśmy.
>> Ale jakim kosztem nie ja sortować te numery tutaj?
Cóż, ile kroków zrobiłeś I potencjalnie podjąć podczas sortowania tych ludzi?
Dobrze, wrócimy do tej kwestii.
Ale, szczerze mówiąc, jeśli masz trochę się nudzić, to
rodzaj ujawniając tym, że nie było to Najbardziej skuteczne może algorytm.
I rzeczywiście, szczerze mówiąc, pocę tym bardziej chodzenie tam iz powrotem.
, Że nie czują się szczególnie skuteczne.
Warto więc spróbować czegoś innego.
Jeśli wam się zresetować sami do tych ośmiu wartości.
Dobra robota.
>> Rzućmy okiem cyfrowo, za tak Chwilę przed spróbować czegoś innego,
na to, co się właśnie stało.
Tu jesteś by zobaczyć wizualizacja tych ośmiu ludzi
przy czym niebieski i czerwony paski oznaczają numery.
Wyższy pasek, większa liczba.
Krótszy pasek, mniejsza ilość.
I co masz zamiar zobaczyć jest w losowo zamówić więcej niż ośmiu z nich.
Masz zamiar zobaczyć te bary coraz klasyfikowane według tego samego algorytmu,
lub zestaw instrukcji, które będziemy nazywać odtąd bubble sort.
Tak więc zauważyć, co druga lub tak, dwa bary są oświetlenia w kolorze czerwonym,
są porównywane przez komputer.
A potem, jeśli duży bar i mały bar są w porządku,
są one zamieniane na mnie.
>> Teraz jest to bardzo uciążliwe oglądać to, na pewno,
bardzo długo, ale zauważ, takeaway-- belki poruszających się w prawo,
małe bary poruszające się w lewo.
Miejmy przerwać proces i to przyspieszyć
się znacznie szybciej, więc możemy zorientować się na wysokim poziomie, co,
rzeczywiście, sortowanie bąbelkowe robi.
Rzeczywiście, nie jest to do propagacji prawa strona na liście
lub tablica, większe bary.
I odwrotnie, małe bary są przepuszczanie ich w dół w lewo
choć w szybszym tempie niż wcześniej zrobił.
Tak, trudniej zobaczyć się z ludźmi, ale wizualnie to rzeczywiście co
się dzieje.
>> Spróbujmy jednak zasadniczo Inne podejście teraz.
Spróbujmy inaczej Algorytm w którym mamy cię
faceci zaczynają w nich przy pozycji, co było to zamówienie tutaj.
I idziemy do przodu teraz.
I mam zamiar zrobić coś jeszcze prostsze, prawda?
Z perspektywy czasu, znowu zamiana parami i znowu, prawie trochę sprytny.
Zróbmy wszystko jeszcze bardziej naiwnie, gdzie jeśli chcę sortować tych ludzi,
Pozwólcie mi zachować się dla najmniejszego elementu.
Więc teraz, 4 jest Najmniej widziałem.
Będę o tym pamiętać.
Nie, 2 jest lepszy, i pamiętaj, że.
1 jest również mniejszy.
3, 7, 5.
OK.
Jedno- jak masz na imię?
>> ARTIE: Artie.
>> DAVID MALAN: Artie.
Tak, Artie, śmiało.
Mam zamiar wyciągnąć cię z tej linii.
Jeśli można tu wrócić.
I muszę zrobić miejsce dla niego.
Mamy punkt decyzyjny tutaj.
Jak możemy zrobić miejsce dla Artiego tutaj Na początku, gdy liczba 1 należy?
>> PUBLICZNOŚCI: Shift.
>> DAVID MALAN: OK, może przenieść każdego.
Ale proponujemy optymalizację.
Że czuje się trochę irytujące dla mnie, aby zadać cztery osoby
, aby przejść całą drogę w dół.
Co jeszcze mogę zrobić?
>> PUBLICZNOŚCI: Włączyć je.
>> DAVID MALAN: Włączyć je.
A co masz na imię?
>> JACOB: Jakub.
DAVID MALAN: Jakub, przenieść.
Znacznie bardziej efektywne tylko mieć Jacob lokalizacje swapowe z Artie,
w przeciwieństwie do wymuszania wszystkie cztery z tych ludzi,
Dziękuję bardzo, do ich właściwej pozycji.
Co jest ładne o Artie teraz, on jest w jego prawidłowym położeniu.
Zróbmy to jeszcze raz.
2, to najmniejsza liczba widziałem.
3, 7, 5.
OK.
2 jest zdecydowanie najmniejszy.
Nie trzeba wykonywać żadnej pracy.
Zróbmy to jeszcze raz.
6.
Najmniejsza?
8.
Nie.
4?
Ooh.
Pozwól mi pamiętać, 4.
3.
Pozwól mi pamiętać, 3.
7, 5.
Najmniej mam widać na tym przejściu jest 3.
Jeśli chcesz przyjść na zewnątrz.
Gdzie jedziemy do was?
A jak masz na imię?
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, jesteśmy będziemy mieć do eksmisji.
Jest to jednak bardziej wydajne po prostu zamienić dwie osoby,
niż mieć wiele ludzi faktycznie ominąć nad.
Teraz możemy to zrobić ponownie.
Mam zamiar wybrać 4, więc wyjdź.
I kto będzie poruszać?
Numer 8, oczywiście.
Gdybym teraz znaleźć numer 5, wyjdź.
Numer 8 będzie się znowu eksmitowany.
Mam teraz zamiar znaleźć numer 6 w miejsce.
7 w miejscu.
8 w miejscu.
>> Co właśnie zrobił to coś, co nazywa wybór sortowania,
i jeśli wyobrazić tego, że to będzie czuć się trochę inaczej.
Idziemy do przodu i od tego Menu tutaj, to visualization--
zmieńmy to to-- chodź, Firefox.
Zmieńmy to do wyboru rodzaju.
I niech ją przyspieszyć, jak poprzednio, i uruchomić wizualizację teraz.
I ten algorytm ma inny klimat.
Na każdej iteracji, szczerze mówiąc, to jeszcze bardziej oczywiste.
Jestem po prostu wybierając najmniejszy element.
Teraz, szczerze mówiąc, mam trochę szczęścia, że Czas, w tym, że posortowane bardzo szybko.
Elementy były przypadkowe.
To nie jest, jak to będzie w końcu zobacz, zasadniczo szybciej.
Ale zastanówmy się trzeci i ostatni podejście do tego, co tu się dzieje.
Więc śmiało i przywrócić was po raz ostatni, aby być w tym celu tutaj.
>> A teraz, mam zamiar być bardziej sprytny,
tylko dopełniają nasze algorytmy.
Mam zamiar to zrobić.
Mam zamiar nie iść tam iz powrotem tak wiele.
Szczerze mówiąc, jestem zmęczony Wszystko to postępowy.
Mam zamiar wziąć to, co ja podane na początku listy
i idę do sortowania że tu i teraz.
Więc jesteśmy.
Numer 4.
Mam zamiar wstawić numer 4 do posortowanej listy.
Gotowe.
I twierdzą teraz, i tylko do tego więcej jasne, to część mojej listy są sortowane.
To trochę głupie zastrzeżenia, ale w rzeczywistości 4 jest sortowane na liście wielkości jednego.
Teraz mam zamiar wziąć na numer 2.
Numer 2 Mam teraz zamiar włożyć w odpowiednie miejsce.
Więc skąd 2 należą?
Oczywiście, tutaj.
Więc idź naprzód i przenieść z powrotem, jeśli można.
I dlaczego nie faceci po prostu wziąć Twoja muzyka stoi z wami ten czas.
I niech cię siłą wkładać na początku listy.
Więc trochę więcej pracy.
Musiałem przenieść Jacob wokół, a jak masz na imię?
>> AMIN: Amin.
>> DAVID MALAN: Amin.
Ale przynajmniej nie tam iz powrotem.
Po prostu biorę rzeczy, jak przejść.
Ja tylko je wkładając w odpowiednim miejscu.
6, to jest rzeczywiście bardzo proste.
Niech cię tam wprowadzić, jeśli po prostu chciałem, aby przenieść się nieznacznie.
Numer 8, również dość łatwe.
Tam.
Cholera.
Numer 1, nie możemy po prostu SWAP z Amin tutaj,
bo to się dzieje bałagan zamówienia.
Więc musimy być trochę bardziej sprytny.
Tak, Artie, jeśli można kopii zapasowej na chwilę.
Idziemy dalej i zmieniać się, w przeciwieństwie do naszych poprzednich algorytmów,
aby zrobić miejsce dla Artiego tu na początku.
Tak więc na koniec dnia, ja rodzaj robi to, co chciałem, aby uniknąć przed.
A więc mój algorytm sortowania z odwrócona, intelektualnie,
od tego, co pierwotnie było.
Robię tylko to, do przesuwania w innym punkcie.
Teraz jestem na 3.
Cholera.
Musimy zrobić jeszcze więcej pracy.
Więc wcisnąć cię.
Przejdźmy 8, 6, 4-- oh oh-- i 3 pójdzie tam.
Tak przynajmniej niewielkie oszczędności tym razem.
7, nie za dużo do zrobienia.
Więc jeśli chcesz pop z powrotem, niech wstawić ciebie.
I wreszcie, 5, jeśli Ciebie chcesz pop z powrotem, my
trzeba przesunąć ty, ty, Ci, aż pięć znajduje się na miejscu.
>> Więc teraz to zobaczyć na Wysoki poziom graficznie
zróbmy to algorytm wizualizacja jeden dodatkowy czas.
Więc są to nazywamy wstawiania rodzaju.
Będziemy działać tak jak to szybko, i uruchom go tutaj.
I to też ma inny charakter.
To coś w rodzaju coraz lepiej i lepiej, ale nigdy nie jest idealny
aż pójdę i gładka w tych luk.
Bo, znowu, ja tylko przy co Jestem z nich otrzymuje od lewej do prawej.
Więc nie miałem tyle szczęścia że wszystko było idealne.
Dlatego musieliśmy je trochę mispositions że trwałe w czasie.
>> Tak więc wszystkie te algorytmy wydają pracować na nieco innych kroków.
W rzeczywistości, co mówisz, jest najlepszym lub najszybszym do tej pory?
Sortowanie bąbelkowe, w pierwszej kolejności?
Rodzaj selekcji, drugi?
Wstawiania sortowania, trzeci?
Słyszę jakieś rodzaje selekcji.
Inne myśli?
>> Tak więc okazuje się, że Wszystkie z tych algorytmów
są zasadniczo tak samo skuteczne, jak każdy other-- lub odwrotnie, tak jak
nieefektywna wzajemnie ponieważ zasadniczo nie możemy zrobić
lepiej niż wszystkie trzy tych algorytmów.
I to jest trochę biały kłamstwo, też.
kiedy mówię, jako wydajny lub nieskuteczne,
to przynajmniej na super duże wartości n.
Gdy mamy tylko osiem osób tutaj, a może 50 lub tak paski na ekranie,
będziesz absolutnie zauważyć różnice wśród tych trzech algorytmów.
Ale jak N, liczba osób lub liczbę cyfr
lub liczba osób w telefonie książka, lub liczba stron internetowych
w bazie danych Google robi się coraz większy i większy,
zobaczymy, że wszystkie trzy z nich Algorytmy są rzeczywiście bardzo słaba.
I zasadniczo nie możemy zrobić lepiej.
>> Rzućmy okiem, w końcu, na to, co mógłby te algorytmy
brzmieć jak w Kontekst kilku innych
oraz w zasadzie tę wizualizacja tutaj
która wprowadzi nas do liczbę algorytmów.
Idziemy dalej i pogratulować Tutaj nasi uczestnicy, z których wszystkie
sortowane się bardzo dobrze.
Jeśli chcesz wziąć prezent pożegnalny.
Możesz zachować swoje numery, jak również.
I co zobaczysz, a raczej usłyszeć, teraz,
jest to, że stawiamy dźwięki Do każdego z tych prętów
i powiązać go z oprogramowaniem, różne częstotliwości dźwięku,
można owinąć swój umysł więcej audioly wokół tego, co każdy z tych rzeczy
wyglądać.
Pierwszy z nich jest wprowadzenie sortowania
>> [DŹWIĘKI]
>> Jest to sortowanie bąbelkowe.
>> [DŹWIĘKI]
>> Sortuj wybór.
>> [DŹWIĘKI]
>> Coś, co nazywa seryjnej sortowania.
>> [DŹWIĘKI]
>> Gnome sort.
>> [DŹWIĘKI]
>> To jest to dla CS50.
Do zobaczenia w środę.
>> Narrator: A teraz, "Głębokie Myśli, "by Daven Farnham.
Dlaczego jest to dla pętli?
Dlaczego nie zrobić to lepiej?
Chciałbym zrobić pięć pętli.
>> [Śmiech]