>> [Odtwarzanie muzyki]
>> DAVID J. MALAN: W porządku.
Więc witamy z powrotem.
Jest CS50, i jest Koniec tygodnia trzy.
>> Więc przypomnieć w ciągu ostatnich kilku tygodni, byliśmy spędzać sporo
Czas na C, na programowaniu, na składni.
I to jest całkiem normalne, jeśli nadal zmaga się z zestawu Problem 2, być
walić głową w ścianę.
To tajemnicze komunikaty wyglądające i błędy, które
może nie całkiem ścigać.
Bo mieć pewność, że w tak razem kilka tygodni będziesz spojrzeć wstecz na
rzeczy, jak Cezar, i [? V-genair,?] może nawet cracka, i
sobie sprawę, jak daleko chcesz odejść w krótkim okresie czasu.
Więc jeśli to jest jakieś pocieszenie, Trzymaj się teraz.
>> Dzisiaj jednak zaczynamy przejście rzeczom wyższym poziomie.
I zaczynamy brać za pewnik, że wiecie, jak program, lub w
Najmniej początki że poziom komfortu.
I zaczniemy zastanowić się, jak możemy go o projektowaniu programów więcej
skutecznie.
Jak możemy go o optymalizacji Efektywność naszych algorytmów i
ogólnie rozwiązywania więcej ciekawe problemy.
I zaczynają brać za pewnik, że jeśli chcemy, możemy zakodować się każdy
przykłady mamy na myśli.
Więc dzisiaj, nie dotykać klawiatury dla każdej postaci kodu.
To będzie o wiele wyższy poziom, a ostatecznie, o rozwiązywaniu problemów.
>> Tak więc, aby dostać się do tego punktu, chciałbym zaproponować że następujące siedem
prostokąty reprezentują siedem drzwi, za które są całe grono
numery, wśród których jest liczbą 50.
Pozwól mi to na to rzutować Ekran również tutaj.
I proponuje, że potrzebujemy ochotnika pomóc znaleźć mi numer z przodu
internet, żeby zobaczyć.
Chodź na górę, w kolorze różowym.
Dobrze.
Jak masz na imię?
>> JENNIFER: [niesłyszalne]
>> DAVID J. MALAN: Przepraszam?
>> JENNIFER: Jennifer.
>> DAVID J. MALAN: Jennifer.
Dobrze, Jennifer.
Miło Pana poznać.
Chodź na górę.
Więc to o siedem drzwi, a co Chciałbym, aby zrobić dla nas,
wobec wszystkich swoich kolegów, jest nas znaleźć numer, 50.
Aby znaleźć numer, można zajrzeć za Każda z tych drzwi stukając
na jednym z drzwi, i to ujawni swój numer.
I zobaczymy, jak szybko Można nas znaleźć numer, 50.
>> 15.
16.
50.
Niezła robota.
Dobrze.
Brawa dla Jennifer.
>> [APPLAUSE]
>> Dobrze.
Więc jaka była twoja strategia znalezieniem numeru 50?
>> JENNIFER: Um, pomyślałem, że może, jeśli -
[Niesłyszalne]
>> DAVID J. MALAN: Oh.
Daj jedną sekundę.
Więc była twoja strategia znalezieniem numeru 50?
>> JENNIFER: Więc po prostu zaczynają się zaczynają dostrzegać to, co pierwszy numer
był, a potem pomyślałem, być może, jeśli są one klasyfikowane, po prostu zachować
dotykając się wyżej?
>> DAVID J. MALAN: OK.
I wydaje się, że znaleziono że być przypadek.
Chociaż, niech odwinąć warstwy tylko trochę, a ty chcesz iść
dalej i ujawnić inne drzwi Mogłeś wybrać?
>> JENNIFER: Oh, kochanie.
>> DAVID J. MALAN: Ah.
>> JENNIFER: Więc po prostu miał szczęście.
>> DAVID J. MALAN: Więc masz szczęście.
Dobrze.
Więc nie jest źle.
Ale to ciekawe insight, prawda?
Jeśli założyć, i nie dostać, rzeczywiście, trochę szczęścia tam.
Ale jeśli założyć, że numery były posortowane, można być bardziej precyzyjne
, w jaki sposób, że pod wpływem Twoje zachowanie?
>> JENNIFER: Więc jeśli były sortowane, I że być może od najmniejszych do największych.
>> DAVID J. MALAN: OK.
>> JENNIFER: A jeśli ten zakończył się naprawdę duże, to największego do najmniejszego.
>> DAVID J. MALAN: OK.
Więc największego do najmniejszego, lub od najmniejszych do największych.
Ale pozwól mi zaproponować, załóżmy, że miał zdobyć pecha, i załóżmy, że
nie były w rzeczywistości, sortowane, ile te drzwi można musieli peek
tyle w tym najgorszym przypadku?
>> JENNIFER: Wszystkie.
>> DAVID J. MALAN: Wszystkie.
Warto więc generalizować, że jak n.
Nie dzieje się 7, ale niech więcej ogólnie mówi, że istnieje n drzwi na
Ekran tutaj.
Więc w najgorszym przypadku, to masz zajrzeć za 7 drzwi lub drzwi n.
A więc to jest naprawdę, to trochę Powodzenia dzisiaj, ale to naprawdę liniowy
Algorytm rodzaju, nawet jeśli niby omijając okolice.
Czy to jest sprawiedliwe?
>> JENNIFER: Tak.
>> DAVID J. MALAN: Cóż, pozwól mi sprawdzić, czy zmiany strategii, jeśli przenieść nas do
nasz drugi przykład tutaj z 7 różnych drzwi.
Takie same numery, ale to razem są one klasyfikowane.
Jaka jest twoja strategia tu będzie, próbuje zgasić umysłu, co
inne numery były -
>> JENNIFER: OK.
>> DAVID J. MALAN: - wcześniej?
>> JENNIFER: Zacznijmy z pierwszym.
>> DAVID J. MALAN: W porządku.
Start z pierwszego.
4.
Teraz gdy idziesz do pracy, i dlaczego?
>> JENNIFER: 4 jest naprawdę mała.
Więc jeśli są sort może najmniejsza do wielkości, powinna ona
się dwukrotnie, i -.
>> DAVID J. MALAN: OK.
Zobaczmy, co myślisz?
>> JENNIFER: Spróbuj ostatni.
Miło.
>> DAVID J. MALAN: Bardzo ładnie wykonane.
Dobrze.
>> [APPLAUSE]
>> DAVID J. MALAN: OK.
Więc faktycznie to robi strasznie ponieważ jesteś
robi to bardzo dobrze.
Który pozostawia nas w stanie dokonać pewnych punktów.
Więc spróbujmy przywrócić tutaj.
>> JENNIFER: OK.
>> DAVID J. MALAN: Bardzo dobrze zrobione, jednak.
Tak więc rozpoczął się na początku, obejrzałeś że to 4, a następnie
przeniósł się do końca.
Załóżmy jednak, że nie miał szczęście tam, i załóżmy 50
był gdzieś indziej.
Co twój trzeci etap był?
>> JENNIFER: Wróć do początku.
>> DAVID J. MALAN: Wróć na początku.
OK, więc to już dotknął te drzwi, które było 8.
Dobrze.
Więc to nie jest 50.
Gdzie byś spojrzał dalej?
>> JENNIFER: jeśli nie wiedzą, że posortowane.
>> DAVID J. MALAN: Correct.
Cóż, jeśli nie wiesz zostały one posortowane -
>> JENNIFER: Och, wiedziałam, tak.
>> DAVID J. MALAN: - Ale nie wiedzieć, gdzie 50 to już?
>> JENNIFER: Just keep going.
>> DAVID J. MALAN: W porządku.
OK.
Trzymaj się.
OK, że mogę pracować.
>> JENNIFER: OK.
>> DAVID J. MALAN: Teraz, jeśli jesteś po prostu zamierza poddawać się, jak się
Algorytm przekazanych kopii do.
>> JENNIFER: liniowy -.
>> DAVID J. MALAN: To niby liniowy.
Ale pozwól mi zaproponować, niech mnie umieścić na miejscu.
Pozwól mi odświeżyć stronę.
sam numer, sam układ, same drzwi.
Ale wracam do tego pierwszego dnia w class, gdy wyrwał książkę telefoniczną w
pół, rodzaj, i to, co było nasza strategia nie?
>> JENNIFER: Start w środku.
>> DAVID J. MALAN: OK.
Tak rozpoczyna się na środku.
Więc śmiało i symulacji, które.
Kliknij na środku przez ujawniając te drzwi.
Tak więc liczba 16.
Więc co będzie silny facet zrobić, który wyrwał książkę telefoniczną na pół,
aby dostać się do następnego przypuszczenie?
>> JENNIFER: Idź w tej połowie.
>> DAVID J. MALAN: A dlaczego w prawo?
>> JENNIFER: Jeśli były jakby najmniejsza do wielkości, to 50 powinno być
w tym celu.
>> DAVID J. MALAN: Dobry.
Całkowicie uzasadnione.
Tak jak w książce telefonicznej, można przejść do prawo w przeciwieństwie do lewej, ale tutaj
jest kluczem wynos.
Teraz można wyrzucić, lub oderwać, połowa z tego problemu, nie pozostawiając cię
z 7 drzwi, ale tak naprawdę tylko z 3.
Jakie jest mniej więcej połowa Wielkość tego problemu.
Dobrze.
Więc teraz, co chcesz, zrobić po powrocie do porządku?
>> JENNIFER: So 16 jest wciąż bardzo mały, w stosunku do 50, więc może spróbuję,
jak, to jedno.
>> DAVID J. MALAN: W porządku.
42.
Dobra, co teraz jest twoim instynkt mówi ci?
>> JENNIFER: mogę wyrzucić to i po prostu -
>> DAVID J. MALAN: OK.
Dobra, możesz wyrzucić lewa połowa nie.
>> JENNIFER: - wybrać ten jeden.
>> DAVID J. MALAN: I dobrze.
>> JENNIFER: Tak.
>> DAVID J. MALAN: Więc choć trudno zobaczyć być może, gdy jest tylko
7 drzwi, myśleć, teraz, Konsystencja
algorytm po prostu stosować.
W poprzednim przypadku, zrobiłeś miał szczęście, co było świetne.
Ale nie używać metody heurystyczne, Chciałbym powiedzieć.
Kiedyś rodzaju instynktów i wiedząc, że sortowane, jeśli jest to dość
mały na początku, oczywiście, mamy iść bardziej w prawo.
Ale w pewnym sensie, że masz szczęście, bo może to był numer 100,
a może 50 był w środku.
Być może 50 było nawet tutaj.
>> Ale to, co zrobiłeś trochę inaczej tym razem było, to nie to samo
znowu i znowu.
I jestem zdania, że ​​to, co właśnie nie, chociaż zależy od telefonu
Książka przykładem, jest czymś o wiele więcej algorytmiczne, i wiele
mniej specjalny obudowane.
Znacznie mniej instynktowne.
Tak więc na koniec dnia, jak by opisać efektywność
Pierwszy algorytm, gdzie poszedł od lewej do prawej, w porównaniu
Drugi algorytm tutaj?
>> JENNIFER: To powinien, jak, być może połowę czasu, lub nawet więcej, tak.
>> DAVID J. MALAN: OK, może nawet więcej.
Miejmy wcisnąć trochę mocniej na tym.
Co tak naprawdę, jeśli nadal tego Logika, na pewno o połowę
czas pracy z tego drugiego algorytmu by wyrzucić połowę
numery, ale co możemy zrobić na następny iteracji, kiedy Jennifer ujawnił
Drugi numer?
>> Mamy połowę liczby drzwi ponownie.
I co wtedy robiliśmy po tym, gdy było więcej drzwi do zabawy?
Chcemy zmniejszyć o połowę ich, i znowu, i znowu, i znowu.
A było to tak, jak was wszystkich stojąc w pierwszym tygodniu
class, połowa z was siedzi, pół z was siedzi, połowę Ciebie
siedzi, aż jeden samotny dusza stała.
A my powiedzieliśmy, że czas pracy , że pewne kroki zajęło to
rzędu co?
>> SPEAKER 1: [niesłyszalne]
>> DAVID J. MALAN: Tak Podstawa log 2 n, czy tylko po prostu, zaloguj n.
Więc coś logarytmiczna.
A wykres nie był linią prostą że po prostu coraz gorzej, było
to ciekawe, że nie łuk się tak źle w czasie.
Warto więc trzymać się tej idei.
Chcę podziękować Jennifer.
Dziękuję bardzo za przybycie na górę.
I jeden sec.
Brak lampki biurkowe dzisiaj, ale my mam CS50 stresu piłki.
>> JENNIFER: Yay.
>> DAVID J. MALAN: Dobra, tutaj.
Dziękujemy za ponoszenia stres tutaj.
Dobrze.
Zobaczmy więc, jeśli nie możemy teraz sformalizowania tego trochę więcej.
Więc jeszcze raz, co właśnie zrobił, było w zasadzie to samo, co my
W tym pierwszym tygodniu.
Ale zamiast końcu z zaledwie liniowy Algorytm, które przedstawiono
wcześniej w tej linii prostej zgodnie z którą, jeżeli stawiamy jeden drzwi
ekran, a następnie Jennifer by musiało wyglądać, potencjalnie,
za jedne drzwi.
Jeśli stawiamy dwa kolejne drzwi, ona może mieć zajrzeć za dwa kolejne drzwi.
>> I tak, nie było to liniowy zależność między wielkością
Problem na, powiedzmy, osi x, a Czas potrzebny na
rozwiązania na y.
Ale obraz nawiązujący do mnie wcześniej była to zielona linia.
Zielona celowo, ponieważ to po prostu czułem się lepiej.
W teorii, algorytm, kiedy to zrobiliśmy z książki telefonicznej, kiedy to zrobiliśmy
z wy licząc siebie, a w drugim przypadku, gdy Jennifer tylko
zrobił to tutaj, to był rodzaj fundamentalnie lepiej.
Bo to nie był tylko dwa razy szybciej.
To nie było nawet cztery razy szybciej.
To było całkowicie zależne od tego, co Wielkość wejściowym, jak na ile
kroki ostatecznie wziął.
>> A więc ten prosty pomysł, że wszyscy wzięliśmy za pewnik, z książki telefonicznej,
Podobnie mogą być stosowane do czegoś takiego.
I to może być bardziej niedbale znany jako,, jak może
wyobrazić, dziel i rządź.
Nie inaczej niż my, oczywiście, z książki telefonicznej.
>> Ale pseudokod, przypomnijmy, to było.
Tak więc nie będzie to zrobić jeszcze raz, ale pamiętam że pierwszy tydzień, każdy z nas stał się
i połowa ciebie usiadł, połowa Ci usiadł, połowa Ciebie usiadł.
To algorytm został wprowadzony w trochę sposób oszustwa, w tym, to
był nie tylko jednym z mnie liczyć, Zasadniczo bardziej efektywnie.
W tym przypadku, byłem wykorzystanie surowców wtórnych.
Rodzaj, wielu procesorów, wiele mózgi, wielu inteligentnych ludzi w
room pomagali mi dostać się z czegoś liniowy do czegoś
logarytmiczna, z czegoś czerwony na coś zielonego.
>> Ale w tym przypadku, Jennifer sam może fundamentalnie poprawić na
Wykonanie jej pierwszego algorytmu przez, ponownie, po prostu myśleć trochę trudniej.
A teraz, gdy przychodzi czas na wdrożenie te rzeczy, dowiedzieć się,
co linie kodu można napisać takie że można je powtórzyć jeszcze raz, i
znowu, i znowu, jakby w pętli mody.
Ponieważ nie będziesz mieć luksus, jak Jennifer nie w pierwszym, do
po prostu całą masę FI i powiedzieć, Hm, jeżeli pierwsza liczba jest 4,
pozwól mi przejść całą drogę do końca.
Ooh, jeżeli ta liczba jest zbyt duża, pozwól mi przejść arbitralnie powrotem
do drugiego elementu.
Przekonasz się, że to będzie dużo trudniej sformalizować to, co my, ludzie,
za oczywiste, jak bardzo rozsądne heurystyka, ale komputer jest tylko
zamiar zrobić to, co możesz powiedzieć to zrobić.
>> Teraz to ma bardzo ciekawe implikacje.
Ten wykres jest rodzajem myśli do rodzaju przytłaczają wizualnie, ale zauważ, gdzie
jest prosta w tym wykresie?
Gdzie jest wykres liniowy które nazywamy n?
Cóż, jakby w kierunku dna z tego obrazu, prawda?
Więc zrobiliśmy to mamy coś w rodzaju pomniejszeniu do osi x i
oś y postarać się poczucie tego, co inne rodzaje krzywych wyglądać.
>> A specyfika matematyczne wyrażenia dzisiaj tak nie będzie miało znaczenia
dużo, ale zauważ, że jest wiele algorytmy, które są znacznie gorsze niż
coś, co jest liniowa.
Rzeczywiście, n do sześcianu wygląda bardzo źle.
2 do n wygląda bardzo źle. n do kwadratu wygląda bardzo źle.
I zobaczymy, co niektórzy z tych może być w rzeczywistości dziś.
A log n nie czuje się tak źle, ale lepiej niż n jest log podstawa 2 n.
Ale wiesz, to byłoby nawet bardziej zdumiewające, jeśli Jennifer, czy my,
że pierwszy tydzień, wymyślił coś, co jest log log n.
>> Tak więc, innymi słowy, nie ma tego cała Zakres możliwych rozwiązań
problemy, ale nawet tutaj ogłoszenie to, co się wydarzy.
Kiedy pomniejszyć, które z tych krzywych Okaże się absolutnym
najgorsze te na ekranie teraz?
Więc n kostkę wygląda całkiem źle w tej chwili.
Jeśli jednak pomniejszyć i zobacz więcej x i y-axis, kto będzie
dominują ostatecznie?
Więc to rzeczywiście okazuje się, że 2 do n, i można to rozwiązać tylko poprzez
podłączając niektóre coraz większa numery, a zobaczysz, że od 2 do
n, rzeczywiście, ma większe znacznie szybciej.
Jeśli naprawdę pomniejszyć, a 2 do Algorytm n absolutnie do bani.
Mam na myśli to zajmie trochę czasu na
komputer do rezygnacji przez.
>> Ale zobaczymy z czasem, zwłaszcza z przyszłych zbiorów problem, a nawet
Ostateczne projekty, to dane zestaw ma duży, dobrze?
Nawet w pierwszej wersji Facebook, jak liczba przyjaciół, a
Liczba zarejestrowanych użytkowników ma duże, można sortować z telefonem go i
zaimplementować coś z liniowym wyszukiwania lub bardzo proste sortowanie
algorytm, jak zobaczymy dzisiaj.
Trzeba zacząć myśleć trudniejsze i trudniej o tych problemach.
Oraz rodzaje problemów takich miejscach jak Facebook i Google i Microsoft,
a inni pracują na to dokładnie te rodzaj wielkiego sortowanie danych pytań
coraz te dni.
>> Dobrze.
Więc powodzenia Jennifer w tym drugim Algorytm, szczerze mówiąc, ona zadziwiająco
dobrze za pierwszym razem, ale niech piszę to jak szczęście, tak abyśmy
może ten punkt.
W drugim przypadku, ona wykorzystała algorytm, który powtarza się ponownie i
ponownie, ale brała za pewnik pewne założenie, że prawo
ją, ale ona wykorzystać jakiś szczegół Drugi raz, że nie mają
pierwszy raz.
Co było, co?
>> Że lista została posortowana.
Tak więc, jak tylko lista została posortowane, że twierdzą, że Jennifer była w stanie zrobić
zasadniczo lepiej.
7 drzwi, tak, to nie jest ciekawe, Ale załóżmy, że to my jesteśmy 7000000 drzwi.
Zaloguj n jest na pewno będzie wykonywać wiele, wiele
szybciej w dłuższej perspektywie.
Ale musiała mieć Drzwi posortowane dla niej.
Teraz, ja pozwoliłem sobie robić z góry na ekranie komputera
tutaj, ale przypuszczam, że Jennifer miał to zrobić sama?
Załóżmy, że drzwi te przedstawione dane w bazie danych, lub
przyjaciele zarejestrowani na Facebooku, lub żadnych stron internetowych w internecie, że
różne strony internetowe mogą potrzebować do indeksu lub przeszukiwać.
>> Załóżmy, że po prostu miał surowych danych ustawione i to pozostało do Ciebie, lub do
Jennifer to zrobić sortowanie?
To raczej wymaga od nas odpowiedzi pytanie, dobrze, ile czasu
wziąłby Jennifer, a nawet mnie, posortować te liczby z góry tak
że mogła skorzystać z tego?
Prawda?
Ponieważ implikacja, oczywiście, jeśli zajmuje mi sporo czasu, aby uporządkować
numery, kto do cholery obchodzi, że cię Można znaleźć wiele jak 50 tak szybko,
jak w przypadku Jennifer, jeśli więcej niż przytłoczony ilość całkowitego czasu
zajęło sortując rzeczy z góry?
>> Zobaczmy więc, jeśli nie możemy malować obraz tutaj.
Mam całą masę więcej stresu kulki, czy to pomaga
przełamać lody tutaj.
A jeśli nie masz nic przeciwko, że potrzebują siedem wolontariusza -
on, OK.
Wow.
Tak więc nie trzeba wydawać na lampy biurkowe, wydaje się.
Dobrze.
Tak jak o tobie dwa z przodu.
Jak o tobie dwóch facetów w plecy.
Więc to jest cztery.
Jak Pan przed pięć, sześć i siedem.
Właśnie tam.
Twoja przyjaciółka, wskazując cię, tak dostaniesz nagrodę.
>> Dobrze.
Chodź na górę.
A dlaczego nie mamy Cię chłopaki chodź tutaj.
Mam zamiar dać każdą liczbę.
I iść dalej i zorganizować siebie identyczny do tego, co
przedstawione na ekranie.
>> [Wstawienie GŁOSÓW]
>> DAVID J. MALAN: Oop, sorry.
Bug.
Dobrze.
Cóż, jedziemy.
Numer pięć.
Numer sześć.
Jeden, dwa, trzy, cztery, pięć, sześć, siedem.
Oh, to jest niewygodne.
>> Głośnik 2: Ja po prostu -.
>> DAVID J. MALAN: Good deal.
Dobrze.
Dziękujemy za udział.
>> [APPLAUSE]
>> OK.
Dobrze.
Tak więc mamy cztery, dwa, sześć, jeden, trzy, siedem, pięć.
Doskonalić więc mamy siedem wolontariuszy tu, którzy są równe szerokości do
array, że gramy z wcześniej.
I wybrałem siedem powodów które będą po prostu
wygodne w trochę.
I mam zamiar zaproponować pierwsze, że rozwiążemy tych siedmiu wolontariuszy.
Jeśli chcesz, po pierwsze, przywitać chociaż.
Od tego będzie niewygodne kilka minut.
Przedstawcie się.
>> GRACE: Cześć, jestem Grace.
Jestem studentem drugiego roku w Leverett House.
>> Branson: Hi.
Jestem Branson.
Jestem studentem pierwszego roku w Weld.
>> GABE: Hi.
Jestem Gabe.
Jestem młodszy w Cabot.
>> NEIL: Jestem Neil.
Jestem studentem pierwszego roku w Matthews.
>> JASON: Jestem Jason.
Jestem studentem pierwszego roku w Greenough.
>> MIKE: Jestem Mike.
Jestem studentem pierwszego roku w Grays.
>> JESS: Jestem Jess.
Jestem studentem drugiego roku w Leverett.
>> DAVID J. MALAN: Excellent.
Dobrze.
Dziękuję wszystkim naszym wolontariuszy tutaj do tej pory.
I wyzwanie pod ręką teraz dzieje się do rodzaju tych facetów, ale wtedy
będziemy musieli trochę pomyśleć trudno o tym, jak skutecznie faktycznie
sortowane ich.
Warto więc najpierw spróbować.
Chłopaki widać nawzajem numery po prostu przez umieszczenie wokół narożników.
Śmiało i trwa kilka sekund, a sort sami z najmniejszych na
od lewej do wielkości po prawej stronie.
Idź.
>> OK.
Dobra.
To było naprawdę cholernie szybko.
Teraz ktoś tutaj, to, co było algorytm że ci faceci stosowane?
>> SPEAKER 1: Najmniej do największych.
>> DAVID J. MALAN: OK.
Najmniej do największych jest naprawdę coś w rodzaju obiektywne, ale nie jestem pewien, że to
naprawdę algorytm.
Najmniej do największych nie mówi mi krok po kroku, co robić.
Tak?
>> SPEAKER 1: [niesłyszalne]
>> DAVID J. MALAN: OK.
Więc jeśli widzisz osobę mniejszy niż numer, a następnie przejść do
prawo z nich.
Więc to jest teraz coraz bardziej wyraziste, bardziej jak algorytmu, ponieważ
można powiedzieć, czy to, to.
Więc mamy jakieś Konstrukt warunkowe.
I te chłopaki wydawało się zrobić kilka razy, ponieważ niektórzy z was trochę przeniesione
w pewnej odległości.
Więc nie było prawdopodobnie jakiś rodzaj zapętlenie dzieje się w ich umysłach.
>> Spróbujmy jednak sformalizowanie tego.
Jeśli wam się przywrócić z powrotem w tym układzie.
Zobaczmy, czy nie możemy sformalizować ten bit, a następnie zadać sobie pytanie, po prostu
jak skuteczne to jest?
Oczywiście, gdy robimy to wolniej, to się czuje jako dobra
algorytm, ale zobaczymy, czy możemy położyć rękę na konkretnych etapach.
>> Więc wy dwaj faceci są cztery i dwa.
Albo poprawne lub niepoprawne zamówienie?
Oczywiście błędne.
Więc zamienione.
Teraz mam zamiar przejść na bok tutaj i powiedzieć, 05:56.
Czy poprawne lub niepoprawne?
>> GABE: Correct.
>> DAVID J. MALAN: Correct.
Sześć i jeden?
Nope.
Zamień.
Więc to jest dwa swapy.
Sześć i trzy?
Nope.
Zamień.
Sześć i siedem?
Wygląda dobrze.
Siedem i pięć?
>> JESS: [niesłyszalne]
>> DAVID J. MALAN: OK, zamienić.
I sortowane.
Dobrze.
Tak oczywiście nie jest, prawda?
Więc nie było więcej się dzieje.
Ale rzeczywiście, ci faceci, nawet po prostu instynktownie.
przechowywane w ruchu.
Oni nie tylko zatrzymać, gdy tylko skorygować jeden problem.
Tak więc.
Rzeczywiście, mam zamiar mieć zrobić to samo.
Będę musiał sortować zwijanie z tyłu na początku tego problemu,
lub na początku tej tablicy ludzie, zacznijmy nazywając je.
>> A teraz to, co powinno mój algorytm na drugim podaniu być?
>> SPEAKER 1: To samo.
>> DAVID J. MALAN: To samo.
A to, zaczynam się podoba, prawda?
Jak tylko znajdziesz się robi to samo w kółko, to
coraz bardziej jak algorytmu, i mniej ludzki instynkt.
>> Więc teraz, znowu to samo.
Dwa i cztery?
Nie.
Cztery i jeden?
Ach, rzeczywiście niektóre działa jeszcze do zrobienia.
Dla i trzy?
Dobra.
Cztery i sześć?
Sześć i pięć?
Sześć i siedem?
OK, teraz zrobić.
OK, nr.
Muszę wrócić.
>> Więc teraz znowu to robimy trochę bardziej świadomie.
A teraz, jest tylko jeden mózg wykonywania tego algorytmu.
Jeden CPU, jeśli będzie.
I szczerze mówiąc, to jedyny zasób będziemy mieć dostęp.
A gdy już wrócisz do klawiatury i mieć coś jak C w naszym
zbycie, my tylko pisania programu że może zrobić jedną rzecz na raz.
Zważywszy, że te chłopaki chwilę temu, dźwigni finansowej ich zbiorowej umysłowego
jak zrobiliście w zera tygodni.
Więc trzymajmy to robi.
>> Dwa i jeden.
Dwa i trzy.
Trzy i cztery.
Cztery i pięć.
Pięć i sześć.
Sześć i siedem.
Gotowe?
Więc jestem, ale pozwól mi grać Adwokat diabła.
Czy, rodzaj komputera, który właśnie zanotował przejść przez ten szereg
ludzi, wiem, że skończę?
>> SPEAKER 1: Nie
>> DAVID J. MALAN: Więc dlaczego?
Co muszę zrobić, aby stwierdzić stanowczo, że mam zrobić?
Prawdopodobnie jeden karnet.
Prawda?
Bo wszystko, co wiem od tego poprzedniego karnet jest to, że skorygowany błąd.
A to oznacza, może jest jeszcze inny błąd
że muszę poprawić.
Więc mogę tylko mieć pewność, przez przewijanie i następnie sprawdzenie, jedna do dwóch, i dwa
trzy, trzy i cztery, cztery i pięć, pięć i sześć, sześć i siedem.
OK, teraz już nie ma pracy.
>> Mogę z pewnością pamięta, że ​​ja nie pracować z czymś w zmiennej,
jak int.
Nazwijmy to swapy, a jeśli swap jest 0 raz tu dostać, a zaczęło się od 0, a następnie
Chciałbym po prostu być głupi, aby nie poddawać się iz powrotem, sprawdzając ponownie, a
znowu, i znowu, tak?
Bo utkniesz w niektórych rodzaj nieskończonej pętli.
Więc jak tylko jest 0 swapy, możemy twierdzić, że ta
Algorytm jest rzeczywiście pełne.
>> Teraz postawmy nazwę na ten temat.
Algorytm, który proponuję, który właśnie realizowany jest coś, co nazywa bańka
sortowania, znane jako takie, w tym sensie, że numery, które są większe rodzaju
bubble drogę do góry, lub w górę do końca tablicy numerów.
Ale jak skuteczny był ten algorytm?
Ile kroków ja fizycznie muszą się, na przykład, aby posortować je
siedem ludzie?
>> Cztery do pięciu?
OK, zbyt wiele jest ostatecznie będzie odpowiedź.
Ale nawet wtedy, określony numer nie jest tak interesujące.
Miejmy uogólnić go jako n.
Więc gdybym n ludzi tutaj, a oni były, w pewnym sensie, w przypadkowej kolejności w
początku, w tym oryginalnej kolejności.
Cóż, ile kroków nie mam wziąć na pierwszym przejściu?
Była to jedna, dwie, trzy, cztery, pięć, sześć, a oni siedem osób, więc
to jest siedem, sześć - tak, że jest n minus jedna kroki po raz pierwszy.
>> Teraz, ile kroków nie mam podjąć, gdy przewinął?
Cóż, może faktycznie podwoić, że jeśli bardzo chcieliśmy, ale teraz jestem
tylko powiedzieć, dobrze, kolejny n minus 1.
Więc n minus 1 dostanie irytujące, aby śledzić, więc niech
tylko zaokrąglić w górę nieznacznie.
Więc 2n kroków.
Więc 14 kroków, lub dać.
>> Ile razy biorę krokiem następnym razem?
Cóż, 3n.
naprawdę.
Teraz, w najgorszym przypadku, dla przykład, ile razy będę musiał
poszedł w tę iz powrotem, tam iz powrotem, wykonywania tego algorytmu, zamiana
ludzie na każdym przejściu, z grubsza?
To rzeczywiście n do kwadratu, tak?
>> Bo w najgorszym wypadku możesz rodzaj z myślą o tym intuicyjnie,
choć może to zająć trochę nieco czasu tonąć w.
W najgorszym przypadku, co by te siedem osób wyglądało, w
warunki umowy ich liczby?
Całkowicie do tyłu, prawda?
I tylko do symulacji, które, co masz na imię?
>> MIKE: Mike.
>> DAVID J. MALAN: Mike?
OK, Mike, można po prostu dołączyć do mnie na tutaj tylko o sekundę?
W rzeczywistości, nie ma.
Niestety Mike, do tyłu niech.
Jak masz na imię?
>> NEIL: Neil.
>> DAVID J. MALAN: Neil.
OK, Neil, pójdziesz ze mnie, jeśli nie masz nic przeciwko.
Więc mam zamiar zaproponować, tylko dla Prostota, że ​​Neil jest teraz w jego
najgorszy możliwy przypadek.
Ale pamiętam, jak I wdrożone mój algorytm.
Mam porównanie, porównanie, porównanie, porównanie, porównanie, oh.
Teraz ci ludzie są z z rzędu, więc to naprawić.
Więc chłopaki zamienić.
Ale uważają się teraz, w jaki sposób o wiele dalej zgadza Neil mają iść?
To mniej więcej n.
Wiesz, to nie jest faktycznie n.
To jak, n minus 1, ale jestem coraz zirytowany śledzenie mało
liczba, więc po prostu nazwać to n.
>> Więc jeśli Neil porusza każdy krok maksymalnie czas i przenieść Neil jeden krok,
Muszę zrobić to bardzo żmudny przepustkę tam iz powrotem, to jest mniej więcej
robi to, n krokach, w sumie n razy, bo to się do mnie
że wiele kroków, aby Neil wszystkie sposób, gdzie należy.
Nie mówiąc już wszyscy jeśli faceci były mis-zamówić również.
>> Więc nazwijmy rodzaju bańki n do kwadratu.
Czas działania tego algorytmu, wydajność tego algorytmu,
wydajność tego algorytmu są po prostu opisać więcej
ogólnie n do kwadratu.
Co jest miłe, bo mogłem zrobić sam przykład z ośmiu osób, dziewięciu
ludzie, miliony ludzi, i że Odpowiedź nie ulegnie zmianie.
>> Jeśli więc wy, nie miałbym nic przeciwko, niech zresetować do miejsca startu.
I spróbujmy podejść i dwie inne sprawdzić, czy nie możemy zrobić fundamentalnie
lepszy niż ten.
Więc tym razem, mam zamiar zaproponować rodzaj innego algorytmu.
To było bardzo mądre z nas ostatni raz, a wy się prawo do
prawo instynkty tylko rodzaju Zamiana parami.
Ale jeśli naprawdę chciałem podejść do tego po prostu, a moim celem jest, aby przenieść
wszystkie małe liczby w ten sposób, a wcisnąć wszystkich dużych liczb, które
sposób, dlaczego nie po prostu zrobić, że w najbardziej naiwny sposób można i zobaczyć, czy ja
można zrobić lepiej niż to, co było dość złożony algorytm?
>> Zobaczmy więc.
Cztery jest dość mała liczba, więc jestem zostawię cię tam chwilę.
Ooh, numer dwa jest jeszcze lepiej.
Więc może po prostu krok do przodu na chwilę?
Obecnie jest to mój najmniejszy numerowane kandydat, i będę pamiętać
że z, jak, zmiennej.
Ale będę zaglądać.
Czy jest ktoś, kogo liczba jest mniejsza?
Six, nie.
Och, jest Neil ponownie.
>> Więc mam zamiar wcisnąć się z powrotem rodzaj koncepcyjnie.
Neil wystąpi.
A teraz, zmienną, że używam do śledzić, kto ma najmniejsze
Numer jest aktualizowana zawierać Neila lokalizacja.
Cóż, zobaczymy.
Trzy, siedem, pięć.
OK, wiem, że Neil był najmniejszy.
Co jest najprostszą rzeczą dla mnie teraz zrobić?
Nie mam zamiaru tracić czasu po prostu przepuszczając Neil jedno miejsce w lewo.
Dlaczego nie mogę umieścić Neil gdzie należy, co jest oczywiście gdzie?
>> Aż na początku.
Więc Neil, chodź ze mną.
I co masz na imię?
>> GRACE: Grace.
>> DAVID J. MALAN: Grace.
OK.
Więc Grace, niestety, jesteś rodzaju w drodze.
Jak więc rozwiązać ten problem?
Prawda?
Jeśli jest to tablica, jest tylko siedem miejscowości.
Przypomnijmy, że z Robem, rozmawialiśmy o deklarując wieku, a mieliśmy tylko
skończona liczba grup wiekowych?
Sama idea tutaj.
Mamy tylko skończoną ilość liczb całkowitych.
Grace jest trochę w naszym Tak więc w jaki sposób naprawić?
>> Najprostszym sposobem jest jak, Grace, sorry.
Będziesz musiał przejść istnieje więc możemy zrobić miejsce.
Teraz, jeśli myślisz o tym, być może my po prostu się pogorszyć sytuację.
A może i my, bo co, jeśli Grace była w odpowiednim miejscu?
Ale wiemy, że nie jest, bo inaczej, to byłaby
stojąc w przód zamiast Neil w tym czasie, prawda?
Mamy już sprawdzone jej numer out.
>> Dobrze.
Więc teraz, Neil jest w odpowiednim miejscu, a Mogę zrobić niewielki optymalizacji.
Na następnej minuty, będę ignorować Neil razem, w taki sposób, aby nie
tracić czasu, lub przypadkowo zamienić go na niewłaściwym miejscu.
Więc teraz, jak znaleźć następny Element, który jest najmniejszy?
Two.
To bardzo dobry numer, jeśli chcesz krok do przodu i
Ja pamiętam.
Six, nie jest dobre.
Cztery, trzy, siedem, pięć, nie jest dobre.
Więc pozwól mi przejść do Twój właściwe miejsce.
A my po prostu mieliśmy szczęście tym razem.
>> Teraz mam zamiar zignorować dwóch facetów, a teraz jeszcze jedno
przejść przez to.
Six, że dość mała liczba.
Chodź do przodu.
Oh, przepraszam.
Liczba Grace jest lepszy, to krok na przód.
Cztery.
Niestety, Grace.
Wróć ponownie.
Numer trzy to lepiej.
Seven.
Five.
A teraz to, co masz na imię?
>> JASON: Jason.
>> DAVID J. MALAN: Jason.
Więc Jason jest teraz najmniejszy Element Wybrałam.
Gdzie on pójdzie?
Więc gdzie sześć jest.
A nazwa jest znowu?
>> GABE: Gabe.
>> DAVID J. MALAN: Gabe.
Gabe jest w drodze.
Co najłatwiej zrobić?
Zamiana tych dwóch facetów i kontynuować.
Więc teraz zobaczymy.
Kto jest najmniejszy?
Cztery.
Pozwólcie mi tylko trochę oszukiwać.
Five będzie najmniejsza.
I znaleźć obok, jeśli chcesz do kroku do przodu, co mam zrobić z
ci faceci, z Gabe?
Zamień ponownie.
Więc teraz, jeszcze lekko uszkodzony.
Znalazłem Gabe się najmniejsza, więc I pop go, przenieść was over.
I gotowe.
>> Tak więc odpowiedź jest taka sama.
Efekt końcowy jest taki sam.
Która z tych dwóch algorytmów jest lepiej?
Drugi, słyszałem.
Dlaczego?
>> SPEAKER 3: Jest n kroki [niesłyszalne].
>> DAVID J. MALAN: To n kroków w najbardziej.
Ciekawe.
Więc jest to jednak?
Jak więc znaleźć najmniejszy element?
Ile kroków nie muszę brać znaleźć najmniejszy element?
I nie patrzeć na drodze na koniec, prawda?
Ponieważ w przypadku najgorszego przypadku, co jeśli Neil był tutaj?
Więc tylko znalezienie najmniejszy element bierze mnie n lub n kroki minus 1.
Ale OK.
Więc naprawić Neil.
Pamiętaj, że około minuty temu.
>> Ale jak znajdę następne najmniejszy element?
To n minus 1, lub n minus 2 naprawdę, od liczby etapów.
Więc OK.
Więc zrobiłem n minus 2.
Dobrze.
Tak, że czuje się trochę lepiej.
Dobrze.
Ile kroków następnym razem znaleźć numer trzy?
Więc n minus 4.
Więc to spada, jeden mniej stawać na każdej iteracji.
Więc to nie czuje się lepiej, prawda?
Jeśli ostatni raz to było w przybliżeniu n razy n, tym razem jest to n minus 1, oraz n minus
2, oraz n minus 3, oraz n minus 4, kropka, kropka, kropka.
Ale czy pamiętacie z liceum podręczniki, trochę oszukiwać
Arkusz z tyłu, który ma formuły, jeśli można dodać do tego szereg liczb,
co liczby stopni będzie, że biorę tutaj?
>> Jest to jedna z tych, jak, N minus 1 razy n, podzielić przez 2.
Więc pozwól mi zobaczyć, czy mogę wyciągnąć to się na chwilę.
I znowu jestem rodzaju zaokrągleń niektórych numery tylko zachować nasze życie proste,
ale o ile pamiętam, to jest coś jak gdyby Ja n minus 1 rzeczy, a następnie n minus
2, a następnie n minus 3, to z grubsza coś w tym ponad 2, a jeśli
rozmnażajcie się na to, że jest faktycznie plac n.
To nie czuje zbyt dobrze. n minus n nad 2.
>> Ale tutaj jest rzeczą.
W dziedzinie informatyki, gdy problemy zaczynają się interesujące jest, gdy n
robi się naprawdę duża.
A gdy n staje się naprawdę duża, co z wartości te będzie dominować wszystko
z innymi?
To rodzaj n kwadratu, tak?
Tak, dzielenie przez 2 jest bardzo dobry.
Ale jeśli mówimy o miliardach z części danych lub biliony
fragmentów danych, OK, jesteś dwa razy szybciej.
Ale kto tak naprawdę obchodzi, że dużej ilości, Jeśli czynnik ten jest co dostaje
większe i większe.
I z pewnością, to sprawia, że ​​więcej Różnica od tego faceta.
Więc nawet jeśli macie rację, Drugi algorytm, nazwijmy go
sort wybór, jest w świecie rzeczywistym, nieco szybciej potencjalnie, bo jestem
biorąc coraz mniej kroki za każdym razem.
>> To naprawdę nie jest zasadniczo szybciej.
Bo jeśli rzeczywiście grać to dla dużych wartości n, na koniec
dzień, na tyle duże, n, to jeszcze będzie czuć się dość powoli.
Cóż, pozwól mi wziąć jeden ostatnio przechodzą na to.
To, co nazwałbym sort wybór.
Czy wy zresetować siebie po raz ostatni?
I w tym ostatnim przypadku, zamierzam zaproponować coś
nazywa rodzaj wstawiania.
Sort Insertion jest, koncepcyjnie, nieco inaczej.
>> Zamiast tam iz powrotem i wybierając najmniejszy element, jestem
po prostu się do czynienia z każdym z nich Chłopaki, jak spotykałem je i włóż
je w ich właściwym miejscu.
Więc mam zamiar zacząć z Grace, i widzę, że jest numer cztery.
Gdzie numer cztery należą?
I nie rozpoczął sortowania niczego, więc Grace trafia na pobyt tam.
A teraz mam zamiar ubiegać, jeśli można zrobić krok w prawo, to
moja posortowane listy, to jest mój nieposortowane pozostała lista.
Więc teraz mam zamiar przejść obok, a co masz na imię?
>> Branson: Branson.
>> DAVID J. MALAN: Branson.
Więc Branson jest numerem dwa.
Więc idę do podjęcia się na chwilę.
A teraz, gdy należysz w tej tablicy?
Tak więc na prawo Grace.
Więc znowu, jesteśmy rodzajem dokonywania Grace zrobić dużo pracy tutaj.
Gdzie możemy umieścić?
Więc będziemy przesuwać się do w lewo i włóż Branson tam.
Ale teraz twierdzą, że chłopaki są zrobione.
Ale zauważ, nie używam dodatkowego miejsca.
Jest jeszcze 2 elementy o, 5 tutaj.
Całkowity rozmiar tablicy jest 7, więc jestem nie oszukuje, wszystko w porządku?
>> Więc teraz mamy, z Gabe tutaj, numer sześć, gdzie należysz?
Masz szczęście ponownie.
Więc masz na pobyt tam.
Wystarczy niewielki krok w prawo po prostu wyjaśnić, że jesteś sortowane.
A teraz mamy Neil kolejny numer jeden, gdzie idziesz?
A teraz jest, gdy zaczniemy widzieć, że Algorytm ten, choć na pierwszy
spojrzenie, czuje się całkiem inteligentny, oglądać to, co się wydarzy.
Jeśli można krok do przodu.
>> W przypadku, gdy chcemy umieścić Neil?
Tak oczywiście tutaj, tak jak dostaniemy Neil tam?
Zróbmy to krok po kroku.
Gabe, gdzie trzeba iść?
Tak, więc wziąć jeden duży krok, lub dwie pół-kroki, aby
jeden krok tam.
Grace, gdzie jesteś?
Dobra.
Więc kolejny krok.
I wreszcie, Branson?
Kolejnym krokiem.
A teraz możemy umieścić Neil na miejsce.
>> Więc teraz, kontynuować tę logikę.
Mimo, że nie przenoszą Neil nad, kółko, kółko, aby go
gdzie przechodzi, w najgorszym przypadku, następny numer możemy spotkać może
być numer, powiedzmy, nie było wiele zero, a następnie jedziemy do przesunięcia wszystkich
ci faceci.
Załóżmy, że istnieje liczba, negatywne jeden, to mamy do przesunięcia
wszystkie z tych facetów.
Więc jesteśmy naprawdę tylko trochę przerzucanie Problemem wokół, tak, że jesteśmy
przeniesienie kosztów z Proces selekcji tak wstawiania
Proces, tak, że wy po prostu miał przenieść około n minus coś
liczba kroków.
A że liczba kroków tylko będzie zwiększenie jak wybrać więcej numerów,
czy muszę zachować wtykając chłopaki z powrotem, i z powrotem, i z powrotem.
>> Tak smutne, to wszystkie te algorytmy są n do kwadratu.
Idziemy do przodu i dzięki tym guys, i wizualizacji te trochę
inaczej.
Bardzo dobrze zrobione.
>> [APPLAUSE]
>> Dobrze.
Proszę bardzo.
Dzięki za -
>> Branson: [niesłyszalne] zachować numery.
>> DAVID J. MALAN: No, możesz zachować numery, jak również.
Dobrze.
Niezła robota.
Dobrze.
Zobaczmy więc, jeśli nie możemy teraz podsumować szybciej i bardziej wizualnie,
dokładnie to, co się stało tu w następujący sposób.
Mam zamiar iść do przodu i podciągnąć Firefox.
Będziemy łączyć tę demonstrację w trakcie swojej stronie internetowej.
Java jest trochę irytujące, aby dostać pracę w niektórych przeglądarkach te dni.
Więc jeśli się bawić to w domu, sobie sprawę, być może trzeba użyć przeglądarki Firefox
żeby działało.
I co mam z tym zrobić Demonstracja jest następujący.
>> Na dole, mam całą masę opcje menu, w tym rozpoczęcia i
stop.
Ponadto, jak na bok, nie wydaje się być bug w tych programach, w którym można
nie można rzeczywiście zobaczyć początkowej lub końcowej przytrzymać przycisk, chyba że polecenie lub Alt
plus i powiększyć, które z zaciekawieniem pokazuje więcej przycisków.
Więc po prostu FYI jeśli grasz z tego w domu.
Teraz mam zamiar kliknąć przycisk Start w tak chwilę, po określeniu opóźnienia,
jak, 200 milisekund, po prostu dzięki czemu możemy zobaczyć, co się dzieje.
>> Tak więc twierdzenie, że jest to wizualizacja z pierwszym algorytmem
ci faceci nie, sortowanie bąbelkowe, przy czym Zamieniliśmy ludzi parami.
Kluczem do tej wizualizacji pigułce jest to, że wysokość pasków
oznacza wielkości liczby.
Więc wyższy bar, większa liczba.
Krótszy bar, mniejsza liczba.
A jeśli zauważysz, jedziemy przez Pierwsza iteracja tego algorytmu,
zamiana małych i dużych liczb, tak aby mała liczba jest na pierwszym i
Duża liczba przesuwa się w prawo.
>> I jak tylko dostać się do końca tablicy wiele więcej numerów niż siedem, jesteśmy
zamiar wrócić do początku.
I przewidywania tego.
Na lewej stronie, że mały facet będzie zamienić na bok, a to
proces powtarza się.
Teraz ta wizualizacja szybko dostaje nudne, więc pozwól mi iść dalej i zatrzymać
to zmień coś znacznie opóźnienia szybciej po to, żeby teraz, wyczucie
ten algorytm.
>> Więc nawet jakbym pędził go, to jest jak modernizacja mój procesor, kupując
nowy komputer.
I nie całkowicie zmieniły moje algorytm, ale można rzeczywiście zobaczyć więcej
wyraźniej niż z ludźmi, że duża Liczby są przepuszczanie do szczytu,
i małych pęcherzyków są liczby do dołu.
A teraz to, co tutaj klasyfikowane.
I jak na bok, na placach, jest tam jest wiele do księgowości
pomóc policzyć ile porównań, lub ile ma swaps
faktycznie zostało zrobione.
>> Cóż, spróbować jednego z inni widzieliśmy.
Pozwól mi kliknij rodzaju bańki tutaj, a pozwól mi wybrać, i cała ta strona
jest trochę błędów.
Miejmy zaakceptować ryzyko i uruchomić go ponownie.
Proszę bardzo.
Więc zróbmy coś w rodzaju wyboru.
Nie wiem, dlaczego menu pojawia się tam.
Miejmy powiększać to naprawić bug, to zmienić do 50.
Ach, niech faktycznie , które znacznie szybciej.
Pięć milisekund lub tak, i Start.
>> Jest to więc rodzaj selekcji.
Więc jeszcze raz, pomyśl o tym, co A z ludzi tutaj.
Przeszliśmy tablicy i wybrany najmniejszy element ponownie
i znowu, i znowu.
Teraz twierdzą, że była jeszcze bardzo złe.
To wciąż n do kwadratu, lub dać, ale to było w rzeczywistości, nieco
szybciej, bo rzeczywiście przy nieco mniej etapów każdym.
Ale my tylko mówimy co?
Być może 40 lub tak bary tutaj?
Nie mówimy 40.000.000.
Więc to nie jest dla mnie zupełnie jasne, że był rzeczywiście znaczący zysk.
>> Chciałbym teraz wrócić i zmienić do naszych Trzeci algorytm, który wybrać
sort wstawiania.
A teraz to naprawdę buggy, ponieważ menu naprawdę nie powinno być tam.
Więc teraz my przewijania tutaj i zacząć ten algorytm.
Whoop, start i stop.
Więc ten jeden rodzaj ma ładny wzór do tego, w którym jesteśmy znowu
włożeniu ludzi, lub W tym przypadku, paski do
ich właściwe miejsce.
I to już zrobione wcześniej Odwróciłem się.
Ale również to, w teorii, jest nadal n do kwadratu.
>> Zobaczmy więc, jeśli nie możemy podsumować Są następujące.
Mam zamiar iść do przodu i po prostu dać nam coś w rodzaju wspólnej drodze rozmowy
o tych rzeczach, pozwól mi przedstawić tylko trochę notacji tutaj.
Czy na pewno chcesz zobaczyć coś, co nazywa big O, ponieważ jest dosłownie duża
O. I to jest sposób, że komputer naukowiec lub matematyk nawet używa
opisać czas pracy pewnego algorytmu.
Ile kroków to właściwie zabrać?
>> Teraz będę musiał się wstydzić z mój charakter pisma tutaj za chwilę.
Ale pozwól mi iść dalej i powiedzieć, że to będzie wielki O tutaj.
I niech mi przedstawić jeszcze jeden symbol, omega kapitału.
Omega ma być odwrotnie, zasadniczo, z dużym O. mając na uwadze duże O
oznacza, w najgorszym przypadku, ile czasu może jakiś algorytm podejmuje,
warunki n, omega będzie się, ile czasu może to
się w najlepszym przypadku.
I zobaczymy, co rozumiemy przez najlepszym wypadku za chwilę.
>> Zacznijmy więc coś prostego.
Zacznę liniowym wyszukiwania.
Więc nie sortowania.
Nazwijmy ten liniowy wyszukiwania.
A teraz, zrobić trochę Stół z tego.
Teraz, w przypadku liniowej wyszukiwania W najgorszym przypadku, ile kroków jest
to zajmie mi znaleźć liczba arbitralnego wyboru?
I jest n liczba drzwi lub n łączna liczba.
Najgorszy przypadek.
Ile kroków będę musiał podjąć, aby znaleźć numer 50 w tablicy
drzwi n?
A dlaczego?
Ponieważ może to być wszystkie sposób na na końcu.
Tak więc podobnie jak Jennifer spotkałem, numer 50 było sposobem na, więc w
Szukaj w najgorszym przypadku liniowy jest duże O n, powiemy.
>> Co najlepszym przypadku, jeśli się naprawdę szczęśliwy?
To po prostu będzie jeden krok, lub stałą ilość kroków.
Więc opiszemy, że jako 1.
Więc to jest bardzo dobre.
Teraz co, jeśli zrobił coś jak wyszukiwanie binarne?
Więc binary search, w najgorszym sprawę, jak wiele czasu zajęło?
>> [Wstawienie GŁOSÓW]
>> DAVID J. MALAN: Tak właściwie, to słyszałem to w kilku miejscach.
Więc to faktycznie log n, lub dać, bo jak podzielić listę na pół
znowu, i znowu, i znowu, że jesteśmy w stanie znaleźć ostatecznie wartość,
jeśli jest tam, ale jest haczyk.
Co jest założenie, że mamy do za oczywiste dla binarnego wyszukiwania?
To musi być sortowane.
To nie jest posortowane, można podzielić na rzecz w pół znowu i znowu, i
mogą iść w lewo, i można iść w prawo, a można przejść w lewo i prawo, ale jesteś
nie będzie znaleźć elementu, gdyby lista nie jest posortowana, ponieważ
można go przegapić.
Ponieważ twój heurystyki, aby jechać w lewo lub w prawo, będzie błędna, jeśli jest
rzeczywiście nie sortowane.
Więc jest coś w rodzaju ukrytych kosztów do korzystania z czegoś takiego.
>> Teraz idziemy do naszego sortowaniu Algorytmy nie szukając -
oh, naprawdę idziemy w ślepą.
Binary search w najlepszym przypadku?
To także 1, jeśli okazuje się być w samym środku tablicy, lub
Środek książki telefonicznej.
Teraz zróbmy coś w rodzaju bańki.
Więc jeszcze raz, teraz wchodzimy rodzaju, a nie wyszukiwania.
>> W najgorszym przypadku, ile kroków nie mamy Sortowanie bąbelkowe roszczenia zajmie?
n do kwadratu.
Więc mam zamiar wyciągnąć to.
Och, moje pismo wygląda jeszcze gorzej , kiedy to przewiduje się, że duży.
Dobrze.
Więc to n do kwadratu.
A w najlepszym przypadku rodzaju bańki, ile kroków to będzie trwało?
1, słyszałem.
>> SPEAKER 1: n.
>> DAVID J. MALAN: n, słyszałem.
>> SPEAKER 1: 2.
>> DAVID J. MALAN: 2, słyszałem.
Czy słyszę 3?
Dobrze.
Tak słyszałem 1, n, 2, ale niech odebrać Oprócz co najmniej pierwszy z tych
sugestie, 1.
To nie jest zły instynkt jest, bo to rodzaj następujący wzór tutaj.
Ale jeśli to tylko 1 krok, jak w świat mógł I twierdzą, że lista
jest posortowana, bo jeśli mam tylko dozwolone wziąć 1 krok, ile elementów
faktycznie mogłem sprawdzić, aby mieć pewność?
Cóż, po prostu 1, co oznacza, że ​​jest n minus 1 elementy, które mogą być z
celu, a ja po prostu się na wierze, po patrząc na 1 element, który
rzeczą jest posortowana.
Więc 1 nie poprawić tutaj.
Tak minimalnie, jak wiele mam patrzeć?
>> [Wstawienie GŁOSÓW]
>> DAVID J. MALAN: n minus 1, a tak naprawdę, n, bo trzeba spojrzeć na każdy
Element, aby upewnić się, że to nie jest w porządku.
Ale znowu, będziemy sortować fali naszej ręce w mniejszych liczbach i
Zakładamy, że w n dostaje duże, że są nieciekawe tak.
Więc to sortowanie bąbelkowe.
A teraz zróbmy tych dwóch ostatnich.
Sort Selection, a następnie my będziemy zrobić coś w rodzaju wstawiania.
A potem będziemy cios umysły o coś znacznie
lepiej wszystkie z nich.
Dobrze.
>> Jaki jest najgorszy przypadek działa Czas rodzaju selekcji?
>> GŁOŚNIK 4: n do kwadratu.
>> DAVID J. MALAN: n plac, słyszę.
Ale dlaczego n do kwadratu, intuicyjnie?
>> GŁOŚNIK 4: Bo po prostu to zrobił.
>> DAVID J. MALAN: Bo po prostu to zrobił.
OK.
Dobra odpowiedź.
Ale intuicyjnie, dlaczego wybór sort n do kwadratu?
Czego mamy do czynienia znowu i znowu?
Musieliśmy przeglądając, są Ci najmniejszy, jesteś
Najmniejszy, jesteś najmniejsze.
I przyznaje, że byliśmy w stanie podjąć n kroki, a następnie n minus 1, to n minus 2.
Ale jeśli rodzaj dodać te wszystkie góry, lub zgłosić się na wierze, że dodałem
im się z góry, mamy mniej więcej n do kwadratu minus niektórych mniejszych ilościach.
Więc mam zamiar zadzwonić to n do kwadratu.
Ale z rodzaju wyboru w najlepsze Sprawa, ile kroków jest
zabierze mnie?
>> Głośnik 5: [niesłyszalne]
>> DAVID J. MALAN: To niestety nadal n do kwadratu, tak?
Bo jeśli mam wybór najmniejsza elementem, a mieliśmy siedem osób tutaj,
Wiem tylko, gdy dostanę się do bardzo end, które znalazłem najmniejszy
liczba, gdzie on lub ona może być.
Ale jak znajdę następne najmniejsza liczba?
Muszę zrobić kolejną przepustkę.
Tak więc, w najlepszym przypadku, co jest Wejście do rodzaju selekcji?
Jest już lista rodzaj, numer jeden, numer dwa, numer trzy, numer cztery.
Ale jestem komputer.
Mogę tylko patrzeć na jednego rzeczy naraz.
I nie można sortować z krok powrotem jak człowieka i powiedzieć,
ooh, to wygląda poprawnie.
>> Mogę jedynie orzekać poprawności w rodzaj selekcji, wybierając
najmniejsza liczba.
Ale nawet jeśli znajdę numer jeden pierwszy, jeśli nie wiem nic więcej na temat
inne numery, co nie, wszystko co wiem, że byłem przekazał tablicę
lub zestaw drzwi, za którymi są numery, jedynym sposobem wiem, że jeden
był najmniejszy?
Jeśli dostanę się aż tutaj, i uświadomić sobie, cholera, jeden był naprawdę najmniejszy.
>> Ale jak mam to określić, że dwa to następna najmniejsza?
Robiąc to samo nieskuteczność znowu i znowu.
Więc w końcu, z rodzaju wstawiania sposób, w najgorszym przypadku,
nie możemy powiedzieć, że to działa?
To też jest n do kwadratu.
A co w najlepszym wypadku?
Zostawimy to jako cliffhanger.
Będziemy wypełnić tego pustego czasu następnego, ale pozwól mi najpierw Proponuję
zasadniczo lepiej niż wszystkie z nich, prawda?
>> Więc zastanów się sam co wstawiania sort będzie.
Dobrze, że nie było bardzo dramatyczne, bo ja jestem tylko jedna
że widział zmiany.
Wow.
OK.
Więc tutaj mamy nieco inna demonstracja.
Gdybym przybliżyć tutaj, zobaczysz, że na lewej mamy coś w rodzaju bańki, w
middle mamy rodzaj selekcji, a na prawej, mamy coś, czego
nie wyglądał na jeszcze nazywa połączyć rodzaju.
Ale za co byliśmy tu robisz tak daleko dziś.
Gdy Jennifer pierwszy wszedł na scenę, poszliśmy przez tablicę liczb
znowu, i znowu, z liniowym wyszukiwania i dostaliśmy czas pracy liniowej, big O
n, że tak powiem.
>> Kiedy teraz rozważyć pierwszy tydzień class, gdy mieliśmy dziel i rządź,
i my książka telefoniczna łzawienie, i Jennifer, a my wspólnie
wykorzystała ten klucz insight, który miał powtarzać się w kółko przez
jakoś wyrzucać, wyrzucać, wyrzucać, pół problemu, lub
Ogólnie, dzielenie problem w połowie, a następnie leczeniu mniejszy kawałek
Problem jak koncepcyjnie równoważny z drugiej strony, że w jakiś sposób nie
zasadniczo lepiej.
Ale z rodzaju bańki, z wyboru sort, z rodzaju wstawiania, mamy może
ma takie spostrzeżenia, że ​​Jennifer nie.
Mamy dość dużo właśnie wrócił i dalej cała masa czasu, a my
Podrasowane rzeczy trochę, zamiana W tym celu, może być
wstawiania lub wybierania.
A na koniec dnia, i tak dużo z niezręcznej chodzenia w tę iz powrotem.
My nie naprawdę coś wykorzystać mądry jak Jennifer lubił podzielenie
i podboju.
>> Tak połączyć rodzaju kontrastu, które nie zobaczy dopiero w przyszłym tygodniu, to będzie
wykorzystać ten klucz pomysł, dzieląc wejściowego, a następnie zmniejszenie o połowę, a następnie
zmniejszenie o połowę, a następnie połowę.
I na każdej iteracji tej pętli sortowania lewą połowę, a prawo
połowę, a następnie w lewej połowie lewej połowie, i prawa połowa w lewo, a następnie
Lewa połowa prawej połowie, a Prawa połowa prawej połowie.
I powtarzając raz po raz.
>> Więc widzisz to wizualnie, ale to jest to, co nas czeka w przyszłym tygodniu.
A w ogóle, kiedy myślimy trochę nieco trudniej na takiego problemu.
Mamy n kwadrat na lewo, n kwadrat w środku, a n
zaloguj n po prawej stronie.
Więc nie jest twoje prawdziwe cliffhanger.
Do zobaczenia w poniedziałek.
>> [APPLAUSE]