>> [Přehrávání hudby]
>> ANDI PENG: Vítejte na týden 3 oddílu.
Díky, kluci, pro všechny přicházející do tohoto dřívějšího startu čas dnes.
Máme pěkný, malý intimní skupina dnes.
Takže doufejme, že se dostaneme povrch, možná brzy,
trochu brzo dnes.
Tak rychle, jen některé Oznámení pro pořadu dnešního dne.
Než začneme, my jsme bude prostě jít přes
několik krátkých logistické problémy, pset Otázky, Rozprava, takové věci.
A pak budeme ponor přímo.
Budeme používat debugger s názvem GDB na začít odhalovat náš kód, který David
vysvětleno v přednášce na druhý den.
Půjdeme přes čtyři typy druhů.
Půjdeme přes ně docela rychle protože jsou to docela náročné.
Ale vím, že všechny snímky a Zdrojový kód je vždy on-line.
Tak neváhejte, ve Vašem pročtení, aby vrátit a podívat se na to.
>> Projdeme asymptotické notace, který
je jen ozdobný způsob, jak říkat "runtime"
kde máme velký O, který David je vysvětleno v přednášce.
A máme i Omega, který je dolní mez runtime.
A budeme mluvit trochu víc do hloubky o tom, jak tyto práce.
A konečně, půjdeme přes binární vyhledávání, protože mnoho z vás, kteří již
Podíval se na své psets pravděpodobně víte, že to je otázka, která je ve vaší pset.
Takže budete všichni rádi že budeme povídat to dnes.
>> A konečně, podle vašich oddíl zpětná vazba, jsem vlastně
odešel asi 15 minut při konec prostě jít přes
logistika pset3, nějaké otázky, možná trochu poradenství, chcete-li,
Než začneme programování.
Takže pojďme se pokusit se dostat přes materiál docela rychle.
A pak můžeme strávit nějaký čas přičemž další otázky pro pset.
DOBŘE.
>> Rychle, takže jen pár oznámení Než začneme dnes.
Za prvé, vítejte k tomu, to prostřednictvím dvou svých psets.
Jsem se podívat na your-- jo, pojďme získat potlesk pro tento jeden.
Vlastně, byl jsem opravdu, opravdu ohromen.
Tříděné jsem první pset pro vás Minulý týden a vy jste udělali neuvěřitelný.
>> Styl byl na místě kromě několika komentářů.
Ujistěte se, že jste vždy komentování váš kód.
Ale vaše psets byli na místě.
A tak dál.
A to je dobré pro srovnávač na vidět, že kluci jsou uvedení
v jak hodně úsilí ve vašem stylu a váš návrh v kódu
že bychom chtěli pro vás vidět.
Takže jsem šel po mé vděčnosti pro zbytek TA.
>> Existují však Několik otázek Rozprava
Já jen chci jít přes to by se i můj život
a mnoho jiný TA "život trochu jednodušší.
Za prvé, jsem si všiml minulost week-- kolik z vás
Byly běží na check50 váš kód Před odesláním?
DOBŘE.
Takže každý by měl dělat check50, protože-- secret-- jsme vlastně
běžet check50 jako součást našeho správnosti skripty pro testování kódu.
Takže pokud váš kód selhává check50, se vší pravděpodobností,
to asi bude selhat naši kontrolu stejně.
Někdy vy mají správné odpovědi.
Stejně jako v chamtivý, některé máte správné číslo,
stačí vytisknout nějaké extra věci.
A to navíc věc skutečně selže šek,
protože počítač není Opravdu víte, co to hledá.
A tak to bude jen projít, vidět, že váš výstup není
odpovídat tomu, co očekáváme odpověď být, a označit je to špatně.
>> A já vím, že se stalo v některé z vašich případů tento týden.
Tak jsem se vrátil a ručně deklasován kód každého.
V budoucnu však, prosím, ujistěte se,
že utíkáš zkontrolovat 50 na vašem kódu.
Vzhledem k tomu, že je to tak trochu bolesti CK muset vrátit zpět a ručně přeřazení do jiné třídy
každý pset pro každého svobodný, malý minul instance.
Takže jsem neměl vzlétnout žádné body.
Myslím, že jsem si vzal volno možná jeden nebo dva pro design.
V budoucnu i když, pokud jste nedaří check50,
budou přijata body off správnost.
>> Kromě toho, jsou psets vzhledem pátek v poledne.
Myslím, že je to sedm minut pozdní doba odkladu, že jsme dát.
Per Harvard času, oni mají dovoleno bylo sedm minut pozdě na všechno.
Tak tady na Yale, budeme držet se, že stejně.
Ale docela hodně, na 12:07, pokud vaše pset není,
to bude označen jako pozdě.
A tak, když je označena jak pozdě, TA-- já jsem
Stále bude třídění vaše psets.
Takže budete stále vidět stupeň objevit.
Nicméně, vím, že se na konec semestru,
všechny pozdní psets bude jen automaticky vynulována počítačem.
>> Děláme to ze dvou důvodů.
Jednou, někdy dostaneme omluvila, jako výmluvy děkana
později, že nevím o dosud.
Tak jsme rádi, aby se ujistil, že jsme třídění vše jen v případě, stejně jako, že jsem
Chybí děkana výmluvu.
A za druhé, mějte na mysl, stále se můžete
odpojit jednoho pset že má plné šíři bodů.
A tak jsme rádi stupeň všechny vaše psets jen
aby se ujistil, že váš prostor je tam a vy je zkoušet.
Takže i když je to pozdě, budete stále získat úvěr na působnosti bodů, myslím.
>> Takže morální příběhu je, aby že vaše psets jsou v on-včas.
A pokud nejsou v on-včas, vím, že to není velký.
Jo, než jsem jít dál, nemá někdo mít Jakékoliv dotazy týkající pset zpětnou vazbu?
To jo.
>> Diváků: Věděli jste, že jsme mohou klesnout jeden z psets?
>> ANDI PENG: Jo.
Takže je tu devět psets celkově v průběhu semestru.
A pokud máte prostor points-- takže rozsah je jen,
docela hodně, jste pokusem o Problém, jste uvedení v čase,
se vám ukazují, že jste prokázal, že jste četl spec.
To je docela velký prostor.
A pokud jste se plní rozsah bodů, my
mohou klesnout nejnižší jedním z plného rozsahu.
Tak to je ve svůj prospěch, aby dokončit a zkusit každý pset.
>> I upload-- pokud žádný z je pracovat, je nahrát všechny.
A pak budeme snad moci aby vám některé z těchto bodů zpět.
Bezva.
Nějaké další otázky?
Skvělý.
>> Za druhé, kancelář hours-- pár rychlé poznámky o úředních hodinách.
Takže nejprve, přijde na začátku týdne.
Nikdo není nikdy v úřední hodiny na pondělí.
Christabel přišel úřední hodiny minulou noc.
Jo, Christabel.
A to, co jsme se v kanceláři hodiny v noci, Christabel?
>> Diváků: Měli jsme zmrzlinu.
>> ANDI PENG: Tak to je v pořádku, měli jsme zmrzlina v úředních hodinách minulou noc.
I když nemůžu slíbit, že budeme mít zmrzlinu na úřední hodiny
každý týden, co jsem vám slíbit, je to, že tam bude významně
lepší studentka poměr TA.
Stejně jako legitimní, je to jako tři ku jedné.
Vzhledem k tomu, že kontrast s Čtvrtek, máte asi 150
opravdu zdůraznil, děti a žádnou zmrzlinu.
A to prostě není produktivní pro nikoho.
Takže Ponaučení z příběhu je, přijde brzy na pracovní dobu a dobrých věcí
se stane.
>> Také, přijďte připraveni klást otázky.
Ty víš?
Bez ohledu na to, co TA, já myslím, říkali,
jsme se dostat pár studentů kteří přijdou na čtvrtek v, jako, 10:50
ne po přečtení spec bytí jako pomoz mi, pomoz mi.
Bohužel v tomto bodě, je tu není moc, co můžeme udělat, aby vám pomohl.
Tak přijďte na začátku týdne.
Přijďte brzy na úřední hodiny.
Přijďte připraveni klást otázky.
Ujistěte se, že vás, jako student, jsou místa, kde
musíte být tak, že TA může vás spolu,
což je to, co úřední hodiny by měly být přiděleny pro.
>> Za druhé, takže vím, že profesory rád, aby nás překvapil s testy.
Měl jsem profesora ty jako, yo, mimochodem,
pamatujte, že v polovině období Máte příští pondělí.
Jo, jsem nevěděl o tom střednědobém horizontu.
Takže já budu, že TA která vám připomíná, všichni, že kvíz
0-- protože, víte, že jsme CS.
Teď, když jsme udělali pole, dostanete proč je to kvíz 0, ne kvíz 1, eh?
DOBŘE.
Oh, dostal jsem nějaké smích na tomto jeden.
DOBŘE.
>> Takže kvíz 0 bude 14.října, pokud jste v sekci pondělí středa
15. října, pokud jste v sekce úterý čtvrtek.
To neplatí pro ti z vás na Harvardu
who-- Myslím, že budete všichni přičemž vaše kvízy na 14..
>> Tak jo, příští týden, pokud David, v přednášce, jde,
jo, tak o tom kvíz příští týden, vy všichni
nebude v šoku, protože jste přišli na části
a víte, že vaše kvíz 0 je za dva týdny.
A budeme mít kontrolu zasedání a všechno.
Takže žádné obavy o se bát za to.
Jakékoliv dotazy before-- dotazy ve všech otázkách týkajících se logistických,
třídění, úřední hodiny, profily?
To jo.
>> Diváků: Takže je kvíz bude v průběhu přednášky?
>> ANDI PENG: Jo.
Takže kvízu, myslím si, je 60 minut přidělené v tomto časovém úseku
že budete jen vzít v přednáškovém sále.
Takže nemusíte přijít o, stejně jako, náhodný 7:00 PM.
Je to všechno dobré.
To jo.
Bezva.
>> Dobře.
Takže budeme zavést koncept pro vás
tento týden, že David má již druh z dotkla v přednášce minulý týden.
Říká se tomu GDB.
A kolik z vás, zatímco v průběh psaní psets,
zaznamenali velké tlačítko, které říká, "Debug" v horní části vašeho IDE?
DOBŘE.
Takže teď budeme skutečně dostat odkrýt záhada, co tímto tlačítkem skutečně
dělá.
A já vám zaručit, je to krásná, krásná věc.
>> Takže až do teď, myslím, že tam bylo dvě věci
Studenti byli typicky dělá při ladění psets.
Jeden z nich, buď přidat printf () - tak každých pár řádků,
přidávají v printf () - ach, co je to proměnná?
Ach, jak je tato proměnná now-- a tak nějak vidět progresi
z kódu, jak to běží.
Nebo druhá metoda děti udělat, je že stačí napsat celou věc
a pak jít takhle na konci.
Doufejme, že to funguje.
Já vám zaručit, GDB je lepší než oba z těchto metod.
To jo.
Takže to bude váš nový nejlepší přítel.
Vzhledem k tomu, že je to krásná věc který vizuálně zobrazuje oba
co váš kód dělá v určitém bodě
stejně jako to, co všechny vaše proměnné jsou účetní,
jako to, co jejich hodnoty, v tomto konkrétním bodě.
A tímto způsobem, můžete si opravdu nastavit zarážky v kódu.
Můžete spustit přes řádek po řádku.
A GDB budou mít jen pro vy, zobrazí se pro vás,
co všechny vaše proměnné jsou, co dělají,
co se děje v kódu.
A takovým způsobem, že je to tak mnohem jednodušší vidět
co se děje, namísto printf-ing nebo psaní se vaše prohlášení.
>> Takže uděláme příklad později.
Takže to vypadá trochu abstraktní.
Žádné starosti, uděláme příklady.
A tak v podstatě, tři největší, nejpoužívanější funkce, které budete potřebovat v GDB
jsou další, překročit, a krok do tlačítek.
Jdu přes hlavu tam, ve skutečnosti, právě teď.
>> Takže můžete vidět, že kluci vše nebo bych měl přiblížit trochu?
V zadní, můžete vidět, že?
Mám přiblížit?
Jen trochu?
OK v pohodě.
Tam jedeme.
DOBŘE.
>> Tak jsem si, tady, moji implementace pro chamtivý.
A i když spousta z vás napsal chamtivý v while form-- že
je naprosto přijatelný způsob, jak dělat to-- jiný způsob, jak to udělat, je jednoduše
rozdělit v modulo.
Vzhledem k tomu, pak můžete mít svůj hodnota a pak mít své zbývající.
A pak stačí přidat to všechno dohromady.
Má logiku, co dělám zde smysl pro každého,
Než začneme?
Druh?
Bezva.
Skvělý.
Je to docela sexy kus kódu, řekl bych.
Jak jsem řekl, David, v přednáška, po chvíli,
všichni začnete vidět kód jako něco, co je krásné.
A někdy, když vidíte, krásná kód, je to tak nádherný pocit.
>> Takže se však, když tento kód je velmi krásné, že nefunguje správně.
Takže pojďme běžet check50 na toto téma.
Zkontrolujte, zda 50 20-- OOP.
2?
Je to pset2?
To jo.
Oh, pset1.
DOBŘE.
Tak jsme se spustit check50.
>> A jak vy můžete vidět zde, to nedaří několik případů.
A pro některé z vás, v Průběh dělá váš problém soupravy,
jste jako, ehm, proč je to tak nefunguje.
Proč to funguje pro některé hodnoty, ale ne pro ostatní?
No, GDB bude vám pomůže zjistit out, proč tyto vstupy byly nefunguje.
>> DOBŘE.
Tak uvidíme, jeden z Kontroly jsem byl neúspěšný v check50
byla vstupní hodnota 0,41.
Takže správná odpověď, že měli byste se dostat je 4.
Ale místo toho, co jsem vytištění je 3-n, což je nesprávný.
Takže pojďme stačí spustit tento ručně, jen Ujistěte se, že check50 funguje.
Udělejme ./greedy.
Jejda, musím udělat chamtivý.
Tam jedeme.
Nyní ./greedy.
>> Kolik je dluží?
Udělejme 0,41.
A jo, vidíme zde že je to výstup 3
když správná odpověď, ve skutečnosti by mělo být 4.
Takže pojďme vstoupit GDB a vidět, jak může jít o tom, kterým tento problém.
>> Takže první krok v Vždy ladění kódu
je nastavit zarážku, nebo bod, na který
Chcete v počítači nebo debugger začít uvažovat.
Takže pokud nemáte opravdu víte, co je tvůj problém,
Obvykle, typický, co chceme udělat, je nastavit náš zarážku na hlavní.
Takže pokud vy můžete vidět červené tlačítko přímo tam,
Jo, to jsem byl já nastavení breakpoint pro hlavní funkci.
I klikněte na to.
>> A pak můžu jít až na mého tlačítko Debug.
Trefil jsem ten knoflík.
Dovolte mi, abych zoom zpět, jestli můžu.
Tam jedeme.
Takže máme tady, panel na pravé straně.
Je mi líto, kluci v zádech, vy Nemůžete opravdu vidět opravdu dobře.
Ale v podstatě všechny toto právo panel dělá
je sledování jak zvýrazněné linie, což je řádek kódu
že počítač je v současné době běží, stejně jako všechny vaše proměnné
tady dole.
>> Takže jste dostali centů, mincí, n, všechny prohlášen různé věci
v tomto bodě.
Žádné starosti, protože jsme vlastně inicializuje je na všech proměnných dosud.
Takže ve vašem počítači, vaše Počítač je jen vidět,
oh, 32767 byl naposledy použitý funkce tohoto paměťového prostoru v mém počítači.
A tak to je, kde je v současné době centů.
Ale ne, že jakmile se spustit kód, by se měla stát inicializován.
>> Takže pojďme projít, řádek linka, co se tady děje.
DOBŘE.
Tak tady jsou tři Tlačítka, které jsem právě vysvětlil.
Máte Play, nebo funkce Run, tlačítko, budete mít krok nad tlačítkem,
a máte také krok do tlačítka.
A v podstatě, všichni tři je prostě jít přes váš kód
a dělat různé věci.
>> Takže obvykle, když jste ladění, Nechceme, aby prostě zmáčknout Play,
protože Play bude právě běží váš kód k jeho konci.
A pak nebudete ve skutečnosti víte, co je tvůj problém
je, pokud si nastavit více zarážky.
Pokud nastavíte více zarážky, to bude jen automaticky
spustit z jedné zarážky, na další, na další.
Ale v tomto případě máme jen, že jeden, protože my
Chcete pracovat naši cestu od shora dolů dolů.
Takže budeme ignorovat ten knoflík teď pro účely tohoto programu.
>> Takže Krok přes funkci jen Kroky nad každým jednu linku
a řekne vám, co počítač dělá.
Step do funkce pokračuje do skutečnou funkci
že je na vašem řádku kódu.
Tak například, stejně jako printf (), že je funkce, že jo?
Kdybych chtěl fyzicky krok do funkce printf (),
Já bych skutečně jít do kusu směrovací číslo, kde printf () byl napsán a vidět
co se tam děje.
>> Ale obvykle, budeme předpokládat, že kód, který dáme vám funguje.
Předpokládáme, printf () pracuje.
Předpokládáme, že GetInt () funguje.
Takže není třeba krok do těchto funkcí.
Ale jestli je tu funkce že píšete sami
že chcete zkontrolovat co se děje,
byste chtěli kroku do této funkce.
>> Takže teď jsme jen tak překročit tento kus kódu.
Takže pojďme se podívat.
Oh, print, "Ach hai, jak mnoho změn je dlužen? "
Nezajímá nás.
Víme, že to funguje, tak jsme krok nad ním.
>> Takže n, což je naše float, že máme initialized-- nebo declared--
up na vrcholu, jsme nyní rovnající se, že pro GetFloat ().
Takže pojďme krok přes to.
A vidíme u dno zde, program
nabádá mě na vstup hodnotu.
Takže pojďme Zadejte hodnotu chceme testovat zde, což je 0,41.
Skvělý.
>> Takže teď n- si kluci vidět tady, u bottom-- je to
stored-- protože my Zatím nejsou zaoblené, to je
uložené v tomto jako obří float, že je ,4099999996,
což je dost blízko, aby naše účely, právě teď, na 0,41.
A pak se uvidí později, když jsme pokračovat překročil programu,
po tu, n se stal zaoblené a centů stal 41.
Skvělý.
Takže víme, že naše zaokrouhlení má práci.
Víme, že máme správný počet centů,
takže víme, že je to není opravdu problém.
>> Takže budeme pokračovat krokování Na v tomto programu.
Jdeme sem.
A tak po tomto řádku kódu, my by měli vědět, kolik čtvrtiny máme.
Jsme překročit.
A vidíte my, ve skutečnosti, mít jeden čtvrtletí, protože jsme se odečte 25
z naší počáteční hodnoty 41.
A máme 16 doleva pro naše centů.
>> Má každý pochopit, jak Program je krokování
a proč centů je dnes 16 a proč, teď, mince se stala 1?
Je každý následující, že logika?
Bezva.
Tak, aby na tomto okamžiku pracovní program je, že jo?
Víme, že to dělá přesně to, to, co chceme, aby to.
A my ne ve skutečnosti muset vytisknout, ach, co
Je centů v tomto bodě, co je mincí v tomto bodě.
>> I nadále se prostřednictvím programu.
Překročit.
Bezva.
Jdeme přes desetníky.
Skvělý.
Vidíme, že je to vzít off 0,10 $ za desetník.
A teď máme dvě mince.
To je správně.
>> Jdeme přes haléře a vidíme, že jsme se dostali zbude centů.
Hmm, to je divné.
Tady nahoře na programu, měl jsem k odečíst své haléře.
Možná jsem prostě nebyl tím, že linka práva.
A běda, můžete vidět tady, protože víme,
že jsme posílení potrubím 32 a 33,
že je místo, kde náš program nesprávně měl proměnných spustit.
Takže můžeme dívat a vidět, oh, Jsem odečtením centů tady,
ale já nejsem ve skutečnosti přidat do mého hodnotou mince.
Jsem přidání do centů.
A já nechci přidat do centů, chci přidat do mincí.
Takže když jsme se změnit na mince, máme pracovní program.
Můžu běžet check50.
Stačí si jen opustíte GDB práva tady a spusťte check50 znovu.
Mohl bych to udělat.
Musím udělat chamtivý.
0.41.
A tady je to tisk out správnou odpověď.
>> Tak jako vy můžete vidět, GDB je opravdu mocný nástroj
protože když máme tolik kód děje, a tak mnoho proměnných
že je to pro nás těžké, jak člověk, sledovat.
Počítač, v GDB debugger, má schopnost
udržovat přehled o všem.
Já vím, v Visionaire, vy pravděpodobně mohl zasáhnout některé segmentace chyby
protože jste používali mimo hranice svého pole.
V příkladu Caesara, to je přesně to, co jsem zde provedena.
>> Tak jsem zapomněl zkontrolovat co by se mohlo stát, kdyby mi
neměl dva argumenty příkazového řádku.
Jen jsem to dát do této kontroly.
A tak, když jsem běžet Debug-- nastavím můj bod přerušení tam doprava.
Běžím ladění.
>> DOBŘE.
To jo.
Takže vlastně, GDB měl se mi tam řekl,
Byla to chyba, tam segmentace.
Já nevím, co se děje právě tam, ale když jsem běžel,
že to funguje.
Při spuštění řádků kódu a přes GDB mohl jen náhle skončit na vás,
jít nahoru a podívat se, co je červená chyba je.
To vám řeknu, Hej, měl poruchu segmentaci,
což znamená, že jste se pokusili o přístup prostory v poli, které neexistuje.
To jo.
>> Takže další problém Nastavte tento týden, vy
bude pravděpodobně mít hodně Proměnné plovoucí kolem.
Vy nebudete být jisti, co všichni na mysli v určitém okamžiku.
Takže GDB vám opravdu pomůže v přemýšlením co oni jsou všichni rovná
a jsou schopni vidět, že vizuálně.
Je někdo zmatený o tom, jak něco z toho pracuje?
Bezva.
Dobře.
Takže po tom, my jsme bude potápět doprava
do jsou čtyři různé typy druhů pro tento týden.
Jak mnozí z vás, nejprve ze všeho, než začneme,
Přečetl celý spec pro pset3?
DOBŘE.
Jsem hrdý na vás kluci.
To je jako polovina třídy, která je výrazně více než minule.
>> Tak to je skvělé, protože když mluvíme o obsahu
v lecture-- nebo líto, v section-- se mi líbí
týkat hodně který zpět na to, co je pset
a jak chcete implementovat, že ve vašem pset.
Takže pokud přijdete s číst spec, to bude
bylo mnohem snazší pro vás pochopit co mluvím, když říkám,
oh hej, mohlo by to být opravdu dobré místo k provedení tohoto druhu.
Takže ti z vás, kteří si přečíst spec vědí, že, jako součást vašeho pset,
budete muset napsat typ druhu.
Takže to může být velmi užitečné pro mnoho z vás dnes.
>> Takže budeme začít s, v podstatě, nejvíce jednoduchý typ
Sort, výběr třídění.
Typický algoritmus pro jak bychom jít o to
je-- David prošel to vše v přednáška, tak jsem si rychle pohybovat podél
here-- je v podstatě, vy mají celou řadu hodnot.
A pak najdete podrobnosti Nejmenší hodnota netříděný
a zaměňovat tuto hodnotu s První netříděný hodnota.
A pak si jen stále opakovat se zbytkem vašeho seznamu.
>> A tady je vizuální vysvětlení o tom, jak to by mohlo fungovat.
Tak například, když jsme byli na začátek s řadou pěti elementů, index
0 až 4, s 3, 5, 2, 6, a 4 Hodnoty umístěny v array-- tak právě teď,
my jen tak předpokládat, že jsou všichni netříděný
proto, že nebyly testovány jinak.
>> Tak, jak se výběr druhu by Práce je to, že by jako první
projít celek z netříděného pole.
To by vybrat nejmenší hodnotu.
V tomto případě, 3, pravá Nyní, je nejmenší.
To dostane až 5.
Ne, 5 není větší than-- nebo líto, není menší than-- 3.
Takže minimální hodnota je stále 3.
A pak se dostanete na 2.
Počítač vidí, oh, 2 je menší než 3.
2 nyní musí být minimální hodnota.
A tak 2 swapy s tímto prvním hodnotou.
>> Takže po jednom průchodu, můžeme skutečně vidět že 2 a 3 jsou prohozeny.
A my jsme jen tak v tom pokračovat To opět se zbytkem pole.
Takže budeme jen projít poslední čtyři indexy pole.
Uvidíme, že 3 je další minimální hodnota.
Takže jdeme na swap, který se 4.
A pak jsme to jen tak, aby běh přes dokud ne, nakonec, vy
dostat se do tříděného pole, v němž 2, 3, 4, 5, a 6 jsou všechny seřazeny.
Rozumějí logiku o tom, jak výběr třídění funguje?
>> Prostě mít nějaký na minimální hodnotu.
Jste sledování, co to je.
A když ji najdete, je zaměňovat s první hodnotou v array--
nebo, není první value-- další hodnota v matici.
Bezva.
>> Takže jak kluci druh Viděl z krátké zahlédl,
jdeme pseudocode to.
Takže pokud vy vzadu chtějí tvoří skupinu, všichni u stolu
mohou tvořit trochu partnera, jdu dát se vám bude líbit tři minuty
jen probrat logika, v angličtině,
o tom, jak bychom mohli být schopni implementovat pseudokód napsat výběrem Třídit.
A je tu bonbón.
Prosím, přijít a dostat bonbóny.
Pokud jste do zad a chcete cukroví, můžu hodit cukroví na vás.
Ve skutečnosti, dělat vás-- chladu.
Promiň.
DOBŘE.
>> Takže pokud bychom chtěli, as třída, zápis pseudokód
na to, jak by se dalo přistupovat tento problém, stačí klidně.
Budu prostě jít kolem a, v pořádku, zeptejte se skupiny
na další řádek Co bychom měli dělat.
Takže pokud vy chcete začít off, co je první věc,
dělat, když se snažíte provádět způsob, jak vyřešit tento program
selektivně seřadit seznam?
Pojďme jen předpokládat, my mají celou řadu, v pořádku?
>> Diváků: Chcete vytvořit některé druh [neslyšitelný], že jste
běh přes celé tvé pole.
>> ANDI PENG: Správně.
Takže budete chtít opakovat přes všechny prostoru, je to tak?
Tak dobré.
Chtějí-li si kluci mi dát další line-- jo, do zad.
>> Publikum: Podívejte se na ně vše pro nejmenší.
>> ANDI PENG: Jdeme na to.
Takže chceme projít a zkontrolovat, vidět, co je minimální hodnota, že jo?
Chystám se zkrátit, že na "min."
Co vy chcete dělat po jste našli minimální hodnotu?
>> Diváků: [Neslyšitelné]
ANDI PENG: Takže vy budete chtít spínač je s prvním z tohoto pole,
v pořádku?
To je začátek, budu říkat.
Dobře.
Takže teď, že jste vyměnili první člověk, co chcete dělat po tom?
Takže teď víme, že tohle tady musí být nejmenší hodnota, je to tak?
Pak budete mít další odpočinek matice, která je netříděný.
Takže to, co chcete dělat tady, pokud máte kluci chtějí, aby mi další řádek?
Diváků: Takže chcete iteraci po zbytek pole.
ANDI PENG: Jo.
A tak to, co dělá iterace druh znamenat pravděpodobně budeme potřebovat?
Jaký typ of--
>> Publikum: Oh, další proměnná?
ANDI PENG: Pravděpodobně další pro smyčce, je to tak?
Takže jsme pravděpodobně bude chtít přecházet through-- skvěle.
A pak jste se vrátit a Pravděpodobně zkontrolovat minimální znovu,
v pořádku?
A ty budeš stále opakovat to, protože smyček jen tak
zachovat systémem, ne?
>> Tak jako vy můžete vidět, my Jen mají obecnou pseudocode
o tom, jak chceme, aby tento program vypadat.
Tento iterate tady, co máme typicky muset napsat do našeho kódu
chceme-li iterovat prostřednictvím pole, jaký typ konstrukce?
Myslím si, že Christabel již řekl dříve.
>> Diváků: A pro smyčce.
>> ANDI PENG: A pro smyčce?
Přesně tak.
Takže je to pravděpodobně Bude to pro smyčku.
Co je to šek tady bude znamenat?
Obvykle, pokud chcete zkontrolovat jestliže něco je něco else--
>> Diváků: Pokud.
>> ANDI PENG: if, že jo?
A pak odkládací tady, budeme projít později, protože David
prošel, že v přednášce stejně.
A pak druhá iterate implies--
>> Diváků: Dalším pro smyčce.
>> ANDI PENG: --another pro smyčce, přesně tak.
Takže pokud se díváme na to správně,
je vidět, že jsme pravděpodobně bude potřebovat vnořené pro smyčce
s podmíněného příkazu v tu a pak skutečný kus kódu, který je
chystá vyměnit hodnot.
Tak jsem právě obecně psaný kód zde pseudokód.
A pak jsme to vlastně bude fyzicky, jako třída,
pokusit se realizovat to dnes.
Vraťme se do tohoto IDE.
>> Uh-oh.
Proč je to ne-- je to tak.
DOBŘE.
Omlouváme se, ale dovolte mi, abych se snaží přiblížit trochu víc.
Tam jedeme.
Všechno, co dělám tady je, které jsem vytvořil program s názvem "výběr / sort.c."
Jsem vytvořil řadu devíti hodnoty, 4, 8, 2, 1, 6, 9, 7, 5, 3.
V současné době, jak můžete vidět, že jsou neuspořádané.
n bude číslo, které vám řekne množství hodnot
máte v poli.
V tomto případě jsme mají devět hodnoty.
A já jsem právě dostal na smyčku zde že vytiskne netříděného pole.
>> A na závěr, jsem se také dostal na smyčky, že právě tiskne to znovu.
Takže teoreticky, je-li tento program pracuje správně, na konci,
měli byste vidět tištěný pro smyčce , ve kterém 1, 2, 3, 4, 5, 6, 7, 8,
9 jsou správně, aby.
>> Takže máme naši pseudocode zde.
Má někdo chtěl to-- jsem jen jít požádat o volunteers--
řekni mi přesně, co mám psát, pokud Chceme-li, jako první, jen opakovat
prostřednictvím začátku tohoto pole?
Jaký je řádek kódu, že jsem pravděpodobně bude potřebovat tady?
>> Diváků: [Neslyšitelné]
>> ANDI PENG: Jo, pocit zdarma to-- Je nám líto,
Nemusíte se stát up-- pocit zatím zvýšit váš hlas trochu.
>> Obecenstvo: pro int i rovná 0--
>> ANDI PENG: Jo, dobrý.
>> Diváků: i je menší než délka pole.
>> ANDI PENG: Takže mějte na mysl tady, protože jsme
nemají funkci, která us říká, že délka pole,
už máme hodnota, která ukládá, že.
Je to tak?
Další věc, kterou mějte v mind-- v poli
devíti hodnot, jaké jsou indexy?
Řekněme, že to pole bylo 0 až 3.
Vidíte, že poslední index je ve skutečnosti 3.
Není to 4, i když tam je čtyři hodnoty v poli.
>> Takže tady, musíme být velmi opatrní na to, co naše podmínky pro délku
bude.
>> Diváků: Nebylo by to n mínus 1?
ANDI PENG: Jde to n minus 1, přesně tak.
Dává to smysl, proč to je n minus 1, všichni?
Je to proto, že pole jsou nula-indexovány.
Začnou na 0 a provozovat až n minus 1.
Jo, je to trochu složitější.
DOBŘE.
A pak--
Publikum: Isnt'1 že již postaráno i když,
pouhým neříká "menší než nebo rovno "a jen řekl:" méně než? "
>> ANDI PENG: To je opravdu dobrá otázka.
Ano, ano.
Ale také způsob, jakým jsme provádění kontroly právo,
je třeba porovnat dvě hodnoty.
Takže jste vlastně chcete nechte "na" prázdný.
Vzhledem k tomu, pokud si porovnat tohle, vy nebudete
nic po něm porovnat, že jo?
To jo.
Takže i ++.
Pojďme přidat naše držáky.
Jejda.
Skvělý.
Takže máme začátek naší vnější smyčky.
Takže teď pravděpodobně chtít vytvořit proměnnou pro vedení
Trať nejmenší hodnotu, je to tak?
Má někdo chtěl mi dát řádek kódu, který by to dělal?
Co budeme potřebovat, pokud jdeme chtít uložit něco?
>> Správně.
Možná, že lepší název pro to by be-- "temp" zcela works--
možná více příhodně pojmenovaný by bylo, pokud chceme, aby nejmenší value--
>> Diváků: Min.
ANDI PENG: min, tam jdeme.
min by bylo dobré.
A tak tady to, co my Chcete inicializovat ji?
To je trochu složitější.
Protože právě teď u začátek tohoto pole,
jste se podíval na cokoliv, že jo?
Tak co, automaticky, pokud jsme jen na i rovná 0,
to, co chceme inicializovat naše první minimální hodnota to?
Diváků: i.
ANDI PENG: i, přesně tak.
Christabel, proč chceme, inicializovat to i?
>> Publikum: Vzhledem k tomu, no, začínáme s 0.
Takže, protože máme s čím srovnávat to je minimální skončí na 0.
>> ANDI PENG: Přesně tak.
Takže ona je přesně to pravé.
Protože máme vlastně přesto se podíval na cokoliv,
nevíme, co naše minimální hodnota je.
Chceme jen inicializovat ji i, která v současné době, je tady.
A jak budeme pokračovat přesunout dolů toto pole,
uvidíme, že s každým Další průchod, i zvýší.
A tak se v tomto bodě, i se pravděpodobně bude
že chtějí být minimální, protože to bude cokoliv
je začátek netříděného pole.
Bezva.
>> Takže teď chcete přidat smyčky for tady to je
bude iterovat netříděný, nebo zbytek tohoto pole.
Má někdo chtěl mi dát řádek kódu, který by to dělal?
Hint-- co potřebujeme tady dole?
Co se děje jít to pro smyčce?
To jo.
Diváků: Tak jsme chtěli mají jiný celé číslo,
proto, že jsme běží přes zbytek matice namísto I, možná
j.
>> ANDI PENG: Jo, j zní dobře.
Rovná?
>> Diváků: Takže by bylo i plus 1, protože začínáte na další hodnotu.
A pak se to znovu end--, j je méně než n mínus 1 a poté j ++.
ANDI PENG: Skvělé.
>> A pak tady, budeme chtít zkontrolovat, zda je splněna podmínka naše,
v pořádku?
Vzhledem k tomu, že chcete změnit minimální hodnotu
pokud je to ve skutečnosti menší, než to, co jste přirovnal ji k, ne?
Takže to, co budeme chtít v tu?
Zkontrolujte.
Jaký typ prohlášení jsme pravděpodobně bude
ti chcete použít, kdybychom chcete zkontrolovat něco?
>> Diváků: if.
>> ANDI PENG: if.
Tak if-- a co to bude podmínka, že chceme dovnitř
naší if?
>> AUDIENCE: V případě, že hodnota j je menší než hodnota já-
>> ANDI PENG: Přesně tak.
Tak if-- tak toto pole se nazývá "pole."
Skvělý.
Takže pokud array-- co to bylo?
Zopakuj to.
>> Diváků: Pokud je pole-j je menší než array-i, pak bychom změnit min.
Takže min by j.
>> ANDI PENG: Dává to smysl?
DOBŘE.
A teď tady dole, jsme vlastně chtějí realizovat swap, že jo?
Takže vzpomínáte, v přednášce, že David, když se snažil vyměnit the-- to, co bylo
to-- pomerančový džus a milk--
>> Diváků: To bylo hrubé.
>> ANDI PENG: Jo, to bylo docela hrubý.
Ale byl to docela dobrý koncept demonstrovat čas.
Takže myslíte, že z vašich hodnot zde.
Máte pole min, řada i,
nebo co jsme se pokoušeli vyměnit zde.
A ty asi nelze nalít je do navzájem ve stejnou dobu, že?
Tak co s tím budeme muset vytvořit zde
aby správně vyměnit hodnoty?
>> Diváků: dočasné proměnné.
>> ANDI PENG: dočasné proměnné.
Takže pojďme dělat int temp.
Vidíš, to bude lepší čas to-- hej, co to bylo?
DOBŘE.
Takže by to bylo lepší čas pojmenovat proměnnou "Temp."
Takže pojďme dělat int temp.
Co budeme SET TEMP rovnou tady?
Publikum: Min?
ANDI PENG: Je to trochu složitější.
Ve skutečnosti nezáleží na tom, do konce roku.
Nezáleží na tom, co Pořadí se rozhodnete vyměnit v
tak dlouho, jak budete dělat jistý, že jste sledování, co jste swapování.
>> Diváků: Mohlo by to být array-i.
>> ANDI PENG: Jo, pojďme dělat pole-I.
A co pak je další řádek kódu chceme mít tady?
Diváků: array-i rovná array-J.
ANDI PENG: A konečně?
Diváků: array-j se rovná array-i.
Diváků: Nebo array-j rovná array-temp-- nebo teplota.
>> ANDI PENG: OK.
Takže pojďme běžet to a uvidíme, jestli to bude fungovat.
Tam, kde se děje, že?
Oh, to je problém.
Viz, na lince 40, my jsme se snaží používat pole-J?
Ale kde j existují pouze v?
>> Publikum: V cyklu for.
ANDI PENG: Správně.
Tak co s tím budeme muset udělat?
>> Diváků: Definovat to venku the--
Publikum: Jo, myslím, že máš použít jiný if, že jo?
Tak, jako v případě, že minimum-- v pořádku, nechte mě přemýšlet.
>> ANDI peng: Kluci, zkuste se podívat Pojďme
viz, co se něco, co můžeme dělat?
>> Diváků: OK.
Takže v případě, že minimální nerovná j-- takže v případě, že minimum je stále já--
pak bychom nemuseli vyměnit.
>> ANDI PENG: Znamená to, že rovné i?
Co chceš říct tady?
>> Publikum: Nebo jo, v případě, že Minimální není rovno i, jo.
ANDI PENG: OK.
No, to řeší, druh, naše problémy.
Ale to stále ještě neřeší problém z toho, co se stane, když j-- od j
neexistuje mimo něj, co si chceme s tím dělat?
Deklarovat to venku?
Pojďme zkusit spustit tento.
Uh-oh.
Náš druh nefunguje.
>> Jak vidíte, naše původní array měl tyto hodnoty.
A potom by měl mít byl v 1, 2, 3, 4, 5, 6, 7, 8, 9.
Nefunguje to.
Ahh.
Co děláme?
Diváků: Debug.
ANDI PENG: Dobře, můžeme to zkusit.
Můžeme ladit.
Oddálení trochu.
Vydejme naši zarážku.
Pojďme jako-- OK.
>> Takže proto, že už víme, že tyto řádky, 15 až 22,
jsou working-- protože všechno, co dělám, je Jen iterace a printing--
Můžu jít dopředu a vynechat to.
Začněme na řádku 25.
OOP, dovolte mi, abych se zbavit toho.
>> Diváků: Takže je zarážka kde začíná ladění?
ANDI PENG: Or zastaví.
Diváků: Or zastaví.
ANDI PENG: Jo.
Můžete nastavit více zarážky a to může jen skočit z jednoho na druhého.
Ale v tomto případě nevíme, kde je tato chyba děje.
Tak jsme se jen chcete začít od shora dolů.
Jo.
DOBŘE.
>> Takže tato linka tady, můžeme zasáhnout.
Můžete vidět tady dole, máme pole.
To jsou hodnoty které jsou v poli.
Vidíte, že, jak se index 0, to odpovídá value-- oh,
Budu se snažit přiblížit.
Omlouváme se, ale je to opravdu těžké na see-- na indexu pole 0,
máme hodnotu 4 a pak tak dále a tak dále.
Máme lokální proměnné.
Právě teď jsem se rovná 0, což chceme, aby to bylo.
>> A tak se pojďme držet krokování.
Naše minimum je rovno 0, což také chceme, aby to bylo.
A pak jsme se vstoupit na náš druhý pro smyčky, pokud array-j je menší než pole-i,
což nebylo.
Takže jste vidět, jak že přeskočil, že?
>> Diváků: Takže pokud by v případě, minimum, vše that-- ne že by to
být uvnitř prvního cyklu for?
ANDI PENG: Ne, protože si přesto chcete testovat.
Chcete udělat srovnání každý čas, dokonce i po spuštění přes to.
Nemusíte jen chci, aby to na první promítání.
Chcete-li to s každý další zase průchod.
Takže vy chcete zkontrolovat Váš zdravotní stav uvnitř.
Takže jsme jen tak udržují v provozu tudy.
Dám vám kluci nápovědu.
To má co do činění s tím, že při máte kontrolu svůj podmíněný,
nejste kontrolu pro správné indexu.
Takže teď jste kontrola index pole j je menší než pole
index i.
Ale to, co děláš se na počátku pro smyčky?
Nejsi nastavení j rovnající se i?
>> Jo, takže můžeme vlastně ukončete ladicí zde.
Takže pojďme se podívat na naši pseudokódu.
For-- jdeme začátek i rovná 0.
Chystáme se jít až na n minus 1.
Pojďme zjistit, jsme mít toto právo?
Jo, že měl pravdu.
>> Takže tady uvnitř, my jsme bude vytvořit minimální hodnotu
a nastavit, aby se rovná i.
Věděli jsme to udělat?
Jo, to udělal.
Nyní v našem vnitřním pro smyčce, my jsme dělat j rovná i na n minus 1.
Věděli jsme to udělat?
Skutečně, my jsme dělali to.
>> Tak Avšak to, co jsme porovnávání tady?
>> Diváků: j plus 1.
ANDI PENG: Přesně tak.
A pak budete chtít nastavit vaše minimální rovná j plus 1 i.
Tak jsem šel přes to opravdu rychle.
Myslíte si kluci pochopili proč je to j plus 1?
DOBŘE.
>> Takže ve vašem poli, v vaše první průchod,
Váš pro smyčce, pro int i = 0, ať to prostě
Předpokládám, že to ještě nebyl změněn.
Máme řadu, zcela, jen čtyři netříděné prvky, ne?
Takže chceme inicializovat i rovná 0.
A já se chystá právě projít této smyčky.
A tak se v prvním průchodu, jdeme inicializovat proměnnou s názvem "min"
že také se rovná i, protože nemáme minimální hodnotu.
Tak, že je v současné době rovno 0 i.
A pak budeme projít.
A my chceme, aby se znovu opakovat.
Teď, když jsme našli to, co náš minimální je, chceme iterovat
znovu vidět, jestli je to srovnání, je to tak?
Tak j, tady, se děje na rovné i, což je 0.
A pak, pokud array j a i, který je ten, který je další nad, as méně
než to, co aktuální minimum je hodnota, které chcete vyměnit.
>> Takže řekněme, že máme má, stejně jako, 2, 5, 1, 8.
Právě teď, i je rovno 0 a j je rovno 0.
A to je náš minimální hodnota.
Pokud je pole-j a já-, takže v případě, že jednou to je po jednom díváme
je větší než ten před tím, to bude stát minimum.
>> Takže tady vidíme, že 5 není menší než to.
Takže to bude nebýt 5.
Vidíme, že 1 je menší než 2, ne?
Takže teď víme, že naše minimum je bude hodnota indexu při 0, 1, 2.
To jo?
A pak, když se dostanete sem, můžete vyměnit správné hodnoty.
>> Takže když vy jste byli jen mít j Než jste se nedívali na jednom
po něm.
Vy jste při pohledu na stejná hodnota, která
je důvod, proč to prostě nic nedělám.
Znamená to, že smysl pro každého, Proto jsme potřebovali, aby plus 1 tam?
DOBŘE.
Nyní stačí spustit přes něj, aby se Ujistěte se, že zbytek je kód správný.
Proč se děje, že?
Ach, to je min tady.
Byli jsme porovnání nesprávnou hodnotu.
Ale ne.
>> Ach jo, tady dole jsme byli vymění nesprávné hodnoty stejně.
Protože jsme se dívali na i a j.
To jsou ty, které jsme kontrolovali.
Vlastně chceme swap minimum, současná minimální,
s tím, co jeden venku je.
A jak vy můžete vidět dolů tady, máme seřazené pole.
Je to prostě musel udělat s skutečnost, že, když
jsme byli zaškrtnutím Hodnoty jsme porovnávání
jsme se nedívali na správných hodnotách.
Dívali jsme se na stejné jednom tady, ne ve skutečnosti ji vyměnit.
Musíte se podívat na ten příští k ní a pak můžete vyměnit.
Takže to je to, co bylo docela Před odposlouchávání náš kód.
A to, co tady udělal jsem všechno, co je ladicí program mohl udělat pro tebe
Jen jsem to udělal na deska, protože je to jednodušší,
vidět, spíše než se snažit přiblížíte debuggeru.
Znamená to, že smysl pro všechny?
Bezva.
>> Dobře.
Můžeme přejít k mluvit o asymptotické notace, který
je jen fantazie způsob, jak říkat runtimes všech těchto druhů.
Takže vím, Davida, v přednášce, dotkla runtime.
A šel přes celý vzorce o tom, jak vypočítat doby chodu.
Žádné obavy o tom.
Pokud jste opravdu zvědavý na, jak to funguje,
neváhejte se mnou mluvit po bodu.
Můžeme projít formule dohromady.
Ale vy všichni kluci mají opravdu vím, je, že n na druhou nad 2
je totéž jako n na druhou.
Vzhledem k tomu, největšího počtu, exponent, roste nejvíce.
A tak se pro naše účely, vše se staráme o
je to, že obří číslo, které roste.
>> Takže to, co je nejlepší případ runtime výběrového druhu?
Pokud se chystáte mít iterovat seznamem
a pak iterovat zbytek tohoto seznamu,
kolikrát jsou budete pravděpodobně,
v nejhorším case-- v nejlepším případě, sorry-- proběhnout?
Možná lepší otázka je se zeptat, co je nejhorší případ
runtime výběrového druhu.
Diváků: n na druhou.
ANDI PENG: Je to n na druhou, vpravo.
Tak snadný způsob, jak myslet, je to jako, kdykoliv budete mít dvou vnořených pro smyčky,
to bude n druhou.
Protože jsou nejen vám protéká opět,
musíte se vrátit kolem a skrz ní procházejí
opět dovnitř pro každou hodnotu.
Takže v tomto případě, vedete n časy n na druhou, což je-- líto,
n krát n, který se rovná n na druhou.
>> A druh je také trochu unikátní v tom smyslu
že nemá-li tyto nevadí hodnoty jsou již v pořádku.
Je to stále bude proběhnout tak jako tak.
Řekněme, že to bylo 1, 2, 3, 4.
Bez ohledu na to, zda to bylo v pořádek, to ještě by proběhl
a ještě zkontroloval minimální hodnotu.
To by dělali Stejný počet kontrol
pokaždé, i když je dělal ne vlastně se ničeho dotknout.
>> Takže v tomto případě, že nejlepší a nejhorší runtime jsou skutečně rovnocenné.
Takže očekávané runtime výběrového druhu,
které označujeme symbolem of theta, theta, v tomto případě,
by také bylo n druhou.
Všichni tři z nich by se n druhou.
Je každý jasné, proč runtime je n na druhou?
>> Dobře.
Takže já jsem prostě jít rychle spouštět přes zbytek druhů.
Algoritmus pro bublina sort-- pamatovat,
to byl první David přešel na přednášce.
V podstatě si krok celý seznam
a vy jste právě swap-- Porovnat dvě najednou.
A jestliže jeden je větší, než jste právě je vyměnit.
Takže pokud jsou větší, měli byste vyměnit.
Mám oficiální tady.
>> Takže řekněme, že jste měli 8, 6, 4, 2.
Vy byste porovnat 8 a 6.
Vy byste třeba je vyměnit.
Ty by se porovnávat 8 a 4.
Vy byste třeba je vyměnit.
Pokud musíte vyměnit 8 a je 2, změna je také.
Takže v tom smyslu, můžete vidět, odehrávající se po dlouhou dobu,
jak hodnoty druh bublinu konce, což je důvod, proč říkáme
bublinkové řazení.
>> Rádi bychom jen projít znovu náš druhý průchod, a naše třetí průchod,
a náš čtvrtém průchodu.
V podstatě, bublinkové řazení právě běží dokud neprovedete žádné další swapy.
Takže v tomto smyslu, je to jen obecný pseudokód pro něj.
Žádné starosti, to všechno bude on-line.
Nemusíme se vlastně jít přes tento.
>> Právě jsme inicializovat čítač proměnná, která začíná na 0 ° C.
A my iterovat celé pole.
A pokud jedna hodnota je--, pokud to hodnota je větší než tato hodnota,
budete se je vyměnit.
A pak jste jen bude pokračovat.
A budete počítat.
A vy jen tak, aby dělal to, když probíhá měření, je větší
než 0, což znamená, že pokaždé, budete muset vyměnit,
víte, že chcete jít zpět a znovu zkontrolujte.
Chcete zachovat kontrolu, dokud nebudete vědět že vy nemusíte vyměnit ještě.
>> Takže jaké jsou nejlepší a nejhorší pouzdro běhové moduly pro bubble druhu?
A hint-- je to vlastně liší od výběru druhu v tom smyslu,
že tyto dvě odpovědi nejsou stejné.
Přemýšlejte o tom, co by se stalo v případ, pokud to bylo již seřazeny.
A přemýšlet o tom, co by se stalo, kdyby to bylo
v případě, ve kterém nebyla seřazeny.
A můžete trochu spustit přes proč se to děje.
Dám ti kluci, jako, 30 sekund o tom přemýšlet.
>> DOBŘE.
Má někdo uhodnout, co je Nejhorší případ runtime bublinkové druhu je?
To jo.
>> Diváků: Bylo by to, jako, n krát n minus 1, nebo něco takového?
Stejně jako pokaždé, když běží, je to jen, jako, jeden méně odkládací
že to, co to bylo.
>> ANDI PENG: Jo, tak máš naprostou pravdu.
A to je případ, kdy vaše Odpověď byla ve skutečnosti mnohem složitější
než je ta, kterou je třeba dát.
Takže to bude run-- Jsem chystá vymazat všechno tady.
Jsou všichni dobře?
Mohu vymazat to?
DOBŘE.
Budete projít n Časy se poprvé, že?
A jdou projít n minus 1 podruhé, je to tak?
A pak budete mít děje, n Mine 2, a tak dále.
David to udělal v přednášce, kde, Pokud jste přidali všechny tyto hodnoty,
dostanete něco, co je jako-- yeah-- nad 2, který v podstatě jen snižuje
až n na druhou.
Budeš se dostat divný frakce tam.
A tak jen vím, že n na druhou vždy
má přednost před frakce.
A tak v tomto případě, nejhorší runtime by n druhou.
Pokud by to bylo v sestupném objednávka, myslet si,
muset udělat swap pokaždé.
>> Jaký by měl být, potenciálně, nejlepším případě runtime?
Řekněme, v případě, že seznam byl již v pořádku, co by runtime být?
>> Diváků: n.
ANDI PENG: Je to n, přesně tak.
A proč je to n?
Diváků: Protože jste právě muset zkontrolovat každý jednou.
ANDI PENG: Přesně tak.
Takže v tom nejlepším možném běhu, Pokud tento seznam byl již
sorted-- řekněme 1, 2, 3, 4-- vy by jen projít, měli byste zkontrolovat,
byste vidět, oh, všichni vyjít.
Nemusel jsem se vyměnit.
Jsem hotov.
Takže v tomto případě, je to jen n nebo počet kroků, které právě
musel zkontrolovat v prvním seznamu.
>> A poté, co jsme nyní hit insertion sort, kde
algoritmus je v podstatě rozdělit to do tříděného i netříděného část.
A pak jeden po druhém, netříděného hodnoty
vloženy do jejich vhodné pozice v začátku seznamu.
>> Tak například, máme Seznam 3, 5, 2, 6, 4 znovu.
Víme, že je to v současné době netříděný proto, že jsme prostě
začal na to dívat.
Jsme se podívat, a my víme, že První hodnota je tříděn, že jo?
Pokud jste jen při pohledu na řadu velikost jednoho, víte, že je to třídit.
>> Takže víme, že další čtyři jsou netříděný.
Procházíme a vidíme, že hodnoty.
Pojďme zpátky.
Vidíte tu hodnotu 5?
Podíváme se na to.
My porovnat ji s 3.
Víme, že to je větší než 3, takže víme, že to je třídit.
Takže víme, že první dva jsou řazeny a poslední tři nejsou.
>> Jsme se podívat na 2.
První jsme zkontrolovat s 5.
Je to méně než 5?
Není.
Takže musíme hledat dál dolů.
Pak můžete zkontrolovat 2 VYP 3.
Je to méně než?
Ne.
Takže víte, 2 musí být vložena Na přední a 3 a 5
oba mají být vytlačen.
Udělejte to opět s 6 a 4.
A my jsme prostě udržet kontrolu v podstatě, kde jsme jen zkontrolovat, zkontrolovat, zkontrolovat.
A dokud to je v právu postavení, jsme trochu prostě
vložte ji do správné polohy, což je místo, kde název pochází.
>> Tak to je jen algoritmus, pseudokód per se, druh,
o tom, jak bychom realizovat inzerce třídění.
Pseudokód je tady.
Je to všechno online.
Žádné starosti, jestli vy jste se snaží kopírovat to dolů.
Takže ještě jednou, co stejný question-- by bylo nejlepší a nejhorší runtime
vkládání druhu?
Je to velmi podobné na poslední otázku.
Dám ti kluci, jako, 30 sekund přemýšlet o tom stejně.
>> OK Má někdo chtěl dej mi nejhorší runtime?
To jo.
>> Diváků: n na druhou.
>> ANDI PENG: Je to n na druhou.
A proč je to n na druhou?
>> Publikum: Protože v obráceném pořadí, máte
projít n n časy, což je--
ANDI PENG: Jo, přesně tak.
Takže to samé jako v bublině druhu.
Pokud tento seznam je v sestupném pořadí, ty jsi
bude muset zkontrolovat první jednou.
A pak se s každým další hodnotu, že jste
muset podívat se na to proti každý hodnota, je to tak?
A tak úplně, budete dělat an časy n přihrávka další n pasu, který
n je na druhou.
A co nejlepším případě?
To jo.
>> Diváků: n minus 1, protože První z nich je již na druhou.
>> ANDI PENG: Tak blízko.
Odpověď je vlastně n.
Vzhledem k tomu, přičemž první z nich je řazeny, nemusí to actually--
jsme prostě kliku, v že příklad, že 2
se stalo, že je nejmenší číslo.
Ale to není tak být vždy.
V případě 2 se již seřazena na začátku ale vypadáš, a tam je 1 tady,
1 bude to rána.
A to skončí bytí naražený tak jako tak.
>> Takže v nejlepším případě, je to vlastně jen bude n.
Máte-li 1, 2, 3, 4, 5, 6, 7, 8, ty jsi
se projít že celý seznam jednou
zkontrolovat, zda je vše v pořádku.
Je každý jasno v chodu časy výběru stejně?
Já vím, že jsem procházel ty opravdu rychle.
Ale vím, že pokud víte, obecné koncepty, měli byste být dobře.
DOBŘE.
Tak jsem si jen dát kluci možná, stejně jako, minutu se poraďte se svým sousedům
o tom, co to jsou jen některé z hlavních rozdílů
mezi těmito typy druhů.
Půjdeme přes to brzy.
Publikum: Oh, OK.
ANDI PENG: Jo.
DOBŘE.
Cool, pojďme znovu sejdou jako třída.
DOBŘE.
Takže to bylo docela otevřená otázka v tom smyslu,
že je tu spousta odpovědí na ně.
A půjdeme přes některé z nich stručně.
Chtěl jsem, aby vám kluci přemýšlet o tom, co diferencované
všechny tři typy druhů.
A já jsem slyšel také, velký question-- co merge sort dělat?
Výborná otázka, protože to je to, co jsme pokrývat další.
>> Tak sloučit sort člověk druh, který funguje
velmi odlišně od ostatních druhů.
Jak vy můžete see-- David udělal, že demo
kde měl všechno v pohodě zvuky když vidí, jak sloučit
třídění běžel, jako, nekonečně rychleji, než ostatní dva typy?
DOBŘE.
Tak to je proto, že sloučení třídit implementuje, které rozdělují
a podmanit si představu, že jsme mluvil o hodně v přednášce.
V tom smyslu, že jsme chtěli pracovat chytřejší, ne těžší, když jste rozdělit
a podmanit si problémy, a rozdělují je dolů, a pak dát dohromady,
dobré věci se vždycky stane.
>> Tak tak, že sloučení sort v podstatě funguje
je, že se rozděluje netříděné pole na polovinu.
A pak to má dvě poloviny polí.
A to jen třídí tyto dvě poloviny.
Je to prostě pořád dělení na polovinu, v polovina, v polovině dokud vše je řazen
a pak rekurzivně dává to všechno dohromady.
>> Tak to je opravdu abstraktní.
Tak to je jen trochu pseudokódu.
Znamená to, že smysl v jak to běží?
Takže řekněme, že máte pole n elementy, že jo?
Pokud n je menší než 2, můžete se vrátit.
Vzhledem k tomu, víte, že jestli existuje jen jedna věc, musí být řazeny.
Else, řadit levou polovinu, a pak řadit pravou polovinu,
a pak sloučit.
>> Takže zatímco to vypadá velmi jednoduché, ve skutečnosti, přemýšlel o tom to
trochu obtížné. Vzhledem k tomu, že jste rád, No, to je trochu běh na sebe.
Je to tak?
Je to běh na sebe.
Takže v tomto smyslu, David dotkl při rekurzi ve třídě.
A to je pojem budeme mluvit o víc.
Je to, že toto, tyto dvě linky Zde, ve skutečnosti je jen program
říkat, aby se spouštěl sám s různým vstupem.
Takže spíše než běžet sebe s celistvost n elementy,
můžete zlomit to do levou polovinu a pravá polovina
a spusťte jej znovu.
>> A pak se podíváme na to vizuálně, proto, že jsem vizuální žák.
Funguje to pro mě lepší.
Takže se podíváme na vizuální příklad zde.
>> Řekněme, že máme celou řadu, šest prvky, 3, 5, 2, 6, 4, 1, nejsou tříděny.
Dobře, je tu hodně na této stránce.
Takže pokud vy můžete podívat na První krok se zde, 3, 5, 2, 6, 4, 1,
můžete rozdělit jej na polovinu.
Máte 3, 5, 2, 6, 4, 1.
Víte, že tyto aren't-- vás Nevím, jestli jsou řazeny, nebo ne,
takže si udržet lámání je dolů, na polovinu, na polovinu, na polovinu, až nakonec,
máte jen jeden prvek.
A jeden prvek je vždy řazeny, že jo?
>> Takže víme, že 3, 5, 2, 4, 6, 1 samy o sobě, jsou seřazeny.
A teď můžeme dát je dohromady.
Takže víme, na 3, 5.
Dali jsme dohromady ty.
Víme, že je to třídit.
Na 2 je tam pořád.
Můžeme dát 4 a 6 dohromady.
Víme, že to je seřazena, tak jsme dali, že společně.
A 1 je tam.
>> A pak se stačí podívat se na tyto dvě poloviny tady.
Máte 3, 5, 2, 2, 3, 5.
Jen si můžete porovnat začátek všeho.
Vzhledem k tomu, víte, že to je řazen a víte, že to je třídit.
Takže vy nemusíte ani na porovnat 5, stačí porovnat 3.
A 2 je menší než 3, takže Víte 2 musí jít na konci.
>> Totéž tam.
1 musí jít sem.
A pak, když jdete dát tyto dvě hodnoty dohromady,
víte, že to je seřazena a víte, že je tříděn.
Takže pak 1 a 2 je 1 je menší než 2.
To vám řekne, že 1 by měl jít na konci tohoto
aniž by při pohledu na 3 nebo 5.
A pak na 4, můžete jen zkontrolujte, že jde přímo tady.
Nemusíte se podívat na 5.
Totéž se 6.
Víte, že to prostě 6-- nemusí být díval.
>> A tak se tímto způsobem, jste jen ukládání sami
hodně kroků, když jste porovnávání.
Nemusíte porovnat každý prvek s jinými prvky.
Právě jste porovnat proti těm, že musíte porovnat ji proti.
Tak to je trochu abstraktní pojem.
Žádné starosti, pokud to není docela tě bít ještě v pořádku.
Ale obecně, to je jak sloučení třídění funguje.
Otázky, rychlých otázek, Než jsem se přesunout na?
To jo.
>> Diváků: Takže jste řekl, že jste užil polohách 1, a pak 4 a 6
a dát je do.
Takže nejsou those-- nejsou Díváte se na ně
jako samostatné prvky, ne jako celku?
ANDI PENG: Jo.
Takže to, co se děje je to, že jste v podstatě
vytvářejí zcela nové pole.
Takže víte, že tady, mám dvě pole o velikosti 3, ne?
Takže víte, že můj tříděného array musí mít šest prvků.
Takže si stačí vytvořit nová množství paměti.
Takže jste něco jako že plýtvání paměti,
ale to nevadí, protože je to tak malý.
Takže se podívat na 1 a se podíváte na 2.
A víte, že 1 je menší než 2.
Takže víte, že 1 by měl jít do počátek všech z nich.
>> Nemusíte ani potřeba podívejte se na 3 a 5.
Takže víte 1 je tam.
Pak jste v podstatě useknu na 1.
Je to, jako, mrtvý k nám.
Pak jsme prostě 2, 3, 5, a pak se 4 a 6.
A pak víte, že, vás porovnat 4 a 2,
Ach, ta 2 by mělo jít tam.
Takže jste plop na 2 dolů, si nakrájíme ho.
Takže stačí mít 3 a 5 v 4 a 6.
A vy jste jen držet sekání ho dokud se dát je v poli.
>> Diváků: Takže jste jen vždy porovnání [neslyšitelných]?
>> ANDI PENG: Přesně tak.
Takže v tomto smyslu, že jste jen porovnání, v podstatě,
jedno číslo proti jiné číslo.
A protože víte, že to řazeny, vás
Nemusíte se dívat skrz všechna čísla.
Stačí se jen podívat na první z nich.
A pak se můžete jen plop je dolů, protože víte,
oni patří tam, kam potřebují patřit.
To jo.
Dobrá otázka.
>> A pak, pokud někdo z vás jsou trochu ambiciózní,
neváhejte se podívat na tento kód.
To je vlastně fyzická realizace
o tom, jak bychom napsat merge sort.
A můžete vidět, že je to velmi krátká.
Ale nápady za to jsou docela složité.
Takže pokud máte pocit, jako kreslení na to ve své domácí úkoly dnes večer, neváhejte.
>> DOBŘE.
Tak i David přešel toto v přednášce.
Jaké jsou nejlepší věc runtime, nejhorší případ runtimes,
a očekávané runtimes korespondence druhu?
Pár vteřin přemýšlet.
To je docela těžké, ale druh intuitivní, pokud si myslíte o tom.
Dobře.
>> Diváků: Je nejhorší případ n log n?
ANDI PENG: Přesně tak.
A proč je to n log n.
>> Diváků: Není to proto, že se stává exponenciálně rychlejší,
takže je to jako funkci, která ne jen prostě být n
na druhou, nebo tak něco?
ANDI PENG: Přesně tak.
Takže důvod, proč runtime v této oblasti je n log
n je protože-- to, co jste dělá ve všech těchto kroků?
Jenom sekání jej v polovině, že jo?
A tak, když děláme log, vše, co to dělá
rozděluje problém na polovinu, na polovinu, na polovinu, ve více poloviny.
A v tomto smyslu, můžete druh z eliminovat lineární model
že jsme používali.
Protože když si nakrájíme věci v polovině, je to protokol.
To je jen matematický způsob, jak reprezentovat to.
>> A pak konečně, na konci, jste jen aby jeden poslední průchod
dát všechny z nich v pořádku, ne?
A tak, když stačí, aby zkontrolovat jednu věc, to je n.
A tak jste trochu vynásobením dva spolu.
Takže je to jako, že máš, že konečné zkontrolujte, zda n tady s log n
tady.
A pokud se množit je, že je n log n.
>> A tak to nejlepší a nejhorší případ případ, a očekává, že jsou všichni n log n.
Je to také jako jiného druhu.
Je to jako výběr druhu v tom smyslu, že
Nezáleží na tom, jaké jsou vaše Seznam je, je to jen bude
se udělat totéž pokaždé.
DOBŘE.
Tak jako vy můžete vidět, i když že druhy, které jsme pryč through-- n
čtvercový, to není moc efektivní.
A i to n log n je není nejúčinnější.
Jestliže vy jste zvědaví, tam je řazení mechanismy,
že jsou tak účinné, že jsou Téměř v podstatě byt v běhu.
>> Máte nějaký protokol n je.
Máte nějaké log log n je.
My nedotýkejte se na ně v této třídě právě teď.
Ale pokud vy jste zvědaví, neváhejte google, co je
nejvýkonnější třídicí mechanismy.
Já nevím, existují někteří z nich opravdu k smíchu,
jako-- tam je nějaké opravdu legrační ty, které lidé dělají.
A vy jste věděl, jak by vůbec nenapadlo.
Takže google, pokud máte trochu volného čas, na to, co jsou některé vtipné způsoby,
že people-- jakož i efektivní ways-- lidé
byli schopni realizovat nejrůznější.
DOBŘE.
A tady je jen šikovný malý graf.
Vím, že vás všechny, před tímto kvízu 0, bude ve vašem pokoji pravděpodobně snaží
zapamatovat to.
Tak to je hezké tam pro vás.
Jen nezapomeňte na logiku, která made-- proč tyto čísla byla vyskytující.
Pokud jste vždy prohrál, jen aby jisti, že víte, co druhy jsou.
A můžete projít je ve vaší mysli
přijít na to, proč ti, Odpovědi jsou tyto odpovědi.
>> Dobře.
Takže budeme pohybovat na, konečně, na vyhledávání.
Vzhledem k tomu, jak ti z vás, kteří po přečtení pset,
Vyhledávání je také součástí tento týden problém sady.
Budete vyzváni k implementaci dva typy vyhledávání.
Jedním z nich je lineární vyhledávání a jeden je binární vyhledávání.
>> Takže lineární hledání je poměrně snadné.
Jen chcete hledat prvek ze seznamu, zda jste to.
Musíte jen iterovat.
A když se rovná něco, stačí vrátit, ne?
Ale ten, který jsme nejvíce zájem mluvit o
je binární vyhledávání, vpravo, což je rozděl a panuj mechanismus, který
David demonstroval v přednášce.
>> Vzpomeňte si na telefonní seznam příklad že se stále vychovávat,
ten, že se druh snažil trochu na tento poslední rok,
kde rozdělit problém na polovinu, na polovinu, na polovinu, znovu a znovu,
dokud nenajdete to, co hledáte?
A vy jste dostal runtime of že stejně.
A můžete vidět, je to významně účinnější
než jakýkoli jiný typ vyhledávání.
>> Takže způsob, jakým bychom jít o provádění binárního vyhledávání
je, pokud bychom měli pole, index 0 až 6, sedm prvky,
se můžeme podívat ve středu, right-- Omlouvám se, pokud náš dotaz first--
chceme-li položit otázku, dělá pole obsahují prvek 7,
Je zřejmé, že jsou lidi, a mající taková malá pole, je to pro nás snadné
říct ano.
Ale způsob realizovat binární Hledání by se podívat do středu.
>> Víme, že index 3 prostřední, protože my
vím, je jich tam sedm prvky.
Jaké 7 děleno 2?
Můžete utnout, které navíc 1.
Máte 3 ve středu.
Tak je pole 3 rovna 7?
To není, že jo?
Ale můžeme udělat pár kontrol.
Je pole 3 menší než 7, nebo je pole 3 větší než 7?
>> A my víme, že je to méně než 7.
Takže víme, že, oh, to musí nemusí být v levé polovině.
Víme, že to musí být v pravé polovině, že jo?
Takže můžeme jen utnout polovinu pole.
Nemáme dokonce ani podívej se na to ještě.
Protože víme, že polovina naší problem--
víme, že odpověď je v pravá polovina našeho problému.
Tak jsme se jen podívat na to teď.
>> Takže teď jsme se podívat na Uprostřed toho, co zbylo.
To index 5.
Děláme stejnou kontrolu znovu a vidíme, že je to menší.
Takže se podíváme na levé straně to.
A pak vidíme, ten šek.
Je hodnota pole v index 4 rovna 7?
To je.
Takže se můžeme vrátit pravda, protože jsme zjistili, že hodnotu v našem seznamu.
Má tak, jak jsem šel přes že smysl pro všechny?
DOBŘE.
Dám ti kluci možná, stejně jako, tři, čtyři minuty přijít na to,
jak se to v pseudokódu.
>> Tak si představte jsem vás požádal, abyste napsat Funkce tzv search (), který se vrátil
hodnotu, logickou hodnotu, to byla pravda nebo false-- podobně,
true, pokud jste našli hodnota, false, pokud jste to neudělali.
A pak jste byli prošel v hodnoty, kterou
Hledali do hodnot, které je array-- oh, rozhodně jsem dal
že na špatném místě.
DOBŘE.
Tak jako tak, že by měl mít bylo na pravé straně hodnot.
A pak int n je číslo prvků v tomto poli.
Jak byste jít o snaze pseudokódu tento problém v?
Dám se vám bude líbit tři minuty na to.
Ne, myslím, že je only-- jo, je tu ještě jedna přímo tady.
Diváků: Mohu?
ANDI PENG: Jo, mám tě.
Je to pracovní?
OK v pohodě.
>> DOBŘE.
Tak jo chlapi, my jsme bude udržet na uzdě ho.
DOBŘE.
Takže předpokládáme, máme tento krásný malá pole s n hodnot v něm.
Nechtěl jsem kreslit čáry.
Ale jak bychom jít o snaží psát to?
Má někdo chtěl dej mi první řádek?
Chcete-li mi dát První řádek tohoto pseudokódu.
>> Diváků: [Neslyšitelné]
Diváků: byste chtěli přecházet through--
Diváků: Jen další pro smyčce?
Diváků: --for.
>> ANDI PENG: Tak tohle je trochu složitější.
Myslíš, že about-- chcete se udržují v provozu této smyčky
znovu a znovu, do kdy?
>> Diváků: Do [neslyšitelných] hodnota se rovná této hodnotě.
ANDI PENG: Přesně tak.
Takže můžete vlastně jen write-- můžeme ještě zjednodušit ji víc.
Můžeme jen dělat while, že jo?
Takže můžete mít jen loop-- víme, že je to za to.
Ale právě teď, jdu říkat "smyčka" - tím, co?
Loop until-- co je náš ukončení stavu?
Myslím, že jsem to slyšela.
Slyšel jsem, někdo to říct.
>> Diváků: Hodnoty se rovná střed.
ANDI PENG: Řekni to znovu.
Publikum: Anebo, dokud se Hodnota, kterou hledáte
k je rovna střední hodnotě.
>> ANDI PENG: Co když to není tam?
Co když je hodnota hledáte pro není vlastně v tomto poli?
Diváků: Vrátíte 1.
>> ANDI PENG: Ale to, co chceme smyčky, až když máme stav?
To jo.
>> Diváků: Dokud je tu jen jedna hodnota?
ANDI PENG: Můžete smyčka until-- takže víte, že jste
bude mít maximální hodnotu, je to tak?
A víte, že budete mít hodnotu min, že jo?
Vzhledem k tomu také, to je něco, Zapomněl jsem říci předtím,
že něco, co je kriticky binární vyhledávání
je, že vaše pole je již řazeno.
Protože neexistuje žádný způsob, jak dělat , pokud jsou to jen náhodné hodnoty.
Nevíte, pokud je to větší než ostatní, ne?
>> Takže víte, že vaše maximální a Vaše min tady, ne?
Pokud bude nastavení Váš max ve vašich minut a mid--
ať to jen předpokládat střední hodnota je správné here--
budete v podstatě smyčka dokud je minimum
zhruba stejný jako max, vpravo, nebo pokud vaše maximální není stejný jako min.
Je to tak?
Vzhledem k tomu, když se to stane, víte, že že jste nakonec narazila na stejnou hodnotu.
Takže chcete, aby smyčce, dokud vaší min je menší nebo roven to-- oops,
ne méně než nebo rovno, na druhou stranu around-- Max.
>> Věděli, že smysl?
Vzal jsem několik pokusů dostat toto právo.
Ale smyčka, dokud vaše maximální hodnoty je v podstatě téměř nižší
než nebo rovna vaší minimum, že jo?
To je, když víte, že jste se sblížil.
Diváků: Pokud by vaše maximální hodnota byla nižší, než je minimum?
ANDI PENG: Pokud se budete držet upraví jej, což
je to, co se chystáme je třeba dělat v tomto.
Dává to smysl?
Minimální a max jsou jen celá čísla, že jsme pravděpodobně
bude chtít vytvořit, aby trať, kde se díváme.
Vzhledem k tomu, pole existuje bez ohledu na to, co děláme.
Stejně jako, nejsme ve skutečnosti fyzicky sekání mimo pole, ne?
Jsme jen nastavení kde se díváme.
Dává to smysl?
>> Diváků: Jo.
>> ANDI PENG: OK.
Takže pokud to je podmínka pro naše smyčku, to, co chceme v této smyčky?
Co budeme se chtít dělat?
Takže teď, máme max a min, pravý,
pravděpodobně vytvořil tady někde.
Budeme chtít najít střední, že jo?
Jak jsme bude schopen najít uprostřed?
Co je mathematical--
Diváků: Max a min děleným 2.
ANDI PENG: Přesně tak.
Dává to smysl?
A to vy, proč bychom nebyl jen use--, proč jsme to udělali
místo toho dělá jen n děleno 2?
Je to proto, že n je hodnota že to bude zůstat stejné.
Je to tak?
Ale jak jsme přizpůsobit naši minimum a maximální hodnoty, se chystají změnit.
A jako výsledek, naše middle bude příliš měnit.
Takže to je důvod, proč chceme, to udělat tady.
DOBŘE.
>> A pak, že teď jsme našli our-- jo.
>> Diváků: Jen rychlý question-- když říkáte, min a max,
jsme za předpokladu, že to je již řazeno?
>> ANDI PENG: Jo, to je vlastně Předpokladem pro binární vyhledávání,
že musíte vědět, že to třídit.
Což je důvod, proč třídit, píšete ve vašem problém nastavit před binárního vyhledávání.
DOBŘE.
Takže teď, když víme, kde naše střed je, co chceš dělat?
>> Diváků: Chceme porovnat že do druhé.
ANDI PENG: Přesně tak.
Takže budete porovnávat střední hodnotě, že jo?
A co to říct nás, když jsme porovnat?
Co chceme dělat potom?
>> Diváků: Je-li hodnota větší než poloviny, chceme snížit ji.
ANDI PENG: Přesně tak.
Takže pokud je tato hodnota větší než polovině, my jsme
bude chtít změnit tyto minimální a maxes, že jo?
Co chceme změnit?
Takže pokud víme, že hodnota je někde tady to, co dělat, ti, změnit?
Chceme změnit naše Minimální být střední, že jo?
A pak ještě, pokud je to v tomto polovina, co chceme změnit?
>> Diváků: Vaše maximální.
ANDI PENG: Jo.
A pak jste jen tak aby looping, že jo?
Protože teď, po jednom průchodu díky, máte max sem.
A pak můžete přepočítat v polovině.
A pak si můžete porovnat.
A budete dál dokud min a maxes
mají v podstatě konvergované.
A to je, když víte, že že jste narazila na konec.
A to buď jste ho našli nebo nemáte v tomto bodě.
>> Má to smysl, aby všechny?
DOBŘE.
To je docela důležité, protože budete mít
psát to v kódu večer.
Ale vy máte docela dobrý smysl pro to, co byste měli dělat,
což je dobré.
DOBŘE.
Takže máme asi sedm minut levé části.
Takže budeme hovořit o tento pset, že budeme dělat.
Takže pset je rozdělena na dvě poloviny.
První polovina se týká provádění find
ve kterém píšete lineární hledání, je binární vyhledávání a třídění algoritmus.
>> Tak toto je první tentokrát v pset kde
budeme dávat vám kluci, co se nazývá Distribuce kód, což je kód
že jsme pre-psaný, ale právě opustil několik kousků off
pro vás až do konce psaní.
Takže vás kluci, když se podíváte na to kód, byste mohli dostat opravdu strach.
Pokud jste stejně jako já, ach, Nevím, co to dělá,
Já nevím, stejně jako, že se zdá tak složité, ehm, relaxovat.
Je to v pohodě.
Přečtěte si spec.
Spec vám vysvětlí přesně Co všechny tyto programy dělají.
>> Například, generate.c je program že přijde s pset.
Nemusíte skutečně se ho dotknout, ale měli byste pochopit, co to dělá.
A generate.c, vše, co dělá, je buď generování náhodných čísel
nebo si můžete dát semeno, jako když předem domluvené číslo, které je zapotřebí,
a to generuje více čísel.
Takže tam je specifický způsob, jak implementovat generate.c ve kterém
stačí udělat spoustu čísel pro vás otestovat své jiné metody na.
>> Takže pokud byste chtěli, pro Příkladem, otestujte nález,
budete chtít spustit generate.c, generují spoustu čísel,
a pak spustit funkci pomocníků.
Váš pomocníci funkce je místo, kde jste vlastně fyzicky psaní kódu.
A myslet pomocníků jako soubor knihovny píšete, že nález volá.
A tak se v rámci helpers.c, budete dělat vyhledávání a řazení.
>> A pak budete v podstatě stačí dát je všechny dohromady.
Spec vám poradí, jak se dát, že na příkazovém řádku.
A budete moci vyzkoušet, zda není váš třídit a hledat pracují.
Bezva.
Má už někdo začal a setkávalo s problémy nebo dotazy
mají právě teď s tím?
DOBŘE.
>> Diváků: Počkejte.
Mám otázku.
>> ANDI PENG: Jo.
>> Diváků: Tak jsem začal dělat lineární hledání v helpers.c
a to nebylo opravdu funguje.
Ale později jsem zjistil, že jsme právě musíš ji smazat a udělat binární vyhledávání.
Takže to je jedno, jestli to nebude fungovat?
>> ANDI PENG: Krátká odpověď zní ne.
Ale protože jsme ne--
Diváků: Ale nikdo ve skutečnosti kontrola.
ANDI PENG: Jsme Nikdy jde vidět, že.
Ale pravděpodobně budete chtít, aby se jisti, že vaše hledání funguje.
Protože pokud vaše lineární Hledání nefunguje,
pak je šance jsou vaše binární vyhledávání nebude fungovat stejně.
Protože máte podobnou Logika v obou z nich.
A ne, to opravdu nezáleží.
Takže pouze ty, které budete zase v jsou třídit a binární vyhledávání.
To jo.
>> A také, spousta dětí bylo snaží se sestavit helpers.c.
Nejste vlastně dovoleno to udělat, protože helpers.c
nemá hlavní funkci.
A tak byste měli pouze být ve skutečnosti kompilace
vytvoření a najít, protože najít hovory helpers.c a funkce v ní.
Takže to dělá ladění jako osina v zadku.
Ale to je to, co musíme udělat.
Diváků: Jen Uděláte všechno, že jo?
ANDI PENG: stačí dělat všechno stejně, jo.
DOBŘE.
Tak to je, pokud jde o to, co pset žádá, abyste všichni dělat.
Máte-li jakékoli dotazy, pocit zdarma a zeptejte se mě po bodu.
Budu tady, stejně jako, 20 minut.
>> A ano, je to pset opravdu není tak špatné.
Měli byste být v pořádku.
Ty, jen řídit se pokyny.
Druh mají pocit, logicky, co Děje se to, a budete v pohodě.
Nebuďte příliš velký strach.
Je tu spousta kódu již psali zde.
Nebuďte příliš velký strach, pokud nemáte pochopit, co to všechno znamená.
Pokud je to hodně, je to naprosto v pořádku.
A přišel úřední hodiny.
Pomůžeme vám se podívat.
>> Diváků: S extra funkce, se podíváme na ty?
>> ANDI PENG: Jo, ty, které jsou v kódu.
Ve hře 15 polovina je to už napsal pro tebe.
Takže tyto funkce jsou již v kódu.
Jo.
Dobře.
No, hodně štěstí.
Je to nechutné den.
Takže doufejme, že vy se necítí příliš špatného na tom, zůstat uvnitř a kódování.