>> JASON Hirschhorn: Welcome do tří týdnů, všichni.
Máme plné ruce práce, ale vzrušující část před námi.
Takže první, protože jsme udělali některé Angličtina s kurzem, ale stále
mají hodně učení zbývá udělat, jsem ukážu vy nějaké zdroje
, která by měla ukázat, že je neuvěřitelně užitečné, protože vám nejen přiblížit svůj
problém sady, ale také strávit všechny Materiál jsme vám kluci v
přednášky a šortky a část.
>> Pak budeme trávit první 20 do 25 minut po část děje přes
GDB, které může nebo nemusí mít použitý v tomto místě, ale je to
neuvěřitelně užitečný nástroj, který bude pomůže ladění programů.
Mnoho z vás mohl použít printf v uprostřed svého programu přijít
co proměnnou rovnal.
GDB je ještě lepší než printf a není šroub svůj kód, protože ti
spustit na spustitelný soubor.
Tak půjdeme přes 10 nejvíce užitečné příkazy, které potřebujete pro GDB, a my jsme
jít na cvičení společně, aby v problému nastavit tři a mimo ni, můžete
GDB lze používat k ladění pomoc vaše programy.
A konečně, budeme jít přes některé třídění a vyhledávání algoritmy
které jste viděli v přednášce, a my jsme bude vlastně kód, a to nejen
pseudokódu, ale kód binární vyhledávání, bublina třídění a výběr třídit.
>> Tak za prvé, já chci jít nad zdroji.
Jedná se o rozsáhlý seznam, a je to menší písmo, protože jsem měl hodně
vejde na zde.
Ale to vám pomůže nejen, znovu, s problémovými sad a
trávení informace, které jste se naučili, ale určitě, no kvíz čas, budou tyto
být nesmírně užitečná.
Takže nejprve konstatuje, přednáška.
Pokud půjdete do cs50.net/lectures a přejděte na konkrétní týden a den,
uvidíte, že tam jsou poznámky pro každý přednáška, která není jen
Přepis, ale Upravená verze co byla pokryta v přednášce s kódem
úryvky a další užitečné kousky.
Vřele doporučuji jít přes ty.
A pak také, že je zdrojový kód k dispozici od každé přednášce.
A opět, bude také tato skluzavky k dispozici on-line na cs50.net/sections
dnes večer.
>> Takže druhá jsou šortky každý týden, že Kryt témat, obvykle 5 až 15
minut na délku.
A ti, doufejme, že se vám velký nátěr na různá témata.
Třetí -
a to je zbrusu nový tato rok - je study.cs50.net.
Pokud jste si to ověřil, jsem Důrazně doporučujeme, aby si to.
Můžete si vybrat téma.
Máme desítky témat tam.
Tak například, si vyberete funkcí.
To vám dává nějaké diapozitivy a bere na vědomí, na funkcích.
Ti, kteří jsou ve skutečnosti diapozitivy, že TFS se doporučuje používat při naší
prezentace v oddíle.
K dispozici je také tipy a triky pro práci s funkcemi, a tam je
Problémy praxe, které pomáhají budete pracovat s funkcemi.
Také vám odkazy na krátký na funkce a časy, které funguje
přišli v přednášce.
Takže study.cs50.net, zbrusu nový tato rok, fantastický zdroj.
>> Dále mám muže, který je manuální příkaz, který můžete spustit na
příkazového řádku.
Takže pokud máte jakékoliv dotazy týkající se příkaz, například, Rand, které
se setkal minulý týden v oddíle a vy jste pravděpodobně narazili na
váš problém nastavit, když prochází generování kódu, ale pokud jste typ muže
rand, dostanete na stránku, která vám řekne vše o rand.
To vám dává to, co to znamená, Parametry to trvá, stejně jako návrat
Druh a stručný popis této funkce.
>> Tak podívejte se rand.
To může být trochu rozvláčný a matoucí, takže někdy jsem zjistil, že
jednoduše Googling to, co chci vědět, je Nejlepší způsob, jak najít odpověď.
Takže cvičit s firmou Google.
Získat dobrý Google.
To se stane vaším nejlepším přítelem.
>> Stejně jako Google, pokud nemůžete najít na Google, cs50.net/discuss, je to
diskusní fórum.
Šance jsou, pokud máte nějakou otázku, kdo Vašich 700 + vrstevníky také, že
Otázka a může se zeptal to již v diskusi
fóra a byly to odpověděl.
Takže pokud máte obecný dotaz nebo Máte otázku, na kterou si myslíte, že
Možná, že ostatní lidé mohli narazit, podívejte se na cs50.net/discuss.
>> Konečně, poslední dva, pokud chcete mluvit o skutečné lidské bytosti, v kanceláři
hodin od pondělí do pátku.
K dispozici je také on-line úřední hodiny pro rozšíření studenty.
A poslední, ale určitě ne nejméně, me, vykřičník.
Ty mají svou kontaktní informace.
Pokud budete něco potřebovat, prosím, nikdy neváhejte mě kontaktovat.
Vždy, neváhejte tak učinit.
Jen velmi málo z vás, kteří mají mě na Gchat, tak, aby bylo zklamáním,
ale doufejme, že bude měnit mezi Tento a další část.
Jakékoliv dotazy tak daleko na zdroje?
Skvělé.
>> A konečně, další konektor pro zpětná vazba, sayat.me/cs50.
Můžete mi dát anonymní zpětnou vazbu o tom, jak dělám.
To bylo opravdu užitečné minulý týden.
Dostal jsem pár komentářů od vás hned po část, a od
ostatní studenti, kteří ho sledovali, v průběhu týdne, a to
byla nesmírně užitečná.
Budu se snažit a omezit svou použití slovo "sladké", ale já vám ukážu můj
nadšení a vzrušení jiným způsobem.
Ale byly tam další další věcné zpětné vazby,
jak plusy a delta.
Takže, prosím, dám vy zpětnou vazbu na vašich problémů sad.
Neváhejte a dejte mi zpětnou vazbu na mém učení.
Jsem tu pro vás.
>> Skvělé.
To je vše, co mám na první část.
Má někdo nějaké otázky tak daleko?
A mám poznámku k řídící středisko.
Prodlužovací studenti mě messaged říká, že nedostávají žádný zvuk,
ale to je z mé moci opravit.
Takže doufejme, že dostane vyřešen krátce.
Pokud sledujete on-line, hi, ale můžete mě slyšet.
>> Takže nejprve se budeme projít GDB.
GDB, jak jsem naznačil výše, je ladicí nástroj
mnohem lepší než printf.
Takže, jak začít s GDB, vás, pokud Chcete-li otevřít svůj přístroj
a mít soubor, který jsem zasláno e-mailem na vás dříve - tento soubor bude také
k dispozici on-line na chvíli -
a spusťte GDB. / název souboru.
Za prvé, samozřejmě, budete muset kompilovat soubor, protože GDB lze použít pouze na
spustitelné soubory.
>> Ale pokud jste někdy chtěli spustit GDB, první věc, kterou uděláte,
spuštění GDB. / Caesara.
Tak to je název programu jsme jít s ním hned.
Takže budu psát, aby Caesara, který bude mi spustitelný soubor
zde zvýrazněny zeleně.
A pak budu spouštět GDB. / Cesar.
>> A tam jdete.
Vidíte, máme nějaký text mi říct, o verzi GDB, dává mi
některé informace o záruce a pak jsme mít dotaz HDP, který vypadá trochu
ze jako náš příkazového řádku řádku, ale vidíte, že je to otevřené
paren, GDB, v blízkosti závorka.
Než budeme pokračovat a ladění tento obrázek že jsem poslal k vám všem, pojďme se podívat na
některé užitečné příkazy, takže máme pocit, z toho, co se děje na krytí.
>> Tyto příkazy jsou zde uvedeny v Pořadí, ve kterém jsem se obecně používají je.
Takže začnu program běží GBD. / Název programu,
V tomto případě, Caesar.
A pak první věc, kterou udělám 99.9% v době, kdy je typ přestávka na mysli.
To stanoví bod zlomu na hlavní.
V podstatě, co jste tam dělal je program, se nezastaví na
Hlavním takže můžete začít zkoumat ji linku linkou, spíše než běh všech
cesta přes.
Můžete rozdělit na různých místech ve váš kód, ale hlavní je obecně
dobré místo pro start.
>> Další příkaz spustit, je běh.
To začíná běh programu, a Pokud potřebujete zadat příkazový řádek
argumenty, můžete to spustit tento příkaz.
Běh s argumenty.
Takže od té doby jsme se jít přes verzi C, což je program, vy
psal pro pset dva -
tenhle, samozřejmě, má nějaké chyby v tom, že snad najdeme -
budeme běžet běžet s nějakým příkazem argumenty jsou proto Caesar,
jak vy víte, na problému nastavit spec, má některé
argumenty příkazového řádku.
>> Další pár příkazů, další kdo je vlastně volal další.
Ten, kdo se vám řádek po řádku prostřednictvím svého programu.
Takže bít n a stiskněte klávesu Enter vám vezme na další řádek, provádění
předchozí řádek.
Krok vás zavede nejen na další řádek, ale
se vám uvnitř funkce.
Takže pokud jste napsali funkci Váš kód, nebo pokud si budete chtít prohlédnout
na i, například, můžete hit s, a spíše než jít na další řádek
soubor, který se chystáte přes pravé teď, budete skutečně krok do
tato funkce a vidět jeho kód.
>> Seznam ukazuje, ve velmi uživatelsky přívětivý formát, se 10 nebo tak linky kolem
kde se právě nacházíte v kódu takže se můžete skutečně vidět soubor
spíše než byste museli vyměnit zpět a přepínat mezi různými zobrazeními.
Tisk je jako printf, jak jeho název napovídá.
To vám ukáže, co proměnná rovná.
>> Informace o místní je opravdu užitečné.
Toto je speciální verze tisku.
Informace o místní obyvatelé vám ukáže všechny místní proměnné, vytiskne všechny pro vás
které jsou v současné době k dispozici.
Takže obecně, spíše než na vytisknout čtyři proměnné, které jsem
zvědavý, jestli jsem v cyklu for, pro Například jsem jen napsat info místní obyvatele,
a to se mě, co mi počítadlo Ukážu rovná, stejně jako pole, že jsem
pracovat na sobě rovnými.
>> A konečně, i nadále.
Zadáním přestávku vám zastaví v bodu zlomu.
Můžete projít lince linka s další a krok.
Pokračovat spustí program pro váš další bod zlomu nebo do dokončení v případě,
nejsou žádné další přestávka bodů.
Zakázat odstraní body přerušení, pokud vám rozhodl přestávka na hlavní bylo
nevhodné, kterou chcete nastavte ji někde jinde.
A konečně q, přestat, dostane z GDB.
>> Takže tento program,. / Caesar, budeme prohlédnout právě teď a my
se chystáte použít GDB najít chyby v tomto programu.
Běžel jsem tento program dříve se Zkontrolujte, zda 50, a mám jeden zamračený pohled.
Všechno to existovalo, je sestaven, je prošel mnoho zkoušek, ale
nějaký důvod, že neprošel pětinu test, soustružení BARFOO, všechny čepice, do
E-D-U-I-R-R, všechny čepice, používat tři jako klíč.
Mám docela blízko.
Vystoupil jsem jedním písmenem.
Takže tam je nějaká malá chyba tady.
Díval jsem se přes můj kód.
Nemohl jsem na to přijít.
Doufejme, že vy mi může pomoci zjistit, co tato chyba je.
>> Tak to je chyba, že jsme vyhledávání.
Pojďme do GDB.
Opět jsem běžet GDB. / Caesar, takže teď jsme v GDB.
A co je první co mám dělat?
Právě jsem vstoupil GDB.
Někdo mi dát dobrý příkaz zadat.
>> STUDENT: Přestávka hlavní.
>> JASON Hirschhorn: Přestávka hlavní.
Fantastic.
Pojďme typ, který palců
Vy můžete sledovat tady nebo sledovat s sebou na svých počítačích.
Přestávka hlavní, a uvidíte, bod zlomu byl nastaven na -
to mi dává nějaký divný adresu v paměti, a to mi také dává číslo řádku.
Kdybych se ohlédnout na tomto souboru, Já bych si uvědomit, že hlavním
stalo na řádku 21.
Co bych měl běžet dál?
Je můj program běží?
Ne.
Takže to, co bych měl běžet dál?
>> STUDENT: Spustit.
>> JASON Hirschhorn: Spustit.
Měl bych jen spustit běh, nebo by I přidat nějaké další věci?
>> STUDENT: Běh s argumentem.
>> JASON Hirschhorn: Běh s příkaz argumenty.
A protože jsem ladění velmi specifické případ, mám zadat, že
argument řádek příkaz.
Tak jsem si to spustit tři, což je, opět, Výstup jsem dostal od Odjezd 50.
Spuštění programu.
Jdeme přes několik řádků.
Nyní budete vidět, že jsme na řádku 21.
Jak mám vědět, že jsme na řádku 21?
Protože když se podíváte na levé straně okna mého terminálu, tam
se říká, že řádek 21.
A to mi dává, ve skutečnosti, kód, který je na řádku 21.
Tak jsem misspoke dříve.
Hlavní je to vlastně na řádku 21.
Hlavní je pár řádků nad 21 let.
Ale na řádku 21, který je kde jsme lámání.
Tento řádek kódu má ještě není proveden.
To je důležité.
Linka vidíte nemá byl proveden ještě.
To je další řádek kódu se chystáte provést.
>> Takže další řádek, protože vy jste pravděpodobně obeznámeni s, je to
kontrolu stavu, zda mám zadali argument příkazového řádku.
A aby i to, co je druhý část, která dělá?
Co je na i?
>> STUDENT: Změna na celé číslo.
>> JASON Hirschhorn: Je nám líto?
>> STUDENT: Je to mění argument celé číslo.
>> JASON Hirschhorn: Tak se i mění arg v1 z řetězce na celé číslo.
A pak to, co je to kontrola?
>> STUDENT: Pokud je druhý Argument příkazového řádku, stranou
od spuštění programu.
>> JASON Hirschhorn: A co je Druhá polovina tohoto
Kontrola Logický výraz?
Tato část sem, aby i?
>> STUDENT: Pokud je to negativní.
>> JASON Hirschhorn: Ujistěte se, co?
>> STUDENT: Ujistěte se, že je, ve skutečnosti, pozitivní.
>> JASON Hirschhorn: Přesně tak.
Toto je kontrola, zda je to negativní, a pokud je negativní, jsem
mají pocit na další řádek sílu se mi řvát na uživatele.
Takže pojďme hit konec k provedení tohoto řádku.
Nechceme vidět, že řádek, který vy Možná, že uvidí křičí na
uživatel a pak se vracet, protože tento řádek nebylo provedeno.
I vstoupil 3.
Tak jsem dělal, ve skutečnosti, zadejte dvě příkaz argumenty jsou, a 3 je
větší než nula.
Takže jsme viděli, že linka, jsme provedli, ale my jsme neměli krokem
uvnitř if stavu.
>> Takže teď, příště, vidím, že jsem nastavení int key rovná se i arg v1.
Tak to je mi vytvořit proměnnou klíč.
Takže pokud jsem vytisknout klíč právě teď, protože , který vám umožní vidět
hodnota v proměnné, klíč se rovná 47.
To je divné, ale samozřejmě, to proto, že nemám
provedeny ještě tento řádek.
Takže teď, pokud jsem narazila n, provedení tohoto řádku, a dělat tiskovou klíč, klíč bude rovnat 3,
což je to, co očekáváme, že se rovnat.
>> Takže znovu, v GDB, řádek, který vidět dosud provedeny.
Musíte se trefit n nebo S nebo číslo dalších příkazů skutečně
provedení tohoto řádku.
Tisk klíč.
Klíčové je na 3.
Tak daleko, tak dobrý.
String je prostý text.
Pojďme spustit tento řádek.
Začínám řetězec od uživatele.
>> Pojďme se podívat, v mém Odjezd 50, jsem zadejte BARFOO všechny kryty, takže
to je to, co budu zadávat.
Kdybych teď vytisknout ve formátu prostého textu.
Uvidíte, že se rovná řetězec.
To mi dává nějaký jiný podivný šestnáctkové číslo, ale to dělá v
Skutečnost, že můj řetězec BARFOO.
Pokud bych chtěl vidět, co klíč činil v tento bod, jak bych mohl zjistit klíč?
>> STUDENT: Print klíč.
>> JASON Hirschhorn: Print klíč, přesně tak.
A ve skutečnosti, tam je zkratka.
Pokud jste unaveni psaní tisk, můžete zadat p.
Tak p klíč dělá přesně stejný věc.
A opět, vidím, že se rovná 3.
>> Pokud jsem chtěl zjistit, co oba klíče a BARFOO rovnal zároveň
ale byl jsem unavený z psaní každého jeden z jednotlivě, I
mohl psát info místních obyvatel.
To mi dává klíčové rovná 3.
Prostý text se rovná BARFOO.
To také dává mi tyto dvě podivné věci na vrcholu, je tato proměnná i, a
tato proměnná n.
>> Ti, kteří jsou skutečně existující ve svém hlavním programu.
Ještě jsme se s nimi setkali ještě, ale jako náhled, ti,
existují v mém cyklu for.
Takže teď, že se rovnají nějaký divný čísla, protože nebyly
inicializován ještě, ale oni ještě existují v paměti, takže jsou to jen nastavit
nějaké odpadky hodnotu.
Ale my jsme to vidět klíč obyčejný textu právě tam.
>> Tak jdu k provedení tohoto řádku, řádek 34, pro smyčky.
Chystáme se skočit do pro smyčce bít n.
A my jsme uvnitř smyčky for.
Jsme na naší první kontrole.
A opět, to by tak nějak vypadat znáte, protože to bylo
Caesar program, který byl napsán, ale znovu, má nějaké chyby.
>> A teď když to udělám info místní obyvatele, protože jsem uvnitř, která pro smyčce, uvidíte
že i rovná nule, jak jsme očekávali.
To je to, co jsme ji nastavit na a inicializován že v cyklu for.
n se rovná 6..
To také dává smysl, protože jsme si stanovili je k strlen prostého textu.
Tak jsem chtěl dělat info místní obyvatele nebo tisk do proměnné se často, aby se ujistil, že
všechno je vždy to, co Očekávám, že se rovnat.
V tomto případě, vše je co jsem se očekávat, že se rovnat.
>> Takže začněme pohybující se to pro smyčce.
Linka Jsem na je linka 36, ​​pokud je prostý Text i je větší než a prostý
text i je menší než nebo rovno Z.
Vím, že můj problém není s to můj první dopis, je to s druhým písmenem.
Podíváme-li se zpět při příjezdu 50, B jde do E pokuty.
Beru na A a na výstupu jako , nemění to D. Takže
něco, co je špatného druhý dopis.
Takže budu se pohybovat tam ve vteřině.
>> Ale když jsem si chcete zkontrolovat, co prostý Text jsem činil v tomto konkrétním
případ, myslím, že by to mělo být, co?
Co je třeba prostého textu jsem se rovnají v této První kolo pomocí smyčky for?
>> STUDENT: Zero?
>> JASON Hirschhorn: Prostý text I?
Tak to by mělo být hlavním B. Já, samozřejmě, rovná nule, ale holý text
držák nula uzavřená závorka rovná B protože řetězce, jak jsme viděli minulý týden,
jsou pole, takže dostáváme První znak z toho.
Takže ještě jednou, když jsem vytisknout prostý text Já, já, ve skutečnosti se znak
B. A to je hezké, že jo?
Nemám vlastně mít ve formátu prostého textu I. To není jedna z proměnných I uvedené
nebo inicializaci, ale můžete tisknout z celé řady věcí
pokud byste chtěli.
>> Ale pojďme projít.
Pokud holý text I je větší než A a holý text I je menší než nebo rovno
Z, která je samozřejmě pravda, protože máme kapitál B. jdu spustit
nějaký příkaz na to.
Viděli jsme, že matematika minulý týden, takže budeme brát jako samozřejmost, že to funguje
právo podle Kontrola 50.
>> Tyto složené závorky, první ukázal, že jsem se ukončení, pokud
stav, druhý ukázal že jsem ukončení cyklu for.
A tak teď, když jsem narazila na Next, uvidíme jsme zpátky u cyklu for znovu.
Jedeme přes pro znovu smyčky.
Pojďme vlastně krok do druhé iterace pro smyčce a typu
Informace o místní obyvatelé.
>> Takže jsme ve druhé iteraci naší pro smyčce.
Já se rovná 1, které očekáváme.
N se rovná 6, který očekáváme.
Klíč se rovná 3, které očekáváme.
A prostý text, uvidíte, se rovná EARFOO teď, ne BARFOO už proto, že
V naší předchozí iteraci, B byl se změnil na kapitálu E. Takže jsme o
setkat problém, takže to je místo, kde budeme
ponořit do ladění.
Ale má někdo nějaké otázky, o tom, co jsme dělali doposud?
Fantastic.
>> Takže se chystáme spustit to, zda stav, holý text držák jsem zavřel
Držák větší než A a holý text I menší než nebo rovna Z. Ale předtím, než
Jdu do toho, protože to je místo, kde Vím, že moje chyba, chci upozornit
z prostého textu I. A pojďme dát vytisknout ven.
To dělá rovnat znaku A, takže se zdá být tak daleko, všechno je v pořádku.
>> Tak jsem se očekávat, že tento řádek pro mou logiku, tato linka by měla být pravda.
Je to velké písmeno.
Ale když jsem narazila n, my si uvědomit, že tento linka, ve skutečnosti nebylo provedeno.
Seskočil jsem na else if.
Proč se to stalo?
>> STUDENT: Protože máte váš stav prostého textu je větší
než, není rovno nebo větší než.
>> JASON Hirschhorn: Tak jsem měl prostý text I je větší než A, není větší
než nebo rovno.
Tak jasně, kapitál ne spustit to, zda podmínka, a my jsme
není krok do něj, a my Není to potřebné posun.
Tak takhle to je, ve skutečnosti.
Jsem přišel na svou chybu.
Mohl bych jít zpátky do zdrojového souboru, změnit a aktualizovat ji a
spustit znovu zkontrolujte 50.
>> Ale uvidíme, jen pro pedagogika je sake, když jsem dál.
Else if neprovede jeden, ale co místo rovná se příkaz
které se nemění.
Tak to vůbec nezměnila, a když jsem vytisknout prostý text tady, uvidíme děje
přes to pro smyčku ne, ve skutečnosti, změnit, že druhý znak vůbec.
Je to stále kapitál A.
>> Takže znovu, budeme ladit naše chyba.
Uvědomili jsme si, že to tam bylo některé logika chybí.
A to ladit se dopředu před skutečného provedení tohoto řádku,
ale ty by si všimli, měli jsme jen hit Další a přejdete na jiný, že v případě,
to znamená, že v případě, že podmínka Nebyla to pravda.
Nechtěli jsme, ve skutečnosti, se výsledek jsme očekávali.
Takže bychom mohli být vyzváni, měl jsme nebyli tak chytrý, aby se na
, že v případě, stavu a zkontrolovat, zda ve skutečnosti, naše podmínka by měla vyhodnotit na
platí v aktuálním kontextu.
>> To je vše pro ladění tohoto programu.
Má někdo nějaké otázky?
Co příkaz bych mohl zasáhnout přestat GDB?
Q. A pak budu vyzván, skončit stejně?
Ano, nebo ne.
Budu hit ano, a já se přestal GDB.
>> Tak to byl rychlý nátěr na GDB.
Ve skutečnosti, v reálném případě, Udělal jsem to v úředních hodinách.
GDBed jsem přesně tento program na úřední hodiny se student.
A když se vrátíme k příkazům, které jsme viděli předtím, než jsme použili zlomu Main, nejprve
věc, kterou jsme udělali.
Použili jsme běžet s argumenty příkazového řádku, Druhá věc, kterou jsme udělali.
Použili jsme vedle hodně se pohybovat nám prostřednictvím linky.
A opět, krátká verze příští n.
To je v závorce šedé barvy na snímku.
>> Nepoužili jsme krok, ale my ne nezbytně nutné pro tento případ.
Ale my jsme ho mohli použít v trochu později dnes jsme-li ladění, pro
příklad, binární vyhledávání, kdy binární hledání se nazývá v samostatné
funkce, ale je tu některé chyby s ním.
Budeme chtít vstoupit do volání na binární vyhledávání a
vlastně ladit.
Seznam bychom neměli používat buď proto, že jsme měli dobrý pocit z našeho kódu, ale pokud jsem
to chtějí, aby si o tom, co kód I bylo kolem, mohl jsem použít seznam.
>> Vytisknout jsme použili, info místních obyvatel, které jsme použili.
Pokračovat jsme nemuseli použít v tomto případ, ani to musíme použít
zakázat, ale my jsme použití přestat.
Opět platí, že tyto příkazy 10, praxe je.
Pokud jste pochopili tyto 10 příkazy, měli byste být nastaven na ladění jakékoliv
vydat s GDB.
>> Takže se chystáme jít dál, opět se Jádrem části dnes děje přes
Tyto třídění a vyhledávání algoritmy.
Než tak učiníme, opět nějaké otázky, připomínky, obav o GDB?
Takže se každý bude používat GDB spíše než printf?
Takže všichni, pro perpetuita boží, každý je přikyvování hlavou právo
teď, tak jsem tě vidět v úředních hodinách a všechny TFS vás a uvidíte,
řeknou, ukaž mi, jak používat GDB, a budete se moci
jim ukázat, že jo?
Druh?
Možná, snad.
V pohodě.
>> Takže budeme pohybovat do třídění a vyhledávání.
Uvidíte Mám seznam již řazeno pro nás, ale to nebude
že tomu tak vždy.
Takže problém nastavit specifikaci pro problém nastavit tři, máte šortky
které můžete sledovat, a to vlastně zeptá se dívat na ty šortky.
Také v přednášce minulý týden, jsme šli přes Mnoho z těchto algoritmů, takže jsem
nebude trávit čas ve třídě děje nad těmito algoritmy znovu nebo výkresu
fotografie pro jak tyto algoritmy pracují.
Opět platí, že informace, můžete re-watch přednáška, nebo že informace
je zachycen výjimečně na kraťasy pro tato vyhledávání, všechny
které jsou k dispozici na cs50.net.
>> Takže místo toho, co budeme udělat, je napsat tyto programy.
Máme pocit, mentální model, jak pracují, a tak to, co budeme
udělat, je kód je doopravdy.
Chystáme se obrátit, že mentální model že obraz, chcete-li, do
skutečný kód.
A pokud jste trochu zmatený nebo mlhavé na mentální modelu, jsem úplně
pochopit.
>> Nejsme ve skutečnosti bude skok na kód rovince.
Takže, když to výzva v tomto snímku se ptá jste na kód binární vyhledávání, a
ve skutečnosti, iterativní verze binární vyhledávání, první věc, kterou jsem
Opravdu chci, abys je napsat nějaký pseudokódu.
Takže máte tuto mentální model, jak binární hledání práce.
Vezměte si list papíru, pokud máte jeden snadno dostupné, nebo otevřít
textový editor, a já bych všichni psát.
Potom se provedou čtyři minuty napsat pseudokódu pro binární vyhledávání.
>> Opět, myslím, že o tom, že mentální model.
Přijdu kolem, pokud máte dotazy a můžeme nakreslit obrázek ven.
Ale nejdřív, než začneme programovat, Chtěl bych napsat
pseudokódu pro binární vyhledávání, takže když jsme se ponořit, máme nějaký směr jako
tam, kde bychom měli zamířit.
>> STUDENT: Můžeme předpokládat, že pole hodnoty, dostaneme se již řazeno?
>> JASON Hirschhorn: Takže pro binární vyhledávání pracovat - vynikající otázku - jste
vzít v seřazené pole hodnot.
Takže předpokládám, že to bude fungovat.
Vrátíme se k tomuto snímku.
Uvidíte ve fialové funkci prohlášení bool binary_search int
hodnota, int hodnoty, int n.
To by mělo připadat povědomý, pokud jste již dosažena nebo dostali svůj
špinavé ruce s problémem sady.
>> Ale to je vaše funkce prohlášení.
Opět platí, že by se nemusíte starat o že moc v tomto okamžiku.
Co opravdu chci, abyste udělat, je vzít čtyři minuty do pseudokódu binární
vyhledávat, a pak půjdeme na které jako skupina.
A přijdu okolo.
Pokud máte dotazy, pocit zdarma, zvedněte ruku.
>> Proč jste se další dvě minuty dokončit až v pseudokódu?
Vím, že se to může zdát směšné, že budeme trávit tolik času na
něco, co ani není skutečně C, ale zejména pro ty více
náročné algoritmy a problém sady, že máme přijít na to,
začíná v pseudokódu nestará o syntaxi, jen starosti
logika, je nesmírně užitečná.
A to způsobem, nejste řešení dvou neuvěřitelně složité problémy najednou.
Jenom se zaměřením na logiku, a pak se přesunout do syntaxe.
>> OK.
Začněme prochází pseudokódu.
Napsal jsem tady, binární Hledání pseudokódu.
Budeme psát o této radě společně.
Nebo budu psát to a dám me, že výzvy potřebuji.
Takže může mi někdo dát první řádek pseudokódu si
psal pro binární vyhledávání?
Ano, Annie?
>> STUDENT: I ​​když délka list je větší než nula.
>> JASON Hirschhorn: I když délka ze seznamu větší než nula.
A opět, můžeme vidět některé C-hledá syntaktické věci na zde.
Ale většina z toho je v angličtině.
Měl někdo nějaké linky dali před tím v jejich pseudo-kódu?
>> STUDENT: Získejte pole na řazeny čísel.
>> JASON Hirschhorn: napsal jsi "se Pole tříděných čísel. "Per
deklarace funkce, budeme kolem pole seřazených čísel.
>> STUDENT: [neslyšitelné].
>> JASON Hirschhorn: Tak budeme mít, že.
Ale ano, pokud jsme neměli to, že jsme bude muset vyřešit naší nabídku
čísla, protože binární vyhledávání funguje pouze na tříděné pole.
Takže zatímco délka seznamu se rovná nule, jsem dám v některých složených závorek
aby to vypadalo trochu jako C. Ale zatímco se zdá map na
zatímco smyčky, takže v této chvíli smyčka co potřebujeme
udělat pro binární vyhledávání?
>> Někdo, kdo mi nedal odpověď, ale zatím, kdo to napsal?
>> STUDENT: Jděte do středu seznamu.
>> JASON Hirschhorn: Tom.
Přejít na polovině seznamu.
A navazující otázka, co budeme dělat, až budeme na
střední seznamu?
>> STUDENT: Do kontrolu, zda, který je počet hledáte.
>> JASON Hirschhorn: Výborný.
Jděte doprostřed seznamu a zkontrolujte, pokud naše hodnota je tam -
fantastické.
Měl někdo něco jiného to bylo něco jiného, ​​než tohle?
To je přesně to pravé.
>> První věc, kterou děláme v binárním vyhledávání , je jít do středu seznamu a
zkontrolujte, zda je naše hodnota je tam.
Takže předpokládám, že pokud naše hodnota je tam, co budeme dělat?
>> STUDENT: Vracíme se k nule [neslyšitelný].
>> JASON Hirschhorn: Jo, pokud naše hodnota je tam, to jsme zjistili.
Takže můžeme říci nějaký způsob, nicméně toto Funkce je definována, řekneme uživateli
jsme ho našli.
Pokud to tam není, i když, to je kde se to dostane složité.
Takže pokud to tam není, někdo jiný, kdo pracoval na binární vyhledávání nebo
má představu o tom teď, co budeme dělat?
>> STUDENT: Otázka.
>> JASON Hirschhorn: Ano?
>> STUDENT: Je pole již řazeno?
>> JASON Hirschhorn: Ano, my jsme za předpokladu, že Pole je již řazeno.
>> Žák: Takže pak budete muset zkontrolovat, zda hodnota, kterou vidíte, je větší než
hodnota, kterou chcete, můžete přesunout do středu druhé poloviny.
>> JASON Hirschhorn: Takže když střed Seznam je větší než to, co jsme
hledáte, pak my, co?
Stěhujeme kde?
>> STUDENT: Chcete-li přejít na polovina seznamu s
čísla nižší, než je.
>> JASON Hirschhorn: Takže budeme volat, že levá.
Takže pokud prostřední je větší, můžeme hledat levé polovině seznamu.
A pak hledání, co mám na mysli vyhledávání?
>> STUDENT: [neslyšitelné].
>> JASON Hirschhorn: Jdeme do středu.
Vlastně jsme opakovat tuto věc.
Jdeme zpátky přes naše smyčce while.
Dám vám ten poslední -
jinak, v případě, prostřední je menší než to, co děláme, co děláme tady?
>> STUDENT: Jděte doprava.
>> JASON Hirschhorn: Hledat právo.
To vypadá dobře, ale někdo cokoliv, co nám může chybět nebo
něco jiného, ​​že jste dal v pseudo-kódu?
Takže to je to, co máme tak daleko.
I když délka seznamu je větší než nula, budeme pokračovat
do poloviny seznamu a zkontrolujte, zda naše hodnota je tam.
>> Je-li střední hodnota je vyšší, budeme hledat vlevo, jinak v případě, že střed je
méně, budeme hledat právo.
Takže jsme všichni měli nějakou znalost termíny, které používáme v informatice
a nástroje máme.
Ale budete již všimnout, že jsme mluví v angličtině, ale zjistili jsme,
Spousta věcí, které se zdálo map na nástroje máme v našem kódování sadě nářadí.
Takže hned bat, nejsme bude ještě vlastně kód.
>> Co vidíme zde v angličtině, že mapy na co se můžeme napsat v jazyce C?
>> STUDENT: Zatímco.
>> JASON Hirschhorn: Zatímco.
Takže to, když tady Mapy na to, co?
>> STUDENT: while.
>> JASON Hirschhorn: while?
Nebo možná, obecněji, smyčka.
Chceme udělat něco znovu a znovu.
Takže jdeme na kód smyčky.
A my už víme, protože jsme udělali to párkrát a my
mají spoustu příkladů tam, jak vlastně psát
tento index pro smyčce.
Tak to by mělo být docela snadné.
Měli bychom být schopni se dostat, že začal docela rychle.
>> Co ještě můžeme vidět tady?
Jaké další struktury syntaxe, věci že jsme obeznámeni s v C, my
Již máte pocit Based off slov jsme použili?
Ano, Anna?
[Neslyšitelný]
jen srandu.
Anna, jděte do toho.
>> STUDENT: Je-li a jinde.
>> JASON Hirschhorn: Je-li a jinde - tady.
Tak co ty vypadají?
>> STUDENT: v případě jiného prohlášení.
>> JASON Hirschhorn: Jo, podmínky, že jo?
Takže budeme pravděpodobně muset napsat nějaké podmínky.
A opět, i když možná matoucí Za prvé, mají obecně smysl nyní
o tom, jak psát a podmínky Syntaxe podmínky.
A když ne, jsme jen vyhledat Syntaxe podmínky, vyjímání a vkládání
že, protože my víme, Zde je třeba podmínku.
Jakékoliv další věci, které vidíme, že mapy na věci, které bychom mohli potřebovat v C?
Jo, Aleha?
>> STUDENT: To by mohlo být zřejmé, jen o kontrolu, zda
hodnota se rovná něco.
>> JASON Hirschhorn: Tak jak jsme se zjistit a - tak jděte do středu seznamu
a zkontrolujte, zda naše hodnota je tam?
Jak to uděláme v C?
Co je syntaxe pro to?
>> STUDENT: Rovná, rovná.
>> JASON Hirschhorn: Rovná, rovná.
Takže tato kontrola se pravděpodobně bude se být rovná, rovná.
Takže budeme vědět, že potřebujeme, aby někde.
A skutečně, nejen v psaní, vidíme ty ostatní věci.
Budeme muset udělat nějaké Operátory porovnání tam -
fantastické.
Takže to vlastně vypadá, a a velký, jsme nenapsal
Slovo C kódu ještě.
Ale máme mentální model, dolů prostřednictvím přednášek a krátkých filmů.
>> Napsali jsme pseudo-kódu jako skupina.
A už máme 80% ne-li 90% z toho, co musíme udělat.
Nyní, jen je třeba kódovat to, což je opět
netriviální problém k řešení.
Ale aspoň jsme přilepená na logice.
Alespoň teď, když jdeme do úředních hodinách, Mohu říci, já vím, co potřebuji
dělat, ale můžete připomenout, mi syntaxe?
Nebo i když úřední hodiny jsou přeplněné, vám Může Google pro syntaxi, spíše
než je přilepená na logice.
>> A opět, spíše než se snažit vyřešit logika a problémy syntaxe všechny
najednou, je často mnohem lepší rozbít ty dva pevné problémy se do
dva z nich více zvládnutelné a to pseudo-kódu jako první, a pak kód v jazyce C.
Takže pojďme se podívat, co jsem udělal pro pseudo-kódu dopředu.
>> I když délka seznamu je větší než nula, podívejte se na středu
seznamu.
Pokud je číslo nalezeno vrátil hodnotu true, jinak Pokud je číslo vyšší, hledání vlevo.
Else if číslo nižší, hledání právo, vrátí false.
Takže to vypadá skoro identické, ne-li téměř totožný s tím, co jsme napsali.
Vlastně, Tome, co jsi řekl jako první, lámání uprostřed seznamu a pokud
počet nalezeno do dvou výkazech je vlastně to, co jsem udělal.
>> Kombinovaný jsem je tam.
Měl jsem poslouchal jste poprvé.
Takže to je pseudo-kódu máme.
Pokud chcete, aby se, je mi líto, přejděte zpět k naší původní problém.
Pojďme kód binary.c.
Takže realizovat iterativní verze binární vyhledávání pomocí následujících
Deklarace funkce.
>> A nemusíte kopírovat to se jen zatím.
Já jsem vlastně jít otevřít až tady binary.c.
Takže tam je deklarace funkce ve středu obrazovky.
A uvidíte, vzal jsem pseudo-kódu ze na mé straně, ale téměř totožný
na to, co jsme napsali, a dal, že pro vás.
Takže teď, pojďme pět minut kódovat tuto funkci.
>> A opět, pokud máte nějaké dotazy, zvednout ruku, dejte mi vědět, budu
přijít kolem.
>> STUDENT: [neslyšitelné].
>> JASON Hirschhorn: Tak jsem vzal binární Definice hledání na
Nahoru na lince 12.
To je to, co jsem dostal k mému snímku.
A pak se to všechno pseudo-kód jsem zkopírovat a vložit ze snímku,
pseudo-kód slide.
Pořád jsem neslyšel [neslyšitelný].
>> Takže, pokud jste dokončili svůj implementace, chci to zkontrolovat.
I e-mailem vám soubor helpers.h dříve v této třídě.
A to bude k dispozici on-line, jakož ke stažení pro lidi sledují
Tentokrát část zpoždění.
A já jsem jen použil obecný distribuci Kód z pset3.
Tak jsem vzal find.C, používat svůj helpers.h soubor spíše než soubor helpers.h
, který je uveden v distribuční kódu.
>> A musel jsem udělat ještě jednu změnu v find.C spíše než volání jednoduše
hledání, volejte binary_search.
Takže pokud si chcete vyzkoušet své kód, vím, že to je, jak to udělat.
Ve skutečnosti, když budeme spuštění tohoto kódu právě teď, právě jsem udělal kopii
můj pset3 adresář, opět odloženy Pomocníci soubory a pak dělal, že
změnit find.C volat binary_search spíše než jednoduše vyhledávat.
>> JASON Hirschhorn: Ano.
Máte dotaz?
>> STUDENT: Nevermind.
>> JASON Hirschhorn: Žádné starosti.
Dobře, pojďme začít.
Budeme kódovat to jako skupina.
Jeden další poznámka.
Znovu, toto je lze snadno zaměnit Pro problémů nastavit tři.
Mám helpers.h soubor, který spíše než helpers.h jsme vzhledem,
prohlašuje, binární vyhledávání, bublinu třídění a výběr třídit.
A v find.c si všimnete, on-line, co je to, linka 68, nazýváme binární
hledat spíše než hledání.
Takže znovu, kód, který je k dispozici on-line nebo kód, který jste
vytváření teď lze snadno vyměnit Pro p set 3 podívat se na to.
>> Ale nejprve pojďme kód binární vyhledávání.
Naše funkce prohlášení, se vrací bool.
Bereme celé číslo s názvem hodnotu.
Bereme pole celých čísel volal hodnoty, a vezmeme n být
Velikost pole.
Na řádku 10, přímo tady, mám ostré patří stdbool.h.
Ví někdo, proč to tam je?
Takže co to řádek kódu udělat?
>> STUDENT: To vám umožní použít typ bool návratu.
>> JASON Hirschhorn: Přesně tak.
>> STUDENT: Nebo je to knihovna, která umožňuje použít typ bool návratu.
>> JASON Hirschhorn: Tak ostré patří stdbool.h linka mi něco dává
definice a prohlášení pro věci že jsem dovoleno používat v
tato knihovna.
Takže mezi těmi, se říká, že je Tento typ tzv. bool, a to může být
true nebo false.
Tak to je to, co to dělá vedení.
A kdybych neměl tu linku, bych dostat do problémů pro psaní této
slovo tady, bool, hned tam.
Přesně tak.
Tak jsem třeba, že v tomto kódu.
OK.
Takže to, opět, je iterativní verze, není rekurzivní jeden.
Tak pojďme začít.
>> Začněme s tím prvním řada pseudo kódu.
A doufejme, že budeme - nebo ne snad.
Chystáme se jít po místnosti.
Půjdeme řádek po řádku, a já vám pomůže můžete přijít na řádek, který potřebujeme
napsat jako první.
Takže zatímco délka seznamu je větší než nula.
Začněme v přední části.
Co řádku mám napsat Zde, v kódu?
>> STUDENT: Zatímco závorka n je větší než 0.
>> JASON Hirschhorn: Zatímco n je vyšší než 0.
Tak n je velikost seznamu, a budeme kontrolovat, zda -
>> [vložením VOICES]
>> JASON Hirschhorn: - Prosím?
>> STUDENT: Jak můžeme vědět, že n je velikost seznamu?
>> JASON Hirschhorn: Omlouvám se.
Podle specifikace pset, hledání a druh funkce, které potřebujete psát,
n je velikost seznamu.
Zapomněl jsem se mu vysvětlit, že tady.
Ale ano. n je velikost seznamu, v tomto případě.
Takže, když n je větší než 0.
OK.
To se může ukázat jako trochu problematické i když, pokud to půjde dál.
Protože budeme i nadále vědět, velikost seznamu v celém tomto
funkce, ale říct, že jsme začít s řadou 5 čísel.
A my jsme projít a my máme Nyní ji snížil na
pole 2 čísel.
Což 2 celá čísla, je, že?
Velikost je 2 nyní, že chceme podívejte se na, ale 2 je, že?
Má to smysl, na tuto otázku?
>> OK.
Budu ho zeptat znovu.
Takže začneme s tohoto pole 5 celá čísla, a n se rovná 5, ne?
Budeme projít zde.
budeme pravděpodobně změnit velikost, Dobře, jak se věci dál.
Což je to, co říkáme, že chceme dělat.
Nechceme hledat plné věc znovu.
Tak, že bychom to změnit na 2.
Bereme půl seznam, který je divné.
Takže jen vybrat 2.
Takže teď n se rovná 2.
Omlouvám se za chudé suché markery vymazat.
Je to tak?
A my prohledávání seznamu opět se seznamem velikosti 2.
No, naše pole je stále o velikosti 5.
Říkáme, že chceme jen, aby hledat 2 místa v něm.
Tak toho 2 místa jsou?
>> Má to smysl?
Jsou levé 2 místa?
Jsou správné 2 místa?
Jsou ve středu 2 body?
Jsme prolomili problém dolů, ale my vlastně nevím, která část
problém, jsme stále při pohledu na, jen tím, že tyto dvě proměnné.
Takže potřebujeme trochu více než, když n je větší než 0.
Musíme vědět, kde to n je v našem aktuálním poli.
>> Takže nemá někdo změnit na této trati?
Většina z této řady je naprosto správné.
Je tu další přírůstek?
Můžeme vyměnit něco z pro n do aby tuto linii o něco lepší?
Mm-hm?
>> STUDENT: Můžete inicializovat proměnnou jako délku až n, které vám pak mohou být použity
později ve funkci?
>> JASON Hirschhorn: Tak inicializovat proměnné délky N,
a budeme používat později?
Ale pak jsme se jen aktualizovat délku a my ještě narazíte na tento problém, kde jsme
snížit délku našeho problému, ale nikdy nevíme, kde vlastně,
že délka mapy na.
>> STUDENT: Není to nestane později, když říkáš, hledání vlevo,
hledat pravdu?
Budeš chodit na různé oblast vašeho -
>> JASON Hirschhorn: Chystáme se jít do prostoru, ale jak víme,
které mají jít?
Pokud máme jen pole a to n, jak víme, kde
jít na v poli.
V zadní, ano?
>> STUDENT: Máte, jako, nižší mez a horní mez proměnné nebo
něco takového?
>> JASON Hirschhorn: OK.
Takže to je další nápad.
Spíše než jen sledování velikost, můžeme sledovat nižší a
horní mez proměnné.
Tak jak vypočítat velikost od dolní mez a horní mez?
>> [vložením VOICES]
>> JASON Hirschhorn: odčítání.
A také sledování nižší vázán a horní mez, dejte nám vědět,
jsme vyhledávání tyhle dva?
Jsme hledání tyhle dva tady?
Jsme vyhledávání prostřední dva?
Pravděpodobně ne prostřední dva, protože to, ve skutečnosti, je binární vyhledávání.
Ale teď budeme mít možnost získat velikost, ale také hranice pole.
V podstatě, pokud máme obra telefonní seznam, jsme to rip na polovinu.
Nyní víme, kde to menší telefonní seznam.
Ale my nejsme ve skutečnosti kopírování telefonní seznam na polovinu.
Stále potřebujeme vědět, kde nové hranice našeho problému je.
Má někdo nějaké otázky, o tom?
Ano?
>> STUDENT: Bude to fungovat vytvořením variabilní, i, že pak stačí posunout
pozice i vzhledem k jeho aktuální pozice a délka, n?
>> JASON Hirschhorn: A co je i?
>> STUDENT: Jak jsem byl jako druh -
Jako byste inicializovat i být střední poloha pole.
A pak, v případě, že hodnota na pozici i v střed pole ve zjištěno,
být nižší než hodnoty, kterou provede, i nyní se délka pole, a
hodnota i děleno 2.
Jako vidět, můžete přesunout i -
>> JASON Hirschhorn: Správně.
>> STUDENT: - do -
>> JASON Hirschhorn: Tak jsem si téměř pozitivní, že bude fungovat.
Ale jde o bytost, budete potřebovat dva kousky informací zde.
Můžete to udělat s počátkem a koncem, nebo si můžete udělat to s velikostí, a pak
někteří značka.
Ale vy potřebujete dva kusy odtud informací.
Nemůžete dostat se jen jeden.
Znamená to, že má smysl?
>> Takže jdeme projít, a budeme dělat, [neslyšitelný]
a vytvořit nějaké značky.
Tak co píšete ve svém kódu?
>> STUDENT: Jen jsem řekl, int mez jeden je rovno 0.
>> JASON Hirschhorn: Říkejme že int, začíná.
>> STUDENT: OK.
>> JASON Hirschhorn: To dělá větší smysl pro mě.
A?
>> STUDENT: Řekl jsem, myslím, int konec.
>> JASON Hirschhorn: int končí.
>> STUDENT: Myslím, n minus 1, nebo něco takového.
Jako poslední prvek.
>> JASON Hirschhorn: Takže jsi napsal, int začíná se rovná 0, středník, a int
konec se rovná n minus 1, středník.
Takže v podstatě, co děláme zde, 0 na první pozici.
A jak víme, v polích, nejdou až n, jdou až n minus 1.
Takže máme nějaké hranice našeho pole.
A tyto počáteční odhady se stalo, že počáteční hranice našeho problému.
OK.
Tak to zní dobře.
Pak, pokud se vrátíme k této linii, zatímco délka seznamu je větší než 0,
co, místo N, by měl dáme sem?
>> STUDENT: Napište ukončení minus začátek.
>> JASON Hirschhorn: Při ukončení minus začátek je větší než 0?
OK.
A co jsme mohli, pokud bychom chtěli aby to trochu hezčí, co
jiného jsme mohli dělat?
Pokud bychom chtěli vyčistit Tento kód se trochu?
Jak se můžeme zbavit 0?
To je jen otázka stylu.
Je to právě teď správné.
>> STUDENT: Ending není rovná začátek?
>> JASON Hirschhorn: Můžeme dělat, co?
>> [vložením VOICES]
>> STUDENT: Ukončení je větší?
>> JASON Hirschhorn: Jo.
Můžeme jen dělat, když končí je větší než začátek.
Správně.
Přidali jsme začátek na druhou stranu na to, že jsme se zbavili 0.
Tak to prostě vypadá trochu čistší.
OK.
Takže, zatímco délka seznamu je 0, jsme psali , že, zatímco konec je větší
než na začátku.
Chystáme se dát na naše potřeby složené závorky, a pak první věc,
chceme udělat, je podívat se na je v malém seznamu.
Vy?
Můžeš mi dát -
>> STUDENT: Pokud závorka Hodnota hranatá závorka -
>> JASON Hirschhorn: Pokud závorky hodnota hranatá závorka.
>> STUDENT: Ending děleno 2.
>> JASON Hirschhorn: Ukončení?
>> STUDENT: Vidím problém s -
>> JASON Hirschhorn: OK.
No, podívejte se na středu.
Jak můžeme vědět, co je uprostřed?
Jo.
Takže dovolte mi odstranit tento kód.
Jak můžeme vědět, co je uprostřed?
V ničem, pokud máte začátek a konec, jak si najít
střední?
>> STUDENT: Ty průměr.
>> STUDENT: Můžete přidat dohromady a pak -
>> JASON Hirschhorn: Přidat jim dohromady a pak?
>> STUDENT: A vy průměr.
Rozdělte ji 2.
>> JASON Hirschhorn: Přidat jim společně a vydělte 2.
Takže int střední rovná?
Tome, můžete mi to dát?
>> STUDENT: Začátek a konec -
>> JASON Hirschhorn: Začátek a končí.
>> STUDENT: Vše, držák, děleno 2.
>> JASON Hirschhorn: Vše v závorkách, děleno 2.
Tak to mi dává střed nic, opravit?
>> STUDENT: Také je potřeba zaokrouhlit nahoru.
>> JASON Hirschhorn: Co si Tedy, musím sehnat to?
>> [vložením VOICES]
>> STUDENT: Vzhledem k tomu, jestli je to divné číslo, pak je to jako -
>> JASON Hirschhorn: Dobře, OK.
Tak jsem si to mohl zaokrouhlit nahoru.
Ale jestli je to liché číslo, 5, mohu přičemž jeden od středu.
Nebo jestli je to sudé číslo, místo, to je lepší případ.
Pokud je to 4, jen máme 4, můžu vzít První "střední", citace, konec citátu nebo
Druhý "střední" jeden.
Buď bude pracovat pro binární vyhledávání, takže nemám skutečně potřebují, aby to zaokrouhlovat.
Ale je tu ještě jedna věc, kterou jsem je třeba se podívat na tento řádek.
Mohli bychom si to neuvědomujete ještě, ale vrátíme se k ní.
Protože tato linka ve skutečnosti stále potřebuje ještě jednu věc.
>> Ale tak daleko, psali jsme čtyři řádky kódu.
Máme naši začátek a koncovou značkou.
Máme while, který mapuje na přímo na naši pseudokódu.
Díváme se na středu, který mapuje přímo na našem pseudokódu.
Řekl bych, že to jde do středu seznamu, tento řádek kódu.
A pak, jednou půjdeme do středu seznam, další věc, kterou musíme udělat,
je zjistit, zda naše hodnota je zde pro pseudokódu jsme psali již dříve.
>> Tak jak jsme se zjistit, zda naše hodnoty je ve středu seznamu?
Vy.
Proč jste to udělal?
>> STUDENT: Pokud je naše hodnota je je ve středu je rovna
co jsme si stanovili -
Myslím equal to -
>> JASON Hirschhorn: Je -
OK.
>> STUDENT: Nejsem si jistý, co Proměnná hledáme
protože i když, je to, že -
>> [vložením VOICES]
>> STUDENT: [neslyšitelné].
>> JASON Hirschhorn: Přesně tak.
Na deklaraci funkce, hledáme hodnotu.
Takže jsme hledali hodnotě v poli hodnot.
Takže ty jsi naprostou pravdu.
Budete dělat, pokud je otevřené závorka hodnota držák střední zavřeno držáku rovná
se rovná hodnotě, a uvnitř Co musíme udělat?
Pokud se naše hodnota je tam, co to musíme udělat?
>> [vložením VOICES]
>> STUDENT: Návrat na nulu.
>> JASON Hirschhorn: Vrací true.
>> STUDENT: Vrací true.
>> JASON Hirschhorn: Michael, co tento řádek dělat?
>> STUDENT: [neslyšitelné] program spusťte její průběh, a to je u konce, a
jste to, co musíte udělat?
>> JASON Hirschhorn: Program nebo co?
V tomto případě?
>> STUDENT: funkce.
>> JASON Hirschhorn: funkce.
A tak, pro návrat na cokoliv tzv. a dát mu hodnotu, to je pravda.
Přesně tak.
Hlavní.
Co je návratový typ z hlavní, Michael?
>> STUDENT: int, integer?
>> JASON Hirschhorn: int, přesně tak.
Číslo.
To byla jen otázka, aby se ujistil, vy jste byli na vrcholu.
Co je to obvykle vrátí, jestliže všechny věci fungují dobře?
>> STUDENT: Zero.
>> JASON Hirschhorn: Zero.
Přesně tak.
>> STUDENT: Pokud je to jen vrátí hodnotu true, není informace jsou uvedeny
o tom, co -
Oh, je to jen říká, že hodnota je uvnitř pole.
>> JASON Hirschhorn: Přesně tak.
Tento program není poskytování informací kde přesně je hodnota.
Je to jen říká, ano, jsme zjistili, to, nebo ne, jsme nenašli ho.
Takže pokud číslo nalezeno, vrátí hodnotu true.
No, vlastně jsme právě udělali, že opravdu rychle, že jeden řádek kódu.
Takže budu pohybovat, že řada pseudokódu.
>> STUDENT: Nepotřebujeme pro změnu pole?
Mělo by být hodnoty, ne hodnoty, ne?
>> JASON Hirschhorn: Omlouvám se.
Děkuju.
>> STUDENT: Jo.
>> JASON Hirschhorn: Tento řádek by měly být hodnoty.
Přesně tak.
OK.
Takže jsme se podíval na střední seznamu.
Pokud je číslo nalezeno návrat pravda.
Pokračování na naší pseudokódu, pokud prostřední je větší, hledání vlevo.
Tak jsem tady, pokud počet vyšší, hledání vlevo.
Constantine, můžete dát me tento řádek kódu?
>> STUDENT: Pokud je hodnota uprostřed -
>> JASON Hirschhorn: Takže pokud hodnota -
pokud je otevřené závorka hodnoty držák střední závorka -
>> STUDENT: Je menší než hodnota?
>> JASON Hirschhorn: Je menší než.
>> STUDENT: Méně než hodnota.
>> JASON Hirschhorn: Hodnota.
No, vlastně, kterou chcete zkontrolujte, zda je číslo -
Promiňte.
To je trochu matoucí.
Ale jinak, pokud je číslo v uprostřed seznamu je větší.
>> STUDENT: Oh, OK.
>> JASON Hirschhorn: budu změnit.
Jinak v případě, střední vyšší, jsme chcete vyhledávat doleva, OK?
A co budeme dělat dovnitř to, zda podmínka?
>> STUDENT: Mohu si udělat malou změnu stav, změňte ji na else if?
>> JASON Hirschhorn: Else-li?
OK.
Takže tento kód bude provádět zhruba stejný.
Ale pěkná věc, o použití, pokud jiný v případě, jinak v případě, nebo v případě, else if, jinak
Znamená to, že pouze jedna z nich bude být kontrolovány, ne všechny tři z nich,
potenciálně.
A že je to trochu hezčí na počítači, který je
spuštěním programu.
>> Tak [? Constantine,?]
Jsme v tomto řádku, jinak, pokud jsou hodnoty, držák střední závorka
je větší než hodnota.
Co musíme udělat?
Musíme hledat vlevo.
Jak to uděláme?
Chystám se vám start.
>> Máme tyto dvě věci zvané začíná a končí.
Takže to, co potřebuje, aby se stalo na začátek?
Pokud chcete vyhledávat levé straně Seznam, dostaneme naši současnou začátek.
Co musíme udělat?
>> STUDENT: My nastavit začátek do poloviny a 1.
>> JASON Hirschhorn: Takže když jsme vyhledávání vlevo?
>> STUDENT: Je nám líto, střední minus -
takže konec bude střední minus 1 a začátek -
>> JASON Hirschhorn: A co se stane na začátku?
>> STUDENT: To zůstane stejný.
>> JASON Hirschhorn: Tak význam zůstává stejný.
Pokud budeme hledat na levé straně, my jsme použití stejného začátek -
Přesně tak.
A konec?
Omlouváme se, ale to, co dělá končí opět v rovnováze?
>> STUDENT: Střední minus 1.
>> JASON Hirschhorn: Střední minus 1.
A teď, proč minus 1, a to nejen střední?
>> STUDENT: uprostřed je z obraz už, protože jsme měli
zkontrolovat, že je to venku?
>> JASON Hirschhorn: To je Přesně tak.
Střed je z obrázku.
Jsme již zkoumali střed.
Takže nechceme, "střed", citovat konec citátu, aby i nadále v
pole, které se díváme.
Tak to je fantastický.
>> Else if hodnoty držák střední větší než hodnota končící rovná
střední minus 1.
Jeff, co o tomto posledním řádku?
>> STUDENT: Else.
Hodnoty prostřední je menší než hodnota?
>> JASON Hirschhorn: Budeme Dáváš mi víc.
Takže pokud nechcete, aby mě -
>> STUDENT: Takže začátek by střední plus 1.
>> JASON Hirschhorn: Začátek rovná střední plus 1, opět, pro stejnou
Důvod, že Constantine nám dal již dříve.
A na konci, který není uveden me řádek kódu ještě?
Return false, Aleha, co budeme psát tady?
>> STUDENT: return false.
>> JASON Hirschhorn: Návrat false.
A musíme to udělat, protože pokud bychom nenajdete to, musíme říci, že jsme
nenašel.
A my jsme řekli budeme vracet bool, takže určitě muset vrátit
bool někde.
>> Takže pojďme se spuštěním tohoto kódu.
Já jsem vlastně bude -
takže jsme v terminálu.
Budeme vyčistit naše okno.
Pojďme Make vše.
Zjistili jsme, že je to jedna chyba.
Tam je chyba na řádku 15, očekává, že středník na konci roku
prohlášení.
Takže to, co jsem zapomněl?
>> STUDENT: středník.
>> JASON Hirschhorn: středník až tady.
Myslím, že to byl Tomův kód.
Takže Tom, [neslyšitelný].
Jen si dělám srandu.
Pojďme udělat, aby vše znovu.
>> STUDENT: Jaké adresáře Dropbox Měli bychom být za to?
>> JASON Hirschhorn: Takže můžete Jen pozor na tohoto bitu.
Ale na druhou stranu, pokud byste chtěli přesunout tento kód do pset3 adresáře vyzkoušet
it out, to je to, co jsem udělal.
Pokud si všimnete zde - Omlouvám se, dobrá otázka.
>> [? LS,?]
Mám tu find.c kód z tohoto týdne distro kódu.
Mám helpers.h.
Mám soubor, aby to jsem vlastně upravovat trochu zahrnout tyto nové
Soubory jsme psaní.
Všechny tohoto kódu bude mít k dispozici, není distribuce kód, ale nový
Ujistěte se soubor, bude nový helpers.h soubor být k dispozici on-line ke stažení.
Opět, tak ty jsou další kódy máme.
>> Tak, aby všichni, na této trati, dělá si, binární, výběr bublina - značky
všechny tři z nich a kompiluje do Tento spustitelný kód najít.
Takže obecně, nechceme se rovnou do check50.
Chceme udělat nějaké testy na vlastní pěst.
Ale stejně tak můžeme urychlit tento kousek, check50 2013 pset3.find přejde
v helpers.c-- moje chyba.
>> Nemyslím si, že právě teď.
Takže jsme vlastně bude spustit kód pro Real.
Usage.find /, víte, co to znamená?
>> STUDENT: Musíte druhý příkazový řádek na něj.
>> JASON Hirschhorn: Potřebuji druhý příkazového řádku.
A podle specifikace, musím zadat, co jsme hledali.
Tak se pojďme podívat na 42 let.
Budeme udržovat ji v tříděný, protože jsme nenapsal funkci třídění ještě -
42, 43, 44.
>> A řízení D nenašel jehla v kupce sena.
To je špatné.
Je to určitě tam.
Zkusme něco jiného.
Možná je to proto, že jsem si že na začátku.
>> Pojďme udělat, 41, 42, 43.
Tam jdeme.
Je to našel.
Řekněme to na konci teď, jen takže můžeme být důkladné -
40, 41, 42.
Nenašli jehlu.
Takže jsem se zmínil již dříve.
Bohužel, toto věděl jsem, se bude dít.
>> Ale pro pedagogické účely, to je dobré prozkoumat.
To nefunguje.
Z nějakého důvodu nemůže najít.
Víme, co je tam, ale nejsme najít.
Takže jedna věc, kterou můžeme udělat, je jít přes GDB ji najít, ale nemá nikoho,
aniž by prostřednictvím GDB, mají Pocit, kde jsme to podělal?
[? Madu? ?]
>> STUDENT: Myslím, že by to mohlo být, když končí se rovná začátku, a to je
jen seznam jeden prvek.
Pak to prostě ignoruje místo skutečně to kontrole.
>> JASON Hirschhorn: To je Přesně tak.
Při ukončení se rovná začátku, my ještě prvek v našem seznamu?
>> STUDENT: Ano.
>> JASON Hirschhorn: Ano, ve skutečnosti jsme mají jeden a pouze jeden prvek.
A, která bude s největší pravděpodobností stane, když, dle kódu jsme testovali, jsme na
přední kupce sena nebo konec kupce sena.
To je místo, kde začátek a konec se bude rovnat
jeden, s binární vyhledávání.
Takže v těchto dvou případech to nebude fungovat, proto, že konec byl roven začátku.
>> Avšak v případě, ukončení se rovná začátku, to while provést?
To není.
A mohli jsme kontrolovat že opět přes GDB.
Takže, jak můžeme opravit tento kód, protože kdy při ukončení se rovná
začátek, chceme také tento while spustit.
>> Takže to, co oprava můžeme udělat na linku 18?
>> STUDENT: [neslyšitelné] je větší než nebo rovno.
>> JASON Hirschhorn: Přesně tak.
I když konec je větší než nebo rovna na začátek.
Takže teď jsme se ujistěte se, že si, že roh případ na konci.
A podívejme se.
Pojďme spustit tento ještě jednou.
>> Pojďme udělat vše.
Opět platí, že budete mít jen postupujte podle zde.
Najděte 41 tentokrát.
Jen aby to v souladu.
>> Najděte 42.
Řekněme to na začátku -
42, 43, 44.
Našli jsme ho.
Takže to byla opravdu změna jsme potřebovali udělat.
>> To bylo hodně kódování my právě udělal, binární vyhledávání.
Má někdo nějaké otázky před I dál do řádků, které jsme udělali v roce
binární vyhledávání, nebo jak jsme přišli z toho, co jsme zjistili?
Než budeme pokračovat, chci také upozornit se, že i velké, jsme zmapovali
náš pseudo-kód, kdo jeden na našeho kódu.
>> My jsme si to ošemetná věc přijít na to, s
začíná a končí.
Ale měl byste na to přišel, si by psali do značné míry
totožný kód, s výjimkou ty horní dva řádky.
A pak byste si uvědomili, když jsi ho kontrol a případů, které
budete potřebovat něco jiného.
Takže i když jste následovali náš pseudo-kód linky na linku, by jste
dostali všichni ale dva řádky kód, který potřeboval napsat.
>> A byl bych ochoten se vsadit, že vy by si všechno vymyslel, že se
docela rychle, že jste potřebovali dát nějaké značky tam přijít
, kde jste byli.
To je opět moc dělat pseudo-kódu dopředu.
Takže, co můžeme udělat logiku jako první, a pak můžeme starat o syntaxi.
>> Kdyby jsme byli zmateni o logice a zároveň se snaží napsat tento kód v C,
bychom se dostali všechno zpackal.
A pak bychom se vyptávat logika a syntaxe a záběru
je všechny dohromady.
A my bychom se ztratit v tom, co se může rychle stát
velmi obtížný problém.
Takže pojďme dál teď na výběr druhu.
>> Máme 20 minut života.
Takže mám pocit, že už nebude moci dostat přes všechny volby druhu
a bubble sort.
Ale pojďme alespoň pokus dokončit výběr druhu.
Takže realizovat výběr třídit pomocí Následující deklarace funkce.
>> Znovu, toto je převzato z problém nastavit specifikaci.
Int hodnoty je konzole, je pole celých čísel.
A int.n je velikost tohoto pole.
Výběr řazení se děje třídit toto pole.
>> Takže na naší mentální model výběru třídění, vytáhneme -
Nejprve jsme se projít v seznamu jako první čas, najít nejmenší číslo,
dát to na začátku, najít druhé nejmenší číslo, vložte jej do
Druhé místo, chceme-li třídit ve vzestupném pořadí.
Nebudu vás nutí psát pseudo-kód právě teď.
>> Ale dříve, než budeme dělat kód jako třídy, ve pět minut budeme psát
pseudo-kód, takže máme nějaký smysl kde jedeme.
Takže pokus o zápis pseudo-kódu na vlastní pěst.
A pokuste se obrátit, že pseudo-kódu do kódu.
Budeme dělat, že jako skupina za pět minut.
>> A samozřejmě, dejte mi vědět, jestli Máte-li jakékoli dotazy.
>> STUDENT: To, že?
>> JASON Hirschhorn: Podívejte se, jak daleko se můžete dostat do dalších dvou minut.
Chápu, že ne být schopni dokončit.
Ale půjdeme na to jako skupina.
>> Jste všichni kódování, takže [neslyšitelné], takže jsem Omlouvám se, pozastavit, co děláte.
Ale pojďme projít to jako skupina.
A opět, binární vyhledávání, všichni dávají mi jeden, ne-li více řádků kódu.
Děkuji vám za to.
Chystáme se dělat totéž zde, kód společně jako skupina.
>> Takže výběr třídit - pojďme napsat některé rychlé pseudo-kódu.
Na duševní modelu, může někdo dát mi první řádek pseudo-kód, prosím?
Co chci dělat?
>> STUDENT: Zatímco seznam je mimo provoz.
>> JASON Hirschhorn: OK, zatímco Seznam je mimo provoz.
A co myslíš tím "mimo pořadí?"
>> STUDENT: Zatímco [neslyšitelné]
nebyla uvedena.
>> JASON Hirschhorn: Zatímco seznam je mimo provoz, co budeme dělat?
Dej mi druhou linku, prosím, Marcus.
>> Žák: Takže najít další nejmenší číslo.
To bude odsazen.
>> JASON Hirschhorn: Takže zde další nejmenší číslo.
A pak někdo jiný?
Jakmile najdeme další nejmenší číslo, co budeme dělat?
Budu říkat najít nejmenší číslo.
To je to, co chceme dělat.
>> Takže najít nejmenší číslo.
Tak co budeme dělat?
>> STUDENT: [neslyšitelné] na začátek.
>> JASON Hirschhorn: Je nám líto?
>> STUDENT: umístěte jej do začátku seznamu.
>> JASON Hirschhorn: Tak umístěte jej do začátek seznamu.
A co budeme dělat na věc , která byla na začátku
seznamu, ne?
Jsme přepsání něco.
Tak kde jsme to dát?
Jo, Anna?
>> STUDENT: Kde nejmenší číslo bylo?
>> JASON Hirshhorn: Tak si na začátek seznamu, pokud
Nejmenší číslo je.
Takže zatímco seznam je mimo provoz, najít nejmenší číslo, vložte ji do
začátek seznamu, dát začátku seznamu, kde
Nejmenší číslo je.
Marcusi, můžete přeformulovat tento řádek zatímco seznam je mimo provoz?
>> STUDENT: Zatímco počty nebyly řazeny?
>> JASON Hirshhorn: OK, tak aby vědí, že čísla nebyly
dále, co musíme udělat?
Kolik potřebujeme projít tohoto seznamu?
>> Žák: Takže myslím, že pro smyčce, nebo zatímco, zatímco kontroluje čísla je méně
než je délka seznamu?
>> JASON Hirshhorn: OK, to je dobré.
Myslím, že misphrased moje otázka špatně.
Jen jsem se snažil dostat na budeme muset jít
celý seznam.
Takže zatímco seznam je mimo provoz, pro mě je těžké zmapovat na.
Ale v podstatě, to je jak Myslím, že o tom.
Projděte si celý seznam, najít nejmenší číslo, vložte ji do
začátek - vlastně, máš pravdu.
Pojďme si je oba.
>> Takže zatímco seznam je mimo provoz, se musí projít celý seznam
jednou, najít nejmenší číslo, místo se na začátku seznamu, dal
začátku seznamu, do kterého nejmenší počet byl, a pak v případě,
Seznam je stále mimo provoz, máme musím jít přes tento
proces znovu, ne?
To je důvod, proč volba druhu, Big-O runtime výběrového druhu, někdo?
>> STUDENT: n na druhou.
>> JASON Hirshhorn: n na druhou.
Vzhledem k tomu, jako Marcus a já jsem si uvědomil, tady, budeme muset
projít Seznam počet opakování.
Takže prochází něco délka n n kolikrát
je ve skutečnosti n na druhou.
>> Tak toto je naše pseudokódu.
To vypadá velmi dobře.
Má někdo nějaké otázky, o pseudokódu?
Protože ve skutečnosti volba třídění by pravděpodobně Pojďte na jedno-, kód od
pseudokódu.
Takže jakékoliv otázky týkající se Logika pseudokódu?
Prosím, zeptejte se ho hned.
>> Výběr sort - zatímco seznam je venku objednávky, budeme se projít
a najít nejmenší pokaždé a vložte jej do přední části.
Takže zatímco seznam je mimo provoz, může někdo mi dát ten řádek kódu, který
je mi nedal linku kódu ještě, prosím?
Zní to jako co?
>> STUDENT: To je pro smyčce.
>> JASON Hirshhorn: To zní Líbí se mi pro smyčce.
OK, můžete mi dát na smyčce?
Pro -
>> STUDENT: i rovná 0.
>> JASON Hirshhorn: i nebo -
Co nám chybí?
Co se děje tady?
>> STUDENT: Int.
>> JASON Hirshhorn: Přesně tak.
(Int i = 0; -
>> STUDENT: i <n; i + +).
>> JASON Hirshhorn: přibitý, Jeff.
Jedeme do seznamu, ne?
Už jsme viděli, že kód.
Perfect.
Takže pojďme dát naše složené závorky zde.
Chystám se dát některé složené závorky zde.
>> Takže i když je 0, musíme jít celý seznam.
Takže pokaždé, když jsme se projít v seznamu, to, co chceme sledovat?
>> STUDENT: Pokud jsou swapy vyrobeny.
>> JASON Hirshhorn: Hledat nejmenší číslo.
Takže bychom měli pravděpodobně sledovat Nejmenší počet pokaždé.
Takže linka mohu sledovat nejmenšího počtu?
Aleha, jak mohu sledovat stopa něčeho?
>> STUDENT: Začít novou proměnnou.
>> JASON Hirshhorn: Začít novou proměnnou.
Takže pojďme vytvořit proměnnou.
Jaký typ?
>> STUDENT: Int.
>> JASON Hirshhorn: Int.
Říkejme tomu nejmenší.
A co to rovnat, když jsme právě začínáte?
Ještě jsme prošli v seznamu ještě.
Jsme v první části Seznam našich poprvé projít.
Co je to stejné, Nejmenší číslo?
>> STUDENT: Hodnoty i.
>> JASON Hirshhorn: Hodnoty i.
To zní přesně tak, jo?
Nejméně na začátku je tam, kde jsme.
Takže teď máme naše nejmenší, a my potřebujeme projít celý seznam a
porovnat to nejmenší na všechno ostatní.
Takže jsme se projít na seznamu znovu?
Michael?
>> STUDENT: Je třeba, aby se další smyčky for.
>> JASON Hirshhorn: Další pro smyčce.
Pojďme na to.
Dej mi nějaký kód.
>> STUDENT: pro smyčce -
pro nejmenší -
pravý j, dalo by se říct?
= 0, tak, že -
>> JASON Hirshhorn: No, chceme-li projít celý seznam -
>> STUDENT: j <n, j + +).
>> JASON Hirshhorn: Fantastic.
Chystáme se projít pro smyčce znovu.
A jak jsme se najít Nejmenší číslo?
Tom?
Máme aktuální nejmenší číslo, tak jak jsme se najít nový nejmenší?
>> STUDENT: Můžeme zjistit, jestli nejmenší Číslo máme je větší než
hodnoty držák j.
>> JASON Hirshhorn: Takže jestli nejmenší je vyšší než hodnoty držáku j.
Takže pokud náš současný nejmenší je větší než -
Chystám se přesunout tyto dva řádky kódu tam za sekundu.
Protože předtím, než jsme dělat žádné odkládání, jsme musí projít celý seznam.
Takže to pseudokódu by vlastně být mimo, že vnitřní smyčky for.
Takže projít celý seznam.
Pokud je větší než nejmenší Hodnoty j co pak?
>> Žák: Takže nejmenší rovná hodnoty j.
>> JASON Hirshhorn: Fantastic.
Jeden rychlý dotaz -
Poprvé jsme se projít této smyčky, i to bude rovnat 0, j se děje
rovnat 0, jakmile jsme se sem dostali.
Takže budeme se srovnání číslo k sobě.
Je to účinný?
Ne, to opravdu není efektivní.
Tak se naše j muset jít od 0 do n pokaždé?
Máme vždy je třeba zkontrolovat celý seznam?
[Neslyšitelný]?
>> STUDENT: Začněte se i místo.
>> JASON Hirshhorn: j plechovka začít s čím?
>> STUDENT: i.
>> JASON Hirshhorn: j může začít s i.
Takže teď jsme se porovnat začíná s jedním Jsme na.
Ale i pak, je, že efektivní, jak je to možné?
>> STUDENT: i + 1.
>> JASON Hirshhorn: i + 1 se zdá být nejúčinnější, protože
už jsem.
Jsme o tom, že jako Nejmenší v řadě 15.
Chystáme se začít s příští automaticky.
Tak jsme se projít na smyčku.
Půjdeme přes každé době.
Půjdeme přes množství časů.
Nyní jsme se dostali přes Tento vnitřní smyčky for.
Máme nejmenší hodnota uloží.
Musíme jej umístit na začátku seznamu.
Tak jak to mám umístit jej na začátku seznamu?
Co je proměnná, která se týká na začátku seznamu?
Jsme v tomto vnější smyčky for, tak co se týká
začátku seznamu?
>> STUDENT: Hodnoty i.
>> JASON Hirshhorn: Přesně tak.
Hodnoty i je začátek -
nebo líto, ne začátek.
To bylo matoucí.
To je místo, kde jsme na začátku roku netříděný část seznamu.
Takže hodnoty i.
A to, co dělá, že rovné?
>> STUDENT: Nejmenší.
>> JASON Hirshhorn: Hodnoty i rovná co?
>> STUDENT: Nejmenší.
>> JASON Hirshhorn: Nejmenší.
Přesně tak.
Takže jsme ji umístit na začátku seznamu, a teď musíme dát
začátek seznamu, kde nejmenší počet byl.
Tak jak to mám napsat, kde nejmenší počet byl?
Hodnoty čeho?
>> STUDENT: 0.
>> JASON Hirshhorn: malá číslo je na 0?
>> STUDENT: Jo.
>> JASON Hirshhorn: Co když nejmenší číslo bylo na konci
Tento netříděný seznam?
>> STUDENT: Omlouváme se, jaká byla otázka?
>> JASON Hirshhorn: Kde je nejmenší číslo?
Vzali jsme nejmenší a dát to na začíná se tento řádek tady.
>> STUDENT: Měl by mít byla uložena do některé z nich -
>> STUDENT: Hodnoty j.
>> JASON Hirshhorn: No, je to ne nutně hodnoty j.
To ani neexistuje v tomto bodě.
>> STUDENT: Musíte prohlásit, variabilní a dříve
pak přiřadit -
když zjistíte, nejmenší číslo, přiřadit index tohoto čísla se
některé proměnné nebo něco takového.
>> JASON Hirshhorn: Tak může říkáte, že znovu?
>> Žák: Takže, kde jste prohlásil, int nejmenší, měli byste také deklarovat int
Nejmenší index = i, nebo něco takového.
>> JASON Hirshhorn: Tak, kde jsem to pravý nejmenší, měl bych držet nejen sledovat
hodnoty, ale na místě.
int smallest_location = v tomto případ, budeme prostě dělat i.
Musíme vědět, kde to je.
Máme na konci kódu, a my uvědomili jsme měli tušení, kde to bylo.
A tak opět jsme mapování o tento jedna k jedné.
Vy kódování to na vlastní vůle pravděpodobně dostanete na stejný problém.
Jak to sakra mám najít?
A pak si uvědomíte, počkej, já je třeba sledovat, že.
>> Takže v případě, nejmenší je větší než hodnoty j.
Vydali jsme nejmenší rovná hodnoty j.
Co ještě musíme změnit?
Constantin, co jiného dělat musíme změnit?
>> STUDENT: umístění.
>> JASON Hirshhorn: Přesně tak.
Tak mi dej ten řádek kódu.
>> STUDENT: smallest_location = j.
>> JASON Hirshhorn: Přesně tak.
A pak se na konci, chceme-li dal na začátku seznamu, kde
nejmenší počet byl, jak budeme odkazovat na místo, kde
nejmenší počet byl?
Marcus?
>> STUDENT: nejmenší počet byl se nachází na nejmenším místě.
>> JASON Hirshhorn: Takže v hodnotách smallest_location.
A co jsme tam dal?
Začátek seznam, co je to?
>> STUDENT: No, opravdu nevím už proto, že jsme přepsali.
Takže je to jen vyměnili místa z těchto dvou linek?
Pokud přepnete ty dva řádky kolem.
>> JASON Hirshhorn: OK, takže to není už ne, protože jsme znovu linku
než hodnoty i na nejmenší.
Tak jsme přišli o tu počáteční hodnotu.
Takže jste řekl, odkládací tyto dva řádky.
Takže teď dal na začátku seznamu kde nejmenší počet byl.
Takže smallest_location rovná hodnoty i.
To je přesunutí začátku tohoto netříděného část seznamu na
Nejmenší umístění.
A pak do hodnoty i stěhujeme že nejmenší číslo.
>> Dává to smysl, proč jsme musel dělat, že výměnu?
Rádi bychom se přepíše tuto hodnotu - Další věc, kterou pravděpodobně bude mít
přišel a našel v HDP.
Takže jsme se postarali o všechny pseudokódu.
Je ještě něco, co bychom je třeba psát tady?
Může někdo myslet na nic jiného?
>> STUDENT: Jak víte, Až budete hotovi?
>> JASON Hirshhorn: Jak jsme vědět, až budeme hotovi?
Velká otázka.
Tak jak víme, když jsme hotovi.
>> STUDENT: Vytvoření proměnné udržet počet v případě, že je výměna provedena, nebo ne
a projít průchodem.
>> JASON Hirshhorn: OK.
To bude fungovat v bublině druhu.
Ale pro výběr druhu, pokud to neuděláme provést výměnu, která by mohla být jen
protože nejmenší hodnota je v něm své správné místo.
Mohli bychom mít seznam 1, 2, 4, 3.
Podruhé přes my nebude provádět žádné swapy.
Budeme se na číslo 2, ale budeme Stále je třeba jít dál.
Takže se musíme sledovat, kdy jsme hotovi, nebo si prostě chcete jít
až tohle skončí?
>> STUDENT: Můžeme jen tak až je to hotové.
>> JASON Hirshhorn: Můžeme jen jít až je to hotové.
V bublině druhu, máš naprostou pravdu, Jeff a Aleha, s řešením -
Je skvělé sledovat, kolik swapy jste udělali, protože v bublině
třídit, pokud si ve skutečnosti dělat žádné swapy, máte hotovo a můžete třeba snížit vaše
Problém trochu dolů.
Ale pro výběr druhu, jste opravdu jít až do konce roku
Seznam pokaždé kolem.
>> Tak to je, že.
Máme dvě minuty.
Pojďme udělat vše.
Dovolte mi jen otevřené Najděte zde a aby , že jsem ve skutečnosti vyvolání -
Nebudu volat bublinkové třídění.
Změňme to, aby výběr druhu.
aby všechny. / najít.
Pojďme najít 42.
Tentokrát budeme předávat netříděný seznam, protože to by mělo vyřešit
První, na Najít kódu - by měla vyřešit první pomocí našeho třídění funkci a pak
podívejte se na něčem.
Držím palce všem.
>> Ach můj bože.
Whoa, moje srdce tlouklo.
Tak to je správné.
Ve skutečnosti, když jsme běželi to více značně, kód, pokud mohu
říci, je naprosto správné.
Tam jsou některé návrhy, Já bych pro tebe.
Například, 15 a 16 se zdá trochu nadbytečný.
Vypadá to, že nemusíte nutně je třeba uložit jak ty.
Pokud máte nejmenší umístění, Můžete snadno najít nejmenší hodnotu
Jen zadáním hodnoty i.
>> Takže pokud se mi bude třídění kódu, které jsem ve skutečnosti být, bych
pravděpodobně trvat off bod, pokud včetně obou z nich, protože vám
Nemusíte oba z nich.
Pokud máte místo, můžete velmi snadno získat hodnotu.
A zdá trochu divné uložit oba.
Možná, že ani mít pravdu, ale určitě komentovat, že je možná
není stylistický výběr je třeba provést.
Samozřejmě, kód stále běží dobře.
>> Takže bohužel jsme neměli dostat do bublinkové druhu.
Je mi líto, že.
Udělali jsme cílovou výběr druhu.
Má někdo nějaké konečné otázky o výběru druhu?
>> OK, předtím, než vyrazíme, chci tě otevřít svůj prohlížeč Chrome.
Je nám líto, že byl jen do očí bijící zástrčka pro jeden typ internetového prohlížeče.
Můžete otevřít libovolný typ prohlížeče, ale to bude pravděpodobně Chrome.
A jít na to po stránkách -
sayat.me/cs50.
Pokud si nejste psaní na počítači právě teď, jste jasně
nedělám to, Tome.
>> A udělejte to buď přímo nyní nebo v další hodině -
dej mi nějakou zpětnou vazbu.
To je jen část dvě.
Máme mnoho víc spolu, tak jsem mají velký prostor pro zlepšení.
Doufám, že jsem také dělal některé věci dobře.
Takže si můžete udělat cítím tak špatné, ale pokud budete také chtít, aby mi smajlík
tvář, ocenil bych, že stejně.
Vyplňte že palců
>> A vlevo o jednu minutu že byl tři týdny.
Já budu stát venku trochu Máte-li nějaké otázky.
Uvidím vás chlapy přednáška zítra.