>> [Musiikkia]
>> ANDI Peng: Tervetuloa viikko 6 §.
Me poikkesi meidän vakio kohta aikaa tiistaina
iltapäivällä tämän ihanan sunnuntaiaamuna.
Kiitos kaikille, että liittyi minulle tänään, mutta vakavasti,
aplodit.
>> Se on aika iso ponnistus.
Melkein ei edes tee sitä ylös ajoissa, mutta se oli OK.
Joten tiedän, että te kaikki juuri tehnyt sen tietovisa.
Ensinnäkin, tervetuloa kääntöpuoli jotka.
>> Toiseksi, me puhumme siitä.
Puhutaan tietokilpailu.
Puhutaan miten teet luokassa.
Tulet hieno.
Minulla on teidän tietokilpailuja sinulle lopussa täältä,
joten jos kaverit haluavat ottaa katso sitä, täysin hieno.
>> Niin nopeasti ennen kuin aloitamme, esityslista tänään on seuraava.
Kuten näette, olemme pohjimmiltaan nopea ampumisen
läpi koko joukko tietorakenteiden todella, todella, todella nopeasti.
Niin sellaisenaan, se ei ole Super interaktiivinen tänään.
Se täytyy vain olla minä sellainen huutaen asioita, joita te, ja jos minä hämmentää sinua,
jos aion liian nopeasti, haluaisin tietää.
He ovat vain eri tiedot rakenteet, ja osana
teidän PSET tälle tulevan viikon, luultavasti
pyydetään toteuttamaan yksi heistä, ehkä kaksi them-- kaksi niistä
teidän PSET.
OK, joten olen juuri menossa aloittaa joitakin ilmoituksia.
Mennään yli pinot ja jonot enemmän syvyyttä kuin mitä teimme ennen tietokilpailu.
Menemme yli liittyy luetella uudestaan, jälleen kerran,
enemmän syvyyttä kuin mitä meillä oli ennen tietokilpailu.
Ja sitten me puhumme hash pöydät, puita ja yrittää, joka
ovat kaikki melko välttämättömiä teidän PSET.
Ja sitten me mennä yli joitakin hyödyllisiä vinkkejä pset5.
>> OK, joten tietokilpailu 0.
Keskiarvo oli 58%.
Se oli hyvin alhainen, ja niin te kaikki teki erittäin, erittäin hyvin mukaan
tuon kanssa.
>> Aika paljon, nyrkkisääntö on, jos olet sisällä keskihajonta keskiarvosta
varsinkin kun olemme vähemmän mukava jakso, olet täysin hieno.
Olet raiteilleen.
Elämä on hyvää.
>> Tiedän, että se on pelottavaa ajatella, että Sain kuin 40% tämän tietovisan.
Aion epäonnistua tähän luokkaan.
Lupaan teille, et ole menossa epäonnistua luokan.
Olet täysin hieno.
>> Niille teistä, jotka saivat yli keskiarvo, vaikuttava, vaikuttava,
kuten, vakavasti hyvin tehty.
Minulla on ne minulle.
Voit vapaasti tulla saada ne lopussa osassa.
Haluaisin tietää, jos sinulla on kysymyksiä, kysymyksiä heidän kanssaan.
Jos lisäämme up your pisteet väärässä, kerro meille.
>> OK, niin pset5, tämä on todella outo viikko Yale siinä mielessä
että PSET johtuu Maanantaisin klo lukien
myöhään päivä, joten se on todella teoriassa johtuu tiistaina keskipäivällä.
Luultavasti kukaan päättynyt tiistaina keskipäivällä.
Se on täysin hieno.
Aiomme olla virka tänä iltana sekä maanantai-iltana.
Ja kaikki osat tällä viikolla todella muuttui työpajoja,
niin voit pop jokin osa haluat,
ja he ovat eräänlainen mini-PSET työpajoja apua siitä.
Joten sinänsä, tämä on ainoa osio minne olemme oppimateriaalia.
Kaikki muut osiot keskittyy yksinomaan apua PSET.
Joo?
>> Yleisö: Missä virka?
>> ANDI Peng: Aukioloajat tonight-- Voi, hyvä kysymys.
Mielestäni virka tänä iltana ovat Tavi tai Commons.
Jos tarkistaa verkossa CS50 ja menet virka,
olisi aikataulun kertoo missä ne kaikki ovat.
>> Tiedän joko tänä iltana tai huomenna on sinivihreä,
ja mielestäni meillä voi olla commons muiden yö.
En ole varma.
Hyvä kysymys.
Tarkistaa CS50.
>> Viileä, kysyttävää aikataulu seuraavan kuten kolmessa päivässä?
Lupaan te kuten David sanoi, tämä on mäen päälle.
Te olette melkein perillä.
Vain kolme päivää.
Sinne, ja sitten me kaikki tulla alas.
Meidän täytyy mukava CS-taukoa.
Tervetuloa takaisin.
Me sukeltaa web ohjelmointi ja kehitys,
asioita, jotka ovat erittäin hauska verrattuna joitakin muita psets.
Ja se tulee olemaan chill, ja meillä on hauskaa.
Meillä on enemmän karkkia.
Anteeksi karkkia.
Unohdin karkkia.
Se oli karkea aamu.
Joten te olette melkein perillä, ja olen todella ylpeä sinusta kaverit.
>> OK, niin pinot.
Joka rakasti kysymys Jack ja hänen vaatteita tietovisa?
Ei kukaan?
OK, se käy hyvin.
>> Niin olennaisesti kuin voit kuva Jack, tämä kaveri täällä,
rakastaa ottaa vaatteet pois pinon,
ja hän laittaa sen takaisin pino jälkeen hän on tehnyt.
Joten tällä tavalla, hän ei koskaan näyttää olevan saada
pohjaan pino hänen vaatteet.
Joten tällainen kuvaa perustiedot rakenne
miten pino toteutetaan.
>> Pohjimmiltaan ajatella pino niin kaikki pino esineiden
jossa voit laittaa asiat kiinni alkuun, ja sitten pop heidät pois ylhäältä.
Joten LIFO on lyhenne haluamme että use-- Viime in, first out.
Ja niin viime vuonna alkuun pino on ensimmäinen, joka tulee ulos.
Ja niin kaksi termiä haluamme liittää
kanssa, joita kutsutaan push ja pop.
Kun painat jotain päälle pino, ja pop se takaisin ylös.
>> Ja niin kai tämä on tavallaan abstrakti käsite Niille teistä
jotka haluavat nähdä kuin tosiasiallinen täytäntöönpano
todellisessa maailmassa.
Kuinka moni teistä on kirjoittanut esseen ehkä kuten tunti ennen johtui,
ja olet vahingossa poistanut valtava kimpale se, kuten vahingossa?
Ja mitä sitten ohjaus tehdä käytämme laittaa se takaisin?
Control-Z, joo?
Control-Z, joten määrä kertoja että valvonta-Z on pelastanut henkeni,
on pelastanut minun perse, joka kerta joka on toteutetaan pinon.
>> Pohjimmiltaan kaikki tiedot se on Word-asiakirjaan,
se saa työntää ja piipahti mieleisekseen.
Ja niin olennaisesti kun poistaa mitään, pop se takaisin ylös.
Ja sitten jos tarvitset sitä takaisin päälle, sinun työnnä se, joka on mitä control-C ei.
Ja niin reaalimaailman toiminto miten yksinkertainen tietorakenne
voi auttaa jokapäiväistä elämää.
>> Joten struct on niin, että me itse luoda pino.
Me Define struct, ja sitten me kutsumme sitä pino alareunassa.
Ja sisällä pino, meillä on kaksi parametrit
että voimme olennaisesti manipuloida, joten meillä on nieriä tähden jouset kapasiteettia.
>> Kaikki, että se tekee luo array
että voimme tallentaa mitä haluat joka voimme määrittää sen kapasiteettia.
Kapasiteetti on vain max määrä kohteita voimme tähän array.
int koko on laskuri, joka pitää seuraa, kuinka monta kohdetta on tällä hetkellä
pinossa.
Jotta voimme seurata,, sekä kuinka suuri todellinen pino on,
ja, B, kuinka paljon, että pino täytimme koska emme halua
ylivuoto, mitä meidän kapasiteetti on.
>> Niinpä esimerkiksi, tämä ihana kysymys oli tietokilpailun.
Pohjimmiltaan miten me työntää päälle pinon päälle.
Melko yksinkertainen.
Jos katsot sitä, me kulkea tämän.
Jos [äänetön] size-- muistaa, kun
haluavat käyttää mitä tahansa parametrin struct,
teet nimi struct.parameter.
>> Tällöin s on nimi meidän pinon.
Haluamme päästä koko sitä, joten emme s.size.
Niin kauan kuin koko ei ole sama kapasiteetti tai niin kauan
koska se on vähemmän kuin kapasiteetti, joko toimisi täällä.
>> Haluat käyttää sisällä stäkistäsi, niin s.strings,
ja aiot laittaa että uusi numero että haluat lisätä osaksi siellä.
Sanotaan vain me haluamme aseta int n pinoon,
voisimme tehdä s.strings, suluissa, s.size vastaa n.
Koska koko on, jos me tällä hetkellä ovat pinossa
jos aiomme ajaa se, me vain käyttää
missä koko on, nykyinen täyteys pino,
ja me työnnä int n päälle.
Ja sitten me haluamme varmistaa, että olemme myös monesko koko n,
jotta voimme seurata olemme lisätty ylimääräinen asia pino.
Nyt meillä on suurempi koko.
Onko täällä mitään järkeä kaikki, miten loogisesti se toimii?
Se oli eräänlainen nopeasti.
Yleisö: Voitko mennä yli s.stringss.strings [s.size] uudelleen?
ANDI Peng: Toki, niin mitä tekee s.size hetkellä antaa meille?
Yleisö: Se on nykyinen koko.
ANDI Peng: Aivan, niin Hakemisto, että koko on,
ja niin haluamme laittaa uusi kokonaisluku että haluamme lisätä osaksi s.size.
Onko siinä järkeä?
Koska s.strings, kaikki jotka on on nimi jono.
Kaikki se on on pääsy array sisällä struct,
joten jos haluamme paikka n tuohon indeksi,
voimme vain käyttää sitä käyttäen suluissa s.size.
Viileä.
>> Hyvä, pop, olen pseudokoodina se ulos sinulle kaverit, mutta samanlainen käsite.
Onko siinä järkeä?
Jos koko on suurempi kuin nolla, niin voit
tietävät, että haluat ottaa jotain pois, koska jos koko ei ole
suurempi kuin nolla, niin voit ei ole mitään pinossa.
>> Joten haluat vain suorittaa tätä koodia, se voi vain
pop jos on jotain pop.
Joten jos koko on suurempi kuin 0, me miinus koko.
Me dekrementoidaan koko ja palata sitten mikä on sen sisällä, koska
popping, haluamme yhteys mitä tallennetaan
vuonna indeksi päällimmäinen.
Kaikki järkeä?
Jos Tein te kirjoittaa tätä, olisi te voi kirjoittaa sen pois?
OK, te voi leikkiä sen kanssa.
Ei hätää, jos et saa sitä.
Meillä ei ole aikaa koodia sitä tänään, koska olemme
sai paljon näiden rakenteiden käydä läpi, mutta pohjimmiltaan
pseudokoodilla, hyvin, hyvin samankaltainen työntää.
Vain seurata pitkin logiikkaa.
Varmista, että olet saada kaikki Autosi struct oikein.
Joo?
>> Yleisö: Will näitä dioja ja tämä koko juttu on tänään ish?
ANDI Peng: Aina, juu.
Aion yrittää laittaa tämä ylös kuin tunnin kuluttua.
Minä sähköpostitse David, David yrittää laita se ylös kuin tunnin kuluttua tästä.
>> OK, joten sitten siirrymme tähän muut ihana datarakenne kutsutaan jonoon.
Kuten te voi nähdä täällä, jono, Britannian keskuudessamme,
kaikki se on on viiva.
Joten toisin luulet pino on,
jono juuri loogisesti luulet se on.
Se hallussa sääntöjen FIFO, joka on First In, First Out.
Jos olet ensimmäinen yksi linja, olet
ensimmäinen, joka tulee ulos linja.
>> Joten mitä haluamme kutsua tätä on dequeueing ja enqueueing.
Jos haluamme lisätä jotain meidän jonoon, me laittaa jonoon.
Jos haluamme dequeue, tai ottaa jotain pois, me dequeue.
>> Niin sama tunne, että olemme tavallaan luominen vakiokokoiseen elementtejä, jotka me
voi tallentaa tiettyjä asioita, mutta voimme myös
muuttaa minne olemme saattamista parametrit sisällä niitä
perustuu minkälainen toiminnallisuutta haluamme.
Joten pinot, halusimme viimeinen yksi, N olla ensimmäinen yksi.
Jono on haluamme ensimmäinen asia on olla ensimmäinen asia pois.
>> Joten struct-tyyppinen määritellä, kuten näette,
se on hieman erilainen mitä pino
koska me emme vain täytyy pitää Seuraa jossa koko tällä hetkellä on,
haluamme myös seurata pään sekä missä me tällä hetkellä olemme.
Niin mielestäni se on helpompaa jos piirrän tämän.
Joten kuvitella meillä jono, niin sanokaamme pää on täällä.
Pään linja, katsotaanpa vain sanoa, että on tällä hetkellä,
ja haluamme lisätä jotain jonoon.
Aion soittaa koko olennaisesti on sama asia kuin hännän,
loppuun minne jono on.
Sanotaan vain koko on täällä.
>> Joten miten voidaan järkevästi aseta jotain jonoon?
Mitä indeksi haluamme sijoittaa jossa haluamme lisätä osaksi.
Jos tämä on alku oman jono ja tämä on lopussa se
tai koko se, missä me haluavat lisätä seuraava kohde?
>> Yleisö: [äänetön]
ANDI Peng: Aivan, jonka haluat lisätä se riippuu olet kirjoittanut sen.
Joko tämä on tyhjä tai on tyhjä.
Joten haluat lisätä sen luultavasti tässä, koska jos koko is--
jos nämä ovat kaikki täynnä, haluat lisätä sen täällä, eikö?
>> Ja niin se on, vaikka hyvin, hyvin yksinkertainen, ei aivan aina oikein
koska suurin ero välillä jono ja pino
on, että jono voi itse asiassa voidaan käsitellä
niin että pää muutokset riippuen siitä, missä haluat
alussa keppiin aloittaa.
Ja sen seurauksena, teidän hännän aikoo myös muuttaa.
Ja niin vilkaise tämä koodi juuri nyt.
Kuten te pyydettiin myös kirjoittaa ulos tietokilpailu, enqueue.
Ehkä niin jutellaan läpi miksi vastaus oli mitä se oli.
>> En voinut oikein sovi tämän linjan yhdelle, mutta pohjimmiltaan tämä koodinpätkä
tulisi olla yhdellä rivillä.
Vietä kuin 30 sekuntia.
Katsomaan, ja miksi tämä on niin, että se on.
>> Hyvin, hyvin samankaltainen struct, hyvin, hyvin samanlainen rakenne kuin edellinen
pino paitsi ehkä yhtä riviä koodia.
Ja että yhtä riviä koodia määrittelee toiminnot.
Ja se todella erottelee jono pinosta.
>> Kukaan halua ottaa puukottaa selittämään miksi olet
sai tämän monimutkainen asia täällä?
Näemme paluuta meidän ihana ystävä moduuli.
Kuten te tulevat pian tunnistaa ohjelmoinnin,
melkein milloin tarvitset jotain kääri ympärille mitään,
moduuli tulee olemaan tapa tehdä se.
Tietäen, että ei kukaan halua yrittää selittää että koodiriviä?
Joo, kaikki vastaukset ovat Hyväksytyt ja tervetuloa.
Yleisö: Puhutko minulle?
ANDI Peng: Joo.
Yleisö: Voi ei anteeksi.
ANDI Peng: OK, joten katsotaanpa kävelee tämän koodin.
Joten kun yrität lisätä jotain päälle jono,
ihanassa tapauksessa, että pää tapahtuu olla täällä, se on hyvin helppoa meille
vain mennä loppuun lisätä jotain, eikö?
Mutta idea jono on että pää voi todella dynaamisesti
muuttua riippuen missä haluavat alku meidän Q olla,
ja siten, hännän aikoo myös muuttaa.
>> Ja niin kuvitella, että tämä ei ollut jonoon, vaan tämä oli jonossa.
Sanotaan pää on täällä.
Sanotaan meidän jono näytti tältä.
Jos haluaisimme siirtää missä rivin alussa on,
sanokaamme muutimme pää Näin ja kokoja täällä.
>> Nyt haluamme lisätä jotain tämä jono, mutta te voi nähdä,
se ei ole niin yksinkertainen kuin vain lisätä mitä on jälkeen koko
koska silloin me loppuu rajat meidän todellinen array.
Jos haluamme todella lisätä on täällä.
Se kauneus jonon se meihin, visuaalisesti se
näyttää linja menee näin, mutta kun tallennetaan tietorakenteeseen,
Ne antavat sille samankaltaisina sykli.
Se ikään kuin kiertyy eteen samalla tavalla
että linja voi myös kääriä noin riippuen missä tahansa
haluavat alkuun linja on.
Joten jos otamme halveksua täällä, katsotaanpa
sanoa halusimme luoda toiminto nimeltään enqueue.
Halusimme lisätä int n tuohon q.
Jos q.size q-- soitamme että tietomme structure-- jos meidän queue.size ei
sama kapasiteetti tai jos se on vähemmän kuin kapasiteetti,
q.strings on joukko meidän q.
Aiomme asettaa että yhtä q.heads,
joka on täällä, plus q.size moduuli, jonka kapasiteetti, joka
kääri meidät takaisin täällä.
>> Joten tässä esimerkissä, indeksi pään on 1, eikö?
Indeksi koko on 0, 1, 2, 3, 4.
Joten voimme tehdä 1 plus 4 moduuli meidän kapasiteetti, joka on 5.
Mitä se antaa meille?
Mikä on indeksi, joka tulee ulos tästä?
>> Yleisö: 0.
>> ANDI Peng: 0, joka sattuu olemaan täällä,
ja niin haluamme pystyä lisättävän täällä.
Ja niin tämä yhtälö täällä tällaista vain toimii numeroita
riippuen siitä, missä pää ja kokosi ovat.
Jos tiedät, mitä nämä asiat ovat, tiedät
tarkalleen missä haluat lisätä mikä on sen jälkeen, kun jono.
Tarkoittaako tämä järkevää kaikille?
>> Tiedän eräänlainen aivojen teaser varsinkin kun tämä
tuli jälkimainingeissa tietokilpailun.
Mutta toivottavasti kaikki nyt voi ymmärtää
miksi tämä ratkaisu tai tämä toiminto on niin, että se on.
Jokainen hieman epäselvä siitä?
OK.
>> Ja nyt, jos halusi dequeue, tämä
on meidän pää olisi siirtymässä koska jos me dequeue,
emme ota pois loppuun q.
Haluamme ottaa pois pään, eikö?
Niin ollen, pää tulee muuttumaan, ja siksi kun laittaa jonoon,
sinulla seurata missä päätäsi ja kokosi
on voitava lisätä oikeaan asentoon.
>> Ja niin kun dequeue, Olen myös pseudokoodilla sitä.
Voit vapaasti, jos haluat yrittää koodaat ulos.
Haluat siirtää pään, eikö?
Jos halusin dequeue, I liikkuisi pään yli.
Tämä olisi pää.
>> Ja meidän nykyinen koko olisi vähennä koska emme enää
on neljä elementtiä jono.
Meillä on vain kolme, ja sitten haluamme palata mitä on tallennettu
pään koska haluamme ottaa tämän arvo ulos niin hyvin samanlainen kuin pino.
Vain olet ottaen eri paikasta,
ja sinun täytyy siirtää osoitinta eri paikka seurauksena.
Loogisesti, jokainen seuraa?
Suuri.
>> OK, joten me aiomme puhua vähän syvemmin noin linkitettyjen listojen
koska he ovat hyvin, hyvin arvokas sinulle aikana tämän viikon
psets.
Liittyy luettelot, kuten te voi muistaa, kaikki ne ovat
ovat solmuja, jotka ovat solmut tiettyjen arvot sekä arvon ja osoitin
jotka on linkitetty toisiinsa näiden viitteitä.
Ja niin struct miten luomme solmu tässä me
on int n, joka on mitä arvo kaupassa tai merkkijono n
tai mitä haluat kutsuvat sitä, nieriä tähti n.
Struct solmu tähti, joka on osoitin että haluat olla kussakin solmussa,
olet menossa on, että osoitin kohta kohti seuraavaksi.
Sinulla on pää linkitetyn listan, joka on
menossa kohta muualle arvot niin edelleen ja niin edelleen
kunnes lopulta päähän.
Ja tämä viimeinen solmu on vain menossa ole osoitin.
Se tulee osoittamaan null, ja silloin
tiedät osuma päättymiseen liittyvät luettelon
on, kun viimeinen osoitin ei osoita mitään.
>> Joten aiomme mennä hieman enemmän syvyys siitä, miten yksi olisi mahdollisesti
etsi linkitetty lista.
Muistakaa, mitä ovat joitakin haitat liittyvät luettelot
jakeet array koskien hakuja.
Array voit binäärihaku, mutta miksi et voi tehdä, että linkitetty lista?
>> Yleisö: Koska he kaikki kytketty, mutta et oikein tiedä missä
[KUULUMATON].
>> ANDI Peng: Joo, juuri niin muistakaa että loisto array
oli se, että meillä oli Random access memory jossa
jos halusin arvo indeksin kuusi, voisin vain sanoa indeksi kuusi,
anna minulle, että arvo.
Ja se johtuu paneelit lajitellaan vuonna yhtenäistä tilaa muistia
yhteen paikkaan, kun taas Tällainen linkitettyjen listojen
ovat satunnaisesti välissä ympäri, ja ainoa tapa löytää yksi
on kautta osoitin joka kertoo osoite, jos tämä seuraava solmu on.
>> Ja niin sen seurauksena, ainoa tapa etsiä linkitetty lista
on lineaarinen haku.
Koska en tarkalleen tiedä missä 12. arvo linkitetty lista on,
Minun täytyy kulkea kokonaisuudessaan Tämän linkitetyn listan yhden
yhden pään ensimmäiselle solmulle, toiselle solmulle, kolmanteen solmuun,
kaikki alas kunnes lopulta saada missä että solmu etsin on.
Ja niin tässä mielessä, haku on linkitetty lista on aina n.
Se on aina n.
Se on aina lineaarisessa ajassa.
>> Ja niin -koodi, jossa toteutamme tätä, ja tämä
on vähän uutta te koska te kaverit ovat ei oikeastaan ​​puhuneet tai koskaan
nähty viitteitä miten etsiä viitteitä,
niin me kulkea tämä hyvin, hyvin hitaasti.
Joten bool haku, oikea, Kuvitellaan haluamme
luoda toiminto nimeltään haku, joka palauttaa true
jos olet löytänyt arvo sisällä liittyvät luettelo, ja se palauttaa false muutoin.
Solmu tähti lista on tällä hetkellä vain osoitin
on ensimmäinen kohde linkitetty lista.
int n on arvo, että olet etsivät luetteloon.
>> Joten solmu tähden osoitin vastaa lista.
Tämä tarkoittaa, että me asetetaan ja luoda osoitin
tähän ensimmäiseen solmuun sisällä luettelon.
Jokainen kanssani?
Joten jos me mennä takaisin tänne, olisin
alustettu osoitin, joka osoittaa johtaja mitä se lista on.
>> Ja sitten kun saat tänne, vaikka osoitin ei ole sama null,
niin että on silmukka, jossa olemme olemaan myöhemmin liikkumisesta
loput meidän luettelosta, koska mitä tapahtuu, kun osoitin vastaa null?
Tiedämme, että meillä have--
>> Yleisö: [äänetön]
>> ANDI Peng: Aivan, niin me tiedämme, että olemme päättynyt luettelon, eikö?
Jos menet takaisin tänne, jokainen solmu olisi osoittaa toiseen solmuun
ja niin edelleen ja niin edelleen kunnes osut lopulta
pyrstö oman linkitetyn listan, joka on osoitin, joka vain
ei osoita muualla kuin ei.
Ja niin et periaatteessa tietää, että luettelo on vielä siellä ylös
kunnes osoitin ei vastaa null koska kun se vastaa null,
tiedät, että ei ole enemmän tavaraa.
>> Niin että on silmukka, jossa olemme menossa on todellinen haku.
Ja jos pointer-- näette sellainen nuolen toiminta siellä?
Joten jos osoitin osoittaa n, jos osoitin n on yhtä suuri kuin n,
niin se tarkoittaa, että jos osoitin, että olet
hakevat jokaisen solmu on todella arvoa
etsit sitten haluat palata totta.
Joten periaatteessa, jos olet solmu, joka on arvo, jota etsit,
tiedät, että olet ollut onnistuneesti etsiä.
>> Muuten haluat asettaa osoitin seuraavaan solmuun.
Sitä, että linja täällä tekee.
Pointer vastaa osoitin seuraavaksi.
Kaikkien nähdä, miten tämä työskentelee?
>> Ja pohjimmiltaan aiot vain kulkea koko luettelon,
nollaus osoitin aina kunnes te lopulta osuma luettelon loppuun.
Ja te tiedätte, että ei ole olemassa lisää solmut etsiä,
ja sitten voit palata false koska tiedät, että, oi, hyvin,
jos olen voinut etsiä kautta koko luettelon.
Jos tässä esimerkissä, jos halusin etsiä arvon 10,
ja aloitan kärjessä, ja Etsin kokonaan alas,
ja minä lopulta sai tähän, joka osoitin, joka osoittaa null,
Tiedän että, paska, kai 10 ei ole tämä lista koska en löytänyt sitä.
Ja olen lopussa luettelosta.
Ja jolloin tiedät Aion return false.
>> Anna että imeytyä vähän.
Tämä on melko tärkeää teidän PSET.
Logiikka se on hyvin yksinkertainen, ehkä syntaktisesti vain sen toteuttamisesta.
Te halua tehdä Varmista, että ymmärrät.
Viileä.
>> OK, joten miten olisimme lisäämällä solmuja, oikea,
listaan, koska muistaa mitkä ovat mitä etuja
ottaa linkitetty lista vs. joukko kannalta tallennustilaa?
>> Yleisö: Se on dynaaminen, joten se on helpompaa to--
>> ANDI Peng: Aivan, joten se on dynaaminen, joka
tarkoittaa, että se voi laajentua ja kutistua riippuen käyttäjän tarpeiden.
Ja niin, tässä mielessä, emme tarvitse tuhlata tarpeettomia muistin koska en
jos en tiedä kuinka monta arvot haluan tallentaa, se ei ole järkeä minulle
luoda array koska jos haluan tallentaa 10 arvoa
ja luon joukko 1000, se paljon hukkaan muistia, luovutetaan.
Siksi haluamme käyttää linkitetty luettelo voi dynaamisesti
muuttaa tai kutistua meidän koko.
>> Ja niin että tekee lisäys hieman monimutkaisempi.
Koska emme voi satunnaisesti käyttää elementtejä että olisimme array.
Jos haluan lisätä elementin seitsemänteen indeksi,
En vain voi lisätä sen seitsemänteen indeksiin.
On linkitetty lista, se ei melko työtä yhtä helposti,
joten jos halusimme lisätä yksi täällä linkitetty lista,
visuaalisesti, se on erittäin helppo nähdä.
Me vain haluamme lisätä sen oikeassa, heti alussa luettelon,
heti pään.
>> Mutta tapa, jolla meidän täytyy siirtää viitteitä on hieman sekava
tai, loogisesti, on järkevää, mutta haluat varmistaa, että sinulla on se
täysin alas, koska viimeinen asia, jonka haluat
on siirtämiseksi osoitin siten, että teemme täällä.
Jos dereference osoitin päästä 1,
sitten yhtäkkiä loppuelämäsi linkitetty lista
on menetetty, koska et ole itse luotu väliaikainen mitään.
Joka on osoitti 2.
Jos asiakas määrittää osoitin, sitten loput listasi on täysin menetetty.
Joten haluat olla hyvin, hyvin varovaisia ​​tässä
ensin määrittää osoittimen mitä
haluat lisätä osaksi missä haluat, ja sitten
voi dereference loput listasi.
>> Joten tämä koskee missä yrität lisättävän.
Jos haluat lisätä at pää, jos haluat vastata täällä,
jos haluat lisätä at loppuun, hyvin, loppujen lopuksi
kai olisi vain ei ole osoitin, mutta sinä
haluat varmistaa, että et menettää loput listasi.
Haluat aina varmistaa uusi solmu osoittaa
kohti mitä haluat lisätä osaksi,
ja voit lisätä ketjuttamalla päälle.
Jokainen selvä?
>> Tämä tulee olemaan yksi todellinen kysymyksiä.
Yksi tärkeistä kysymyksistä olet menossa on teidän PSET
on, että aiot yrittää luoda linkitetty lista ja insertti asiat
mutta sitten vain menettää loppuelämäsi linkitetyn listan.
Ja aiot olla, minä en tiedä miksi näin tapahtuu?
Ja se on kipu mennä läpi ja etsiä kaikki osoittimia.
>> Ja voin taata teille tässä PSET, kirjoittaminen ja piirtäminen näiden solmujen ulos
on erittäin, erittäin hyödyllistä.
Joten voit täysin seurata missä kaikki osoittimet ovat,
mikä on vialla, jossa kaikki solmut ovat,
mitä sinun tarvitsee tehdä käyttää tai lisätä tai poistaa tai jokin niistä.
Jokainen hyvä, että?
Viileä.
>> Joten jos halusimme katsoa koodi?
Voi, en tiedä, jos me voi nähdä the-- OK, niin
huipulla kaikki se on on funktio nimeltään insertti jossa haluamme
lisätä int n osaksi linkitetty lista.
Me aiomme kulkea tämän.
Se on paljon koodia, paljon uusia syntaksin.
Tulemme OK.
>> Joten ylös huipulla, kun haluamme luoda mitään
mitä meidän täytyy tehdä, varsinkin jos haluavat sen ei tallenneta pino
mutta kasaan?
Käymme malloc, eikö?
Joten aiomme luoda osoitin.
Solmu, osoitin, uusi tasavertaisten malloc koko solmun
koska haluamme, että solmu luotava.
Haluamme määrä muisti että solmu vie
aiotaan luovuttaa varten luominen uusi solmu.
>> Ja sitten me aiomme tarkistaa onko uusia tasavertaisten vastaa null.
Muistakaa mitä sanoimme?
Mitä ikinä malloc, mitä on aina teet?
Sinun täytyy aina tarkistaa, onko se on nolla.
>> Esimerkiksi, jos käyttöjärjestelmä järjestelmä oli aivan täynnä,
jos sinulla ei ollut enemmän muistia kaikki ja yrität malloc,
se palaisi null sinulle.
Joten jos yrität käyttää sitä kun se osoittaa null,
et aio pysty käyttää näitä tietoja.
Ja niin sellaisenaan, halusimme tehdä Varmista, että kun olet mallocing,
olet aina tarkistaa, jos että muisti annettu sinulle on null.
Ja jos se ei ole, niin voimme siirtyä kanssa loput meidän koodi.
>> Joten aiomme alustaa uusi solmu.
Aiomme tehdä uusi n on n.
Ja sitten me aiomme tehdä asettaa uusia osoitin uusi
null koska nyt emme halua mitään sen osoittamaan.
Meillä ei ole aavistustakaan missä se tulee laittaa sinut,
ja sitten jos haluamme aseta se kärjessä,
voimme siirtää osoitin päähän.
Onko jokainen seuraa logiikkaa missä se tapahtuu?
>> Kaikki me teemme on luomassa uutta solmu, jossa osoitin null,
ja sitten uudelleen kohdentamisesta se päähän, jos me
tietää haluamme lisätä sen kärjessä.
Ja sitten pää on menossa kohta kohti että uusi solmu.
Jokainen OK kanssa?
>> Joten se on kaksivaiheinen prosessi.
Sinun täytyy ensin assign mitä luot.
Aseta että osoitin viite, ja sitten
voi sellaista dereference ensimmäinen osoitin
ja kohta se kohti uusi solmu.
Minne haluat lisätä sen, että logiikka on menossa pitävät paikkansa.
>> Se on ikään kuin osoitetaan väliaikainen muuttujat.
Muista, sinulla varmista, että olet
älä katoaa jos olet vaihtamalla.
Haluat varmistaa, että sinulla on väliaikainen muuttuja sellainen pitää
kirjaa kun tämä asia on säilytettävä niin, että voit
eivät menetä mitään arvoa kurssin samankaltaisten kikkailunsa sen.
>> OK, joten koodi on täällä.
Te katsomaan jakson jälkeen.
Se on siellä.
>> Joten kai miten tämä eroaa jos haluaisimme
lisätä keskelle tai loppuun?
Onko kellään aavistustakaan siitä, mitä on pseudokoodia loogisena viite
että ryhtyisimme jos haluaisimme lisätä sen keskellä?
Joten jos halusimme aseta se pää, kaikki mitä teemme on luoda uusi solmu.
Asetimme osoitin kyseisen uusi solmu mihin tahansa päähän,
ja sitten asetamme pää uuteen solmuun, eikö?
Jos halusimme lisätä sen keskellä luettelon, mitä meidän on tehtävä?
>> Yleisö: se silti olla samanlainen prosessi
samankaltaisten määrittämällä osoittimen ja sitten antaa tämä osoitin,
mutta meidän olisi paikantaa siellä.
>> ANDI Peng: Aivan, niin täsmälleen sama prosessi paitsi sinä
täytyy etsiä missä tarkalleen olet haluavat, että uuden osoittimen mennä,
joten jos haluan lisätä osaksi keskellä liittyvät list-- OK,
sanotaan, että on meidän linkitetty lista.
Jos haluamme lisätä sen täällä, aiomme luoda uusi solmu.
Aiomme malloc.
Aiomme luoda uusi solmu.
Aiomme antaa osoitin tämän solmun täällä.
>> Mutta ongelma, joka poikkeaa josta pää on
on, että me tiesimme tarkalleen jossa pää on.
Se oli aivan ensimmäinen, eikö?
Mutta tässä meidän täytyy seurata missä olemme sen laittamista.
Jos me asetat meidän solmu täällä, meillä
varmistaa, että yksi aiempi tähän solmuun
on yksi että reassigns osoitin.
Joten sitten on sellainen seurata kaksi asiaa.
Jos seurata missä tämän solmu tällä hetkellä on laitat ne.
Sinun on myös seurata, missä edellinen solmu että etsit
oli myös siellä.
Jokainen hyvä, että?
OK.
>> Entä lisäämällä osaksi loppuun?
Jos halusin lisätä sen here-- jos halusin lisätä uusi solmu loppuun luettelon,
miten voisin mennä noin tekee, että?
Yleisö: Eli tällä hetkellä, viime yksi osoitti null.
ANDI Peng: Joo.
Tarkalleen, niin tämä yksi tällä hetkellä on suunnattu tietää,
ja niin kai, tässä mielessä se on erittäin helppo lisätä luettelon loppuun.
Kaikki mitä sinun tarvitsee tehdä on asettaa se yhtä null ja sitten boom.
Oikeassa, erittäin helppo.
Hyvin yksinkertainen.
>> Hyvin samankaltainen kuin pää, mutta loogisesti sinä
haluat varmistaa, että vaiheet otat kohti teet mitään tällaista,
olet seuraava pitkin.
Se on erittäin helppo, keskellä koodistasi, saada kiinni,
Voi, minulla niin paljon viitteitä.
En tiedä missä jotain on osoittaa.
En edes tiedä mikä solmu olen.
Mitä on meneillään?
>> Rentoudu, rauhoitu, vetäkää syvään henkeä.
Vetää ulos linkitetyn listan.
Jos sanot, tiedän missä tarkalleen Minun täytyy lisätä tämän huomioon
ja tiedän tarkalleen, miten siirtää minun osoittimia, paljon, paljon helpompi kuva
out-- paljon, paljon helpompaa ei eksyä vikoja koodistasi.
Jokainen OK kanssa?
OK.
>> Joten kai käsite, meillä ei todella puhui ennen nyt,
ja kai luultavasti ei kohdata paljon yet--
se on tavallaan kehittynyt concept-- on, että meillä on todellakin tiedot
rakenne kutsutaan kaksin verroin linkitetty lista.
Niin te voi nähdä, kaikki teemme on luoda
todellinen arvo, ylimääräinen osoitin jokaisen meidän solmujen
että myös viittaa edelliseen solmuun.
Joten ei vain meillä on meidän solmut viittaavat seuraavaan.
Ne viittaavat myös edelliseen.
Aion jättää nämä kaksi nyt.
>> Joten sitten on ketju jotka voivat liikkua molempiin suuntiin,
ja sitten se on hieman helpompaa loogisesti seurata pitkin.
Kuten täällä, sen sijaan pitää seurata, oi, minä
täytyy tietää, että tämä solmu on joka minun täytyy siirtää,
Voin vain mennä täällä ja vain vetää edellinen.
Silloin tiedän tarkalleen missä että on, ja sitten
ei tarvitse kulkea kokonaisuudessaan linkitetyn listan.
Se on hieman helpompaa.
>> Mutta sinänsä, sinulla on kaksin verroin määrän osoittimia,
se kaksinkertainen määrä muistia.
Se on paljon viitteitä seurata.
Se on hieman monimutkaisempi, mutta se on hieman käyttäjäystävällisempi riippuen
mitä yrität saavuttaa.
>> Joten tämäntyyppisiä tietoja rakenne täysin olemassa,
ja rakenne on hyvin, hyvin yksinkertainen paitsi kaikki sinulla on on,
eikä vain osoitin seuraavaan, sinulla on myös osoittimen edelliseen.
Siinä kaikki ero oli.
Jokainen hyvä, että?
Viileä.
>> Hyvä on, joten nyt olen todella viettää luultavasti
kuten 15-20 minuuttia tai irtotavarana muun ajan jaksossa
puhumme hash taulukoita.
Kuinka moni teistä kaverit lukenut pset5 spec?
Hyvä, hyvä.
Se on suurempi kuin 50% normaalisti.
Se on ok.
>> Niin te näet, olet haaste pset5
on toteuttaa sanakirja jossa lataat yli 140000 sanoja
että annamme sinulle ja oikeinkirjoituksen tarkistus se vastaan ​​koko tekstin.
Annamme sinulle satunnainen kappaletta kirjallisuuden.
Annamme sinulle Odyssey.
Annamme sinulle Ilias.
Annamme sinulle Austin Powers.
>> Ja teidän haaste on oikeinkirjoituksen tarkistus
jokainen sana kaikissa näistä sanakirjoja
olennaisesti meidän oikeinkirjoituksen tarkistus.
Ja niin siellä on muutamia osia luoda tämän PSET,
ensimmäinen haluat olla pystyy todella ladata
kaikki sanat omalle sanakirja, ja sitten
haluavat pystyä oikeinkirjoituksen tarkistus ne kaikki.
Ja niin sellaisenaan, olet menossa vaatia tietorakenne, joka voi tehdä tämän nopeasti
ja tehokkaasti ja dynaamisesti.
>> Joten kai helpoin tapa tehdä tämä, te
todennäköisesti luo runsaasti, eikö?
Helpoin tapa tallennustilaa on sinua voi luoda joukko 140000 sanoja
ja juuri laita ne kaikki siellä ja sitten kulkea ne binäärihaku
tai valintoja tai not-- pahoillani, että on lajittelua.
Ne voidaan järjestää ja sitten kulkea niitä binäärilisäyksellä haku tai vain lineaarinen haku
ja vain lopullinen sanoja, mutta että vie valtavasti muistia,
ja se ei ole kovin tehokas.
>> Ja niin aiomme aloittaa puhumme tapoja
meidän käyntiaika tehokkaampi.
Ja tavoitteenamme on saada vakio aika missä
se on melkein kuin paneelit, jossa sinulla on hetkellinen pääsy.
Jos halusin etsiä mitään, Haluan pystyä vain,
puomi, löytää se tarkalleen, ja vedä se ulos.
Ja niin rakenne, jossa me voidaan tulossa erittäin lähellä
pystyä käyttämään vakio aika, tämä pyhä Graal
ohjelmointiin jatkuvasti aikaa kutsutaan hajautustaulua.
Ja niin David aiemmin mainittu [Äänetön] vähän luento,
mutta aiomme todella sukeltaa syvälle tällä viikolla
pala, joka on koskevat miten hash table toimii.
>> Niin että hajautus pöytä teoksia, esimerkiksi,
jos halusin tallentaa joukko sanoja, nippu sanoja Englanti kielellä,
Voisin teoriassa laittaa banaani, omena, kiivi, mango, pari,
ja cantaloupe kaikki vain array.
Ne voisivat kaikki mahtuvat ja voidaan löytää.
Se olisi eräänlainen kipua etsiä ja pääsy,
mutta helpompi tapa tehdä tämä on että voimme luoda todella rakenne
kutsutaan hash table jossa hash.
Otamme kaikki meidän avaimet kautta hajautusfunktio, yhtälö,
joka muuttaa ne kaikki jonkinlainen arvo
että voimme tallenna olennaisesti erilaisia ​​linkitetyn listan.
>> Ja niin tässä, jos haluaisimme tallentaa Englanti sanat,
voisimme mahdollisesti vain, en tietää, käännä kaikki ensimmäiset kirjaimet
jonkinlainen numeron.
Ja niin, esimerkiksi, jos halusin Olla synonyymi apple--
tai indeksi 0, ja B olla synonyymi 1,
voimme olla 26 merkinnät että voi vain tallentaa
kaikki kirjaimet aakkoset että aloitamme kanssa.
Ja sitten voimme olla omena on indeksi 0.
Meillä voi olla banaani on indeksi 1, fenkoli on indeksi 2,
ja niin edelleen ja niin edelleen.
Ja näin jos halusin etsiä minun tiiviste ja pääsy omena,
Tiedän Apple alkaa , ja tiedän tarkalleen
että sen on oltava, ja hash pöytä indeksi 0, koska
Toiminnon aiemmin määritetty.
>> Joten en tiedä, olemme käyttäjäkohtaisia ​​jossa
sinulta veloitetaan kanssa arbitrarily-- ei mielivaltaisesti,
kanssa yrittää mietteliäänä ajatella hyvä yhtälöt
pystyä levittämään pois kaikki arvot
siten he voivat helposti se myöhemmin kanssa kuin yhtälön
että te itse, tietää.
Joten siinä mielessä, jos halusin mennä mango, tiedän, oi, se alkaa m.
Sen on oltava indeksi 12.
Minulla ei tarvitse etsiä mitään.
Tiedän exactly-- voisin vain mennä indeksi 12 ja vedä se ulos.
>> Jokainen selvää miten tiiviste n toiminto toimii?
Se on tavallaan vain monimutkaisempi array.
Siinä kaikki se on.
OK.
>> Joten kai me törmätä tämä kysymys mitä
tapahtuu, jos sinulla on useita asioita jotka antavat sinulle sama indeksi?
Joten sanoa meidän tehtävämme, kaikki se teki oli ottaa tämän ensimmäisen kirjeen
ja kääntää sen osaksi vastaaviin 0 kautta 25 indeksi.
Se on täysin hienoa, jos sinulla on vain yksi kutakin.
Mutta toinen aloitat on enemmän, olet
menossa on mitä kutsutaan törmäys.
>> Joten jos yritän lisätä haudata osaksi hash taulukko, joka jo on banaani sitä,
mitä tulee tapahtumaan, kun yrität lisätä, että?
Bad Things koska banaani jo tallennettu indeksi
että haluat tallentaa sen.
Berry sellainen on kuin, ah, mitä teen?
En tiedä minne mennä.
Miten ratkaista tämän?
>> Ja niin te tulee eräänlainen katso teemme tätä hankala asia
missä voimme tavallaan todella luoda linkitetyn listan meidän paneelit.
Ja niin helpoin tapa ajatella tätä,
kaikki tiiviste on joukko linkitettyjen listojen.
Ja niin, siinä mielessä, sinulla on tämä kaunis joukko osoittimia,
ja sitten kukin osoitinta että arvo, että indeksi,
voi todella korostavat muita asioita.
Ja niin sinulla on kaikki nämä erilliset ketjut tulossa pois yhden ison array.
>> Ja niin tässä, jos en halusi lisätä marja,
Tiedän, OK, aion tuloon se läpi minun hajautusfunktio.
Aion päätyä indeksi 1, ja sitten aion voida olla
vain pienempi osajoukko tämän jättiläinen 140000-sanan sanakirja.
Ja sitten voin vain katsoa kautta 1/26 siitä.
>> Ja niin sitten voin vain lisätä marja joko ennen tai jälkeen banaani
tässä tapauksessa?
Jälkeen, eikö?
Ja niin olet menossa haluavat aseta tämä solmu jälkeen banaani,
ja niin aiot lisätä klo pyrstö että linkitetyn listan.
Aion mennä takaisin Tämän Edellinen dia,
joten te voi nähdä, miten tiivistefunktio toimii.
>> Joten tiivistefunktio on tämä yhtälö että käytät sellaista syöte
kautta saada mitä indeksi haluat antaa etenemään kohti.
Ja niin, tässä esimerkissä, kaikki halusimme tehdä oli ottaa ensimmäinen kirjain,
kääntää sen osaksi indeksi, niin me voi tallentaa että meidän hajautusfunktio.
Kaikki me teemme tässä olemme muuntaa ensimmäinen kirjain.
Joten KeyKey [0] on vain ensimmäinen kirjain riippumatta merkkijono meillä oli,
olemme ohimennen.
Olemme muuntaa että ylä-, ja olemme vähentämällä mukaan isoja,
niin kaikki mitä tekee antaa meille numero
jossa voimme hash arvojamme päälle.
>> Ja sitten me aiomme palata hash moduuli KOKO.
Ole hyvin, hyvin varovainen sillä, teoriassa, tässä
sinun hash arvo voi olla ääretön.
Se voisi vain mennä ja ja.
Se voisi olla joitakin todella, todella suuri arvo,
mutta koska tiiviste että olet luonut vain 26 indeksit,
haluat varmistaa, että modulusing jotta voit
älä run-- se on sama asia kuin queue--
niin että et suorita pois pohjassa hajautusfunktion.
>> Haluat kääri se takaisin noin samalla tavalla [äänetön], kun
sinulla oli kuin hyvin, erittäin suuri kirjain, sinua
ei halua, että vain ajaa pois loppuun.
Sama juttu täällä, haluat varmistaa, se ei suorita pois lopussa käärimällä
noin taulukon yläosassa.
Joten tämä on vain hyvin yksinkertainen tiivistefunktio.
Kaikki tämä teki, oli ottaa ensimmäinen kirjeellä mitä meidän panos oli
ja kääntää sen osaksi indeksi, joka voisimme ottaa meidän tiiviste.
>> Joo, ja niin kuten aiemmin sanoin, siten, että ratkaisemme törmäykset
meidän hash taulukot ottaa, mitä me kutsumme, ketjutus.
Joten jos yrität lisätä useita sanoja, jotka alkavat sama asia,
aiot olla yksi hash-arvo.
Avokadot ja omena, jos olet ajaa se läpi meidän hajautusfunktio,
aiomme antaa teille sama numero, numero 0.
Ja niin tapaamme ratkaista että on että voimme todella sellaista linkittää niitä
yhdessä kautta linkitettyjen listojen.
>> Ja niin tässä mielessä, te voi nähdä sellaista
siitä, miten tietorakenteet olemme asettamalla aiemmin
kuten rusina linkitetty lista laji ja voi tulla yhdeksi.
Ja sitten voit luoda pitkälle tehokkaampi tietorakenteita
jotka voivat käsitellä suurempia määriä tiedot, että dynaamisesti muuttaa riippuen
tarpeisiin.
Jokainen selvä?
Jokainen sellainen selkeä mitä tapahtuu täällä?
>> Jos halusin insert-- mitä hedelmä, joka alkaa, en tiedä,
B, muut kuin marja, banaani.
>> Yleisö: Blackberry.
>> ANDI Peng: Blackberry, karhunvatukka.
Jos ei karhunvatukka mennä täällä?
No, emme oikeastaan ​​ole lajiteltu tätä vielä, mutta teoreettisesti
jos halusimme saada tämän aakkosjärjestyksessä
jossa pitäisi karhunvatukka mennä?
>> Yleisö: [äänetön]
>> ANDI Peng: Aivan, kun täällä, eikö?
Mutta koska se on hyvin vaikeaa reorder-- Kai se on jopa teitä.
Te voi täysin toteuttaa mitä haluat.
Tehokkaamman tehdä tämä ehkä
olisi lajitella sidoksissa luettelo aakkosjärjestykseen,
ja niin kun olet lisäämällä asioita, haluat
olla varma lisätä niitä aakkosjärjestykseen
niin että sitten kun olet yrittää etsiä niitä,
sinun ei tarvitse kulkea kaikki.
Tiedät tarkalleen missä se on, ja se on helpompaa.
>> Mutta jos sellainen on asiat välissä satunnaisesti,
olet vielä menossa on kulkemaan sitä anyways.
Joten jos halusin vain aseta karhunvatukka täällä
ja halusin etsiä se, tiedän, OH, karhunvatukka
on aloitettava indeksi 1, joten en tietää välittömästi vain etsiä 1.
Ja sitten voin sellainen kulkea linkitetty lista
kunnes saan Blackberry, ja then-- joo?
>> Yleisö: Jos yrität create-- Oletan näin on hyvin yksinkertainen hash
toiminto.
Ja jos halusimme tehdä useita kerroksia, että kuten,
OK, haluamme erotella kuten kaikki aakkosina
ja sitten taas kuin toinen joukko aakkosellinen kirjeitä kyseisessä,
olemme laskemisesta kuin hash pöytä sisällä tiiviste,
tai kuten toimintoa funktio?
Vai onko that--
>> ANDI Peng: Joten hash function-- sinun tiiviste
voi olla niin suuri kuin haluat sen.
Joten tässä mielessä, ajattelin se oli hyvin helppo, hyvin
yksinkertainen minulle vain eräänlainen perustuu kirjeistä ensimmäisen sanan.
Ja niin on vain 26 vaihtoehtoja.
Voin vain saada 26 vaihtoehtoja 0-25 koska ne voivat vain
alkaa A: sta Z Mutta Jos halusi lisätä, ehkä enemmän monimutkaisuus
tai nopeampi ajaa aikaa teidän tiiviste, ehdottomasti
voi tehdä kaikenlaisia ​​asioita.
Voit tehdä oman yhtälö, joka antaa sinulle
lisää jakelu teidän sanoja, sitten kun haet,
se tulee olemaan nopeampi.
>> Se on täysin jopa te miten haluat toteuttaa sitä.
Ajattele sitä vain kauhat.
Jos halusin 26 kauhat, aion
lajitella asiat noihin kauhat.
Mutta aion olla nippu tavaraa kussakin ämpäri,
joten jos haluat tehdä nopeampi ja tehokkaampi,
antaa minulle sata kauhat.
>> Mutta sitten sinun täytyy selvittää tapa järjestää asiat niin, että ne ovat
oikeassa ämpäri niiden pitäisi olla.
Mutta sitten kun itse halua katsoa että ämpäri,
se on paljon nopeammin, koska siellä vähemmän tavaraa kussakin ämpäri.
Ja niin, joo, se on todella temppu sinulle kaverit pset5
on, että voit olla haastetaan vain luoda
mikä on tehokkain toiminnolla voit ajatella olevan
voi tallentaa ja tarkistaa näitä arvoja.
>> Täysin jopa te mutta haluat tehdä sen,
mutta se on todella hyvä pointti.
Että logiikkaa sinua haluavat alkaa miettiä
on, hyvin, miksi en tee enemmän kauhat.
Ja sitten minun täytyy etsiä vähemmän asioita, ja sitten ehkä
on eri hajautusfunktio.
>> Joo, siellä on paljon tapoja tehdä tämä PSET, jotkut ovat nopeampia kuin toiset.
Olen täysin menossa vain nähdä miten nopea oli nopein te kaverit
voi saada toiminnot toimimaan.
OK, kaikki hyvältä ketjuuntuminen ja hash taulukoita?
Se on oikeastaan ​​kuin hyvin yksinkertainen käsite jos ajattelee sitä.
Kaikki se on on erottamalla riippumatta teidän tulot ovat osaksi kauhat,
lajittelu, ja sitten etsimällä luettelee että siellä liittyy.
>> Viileä.
Okei, nyt meillä on erilainen eräänlainen Tietojen rakenne, joka kutsutaan puu.
Jatketaan ja puhua yrittää jotka ovat selvästi erilaisia,
mutta samaan luokkaan.
Pohjimmiltaan kaikki puu on sen sijaan järjestää tietojen lineaarisesti
että tiiviste does-- sinua tietää, se sai ylä- ja alaosassa
ja sitten tavallaan linkittää pois it-- puu on ylhäältä joka soitat juuri,
ja sitten se on lähtee kaikki sen ympärillä.
>> Ja niin sinun ei täällä on vain yläsolmun
joka viittaa muihin solmuihin, että pistettä enemmän solmuja, ja niin edelleen, ja niin edelleen.
Ja niin sinun täytyy vain jakohaaroja.
Se on vain erilainen tapa organisoida tiedot, ja koska me kutsumme sitä puu,
te just-- se on vain mallinnettu ulos näyttämään puu.
Siksi me kutsumme sitä puita.
>> Tiiviste näyttää pöytä.
Puu vain näyttää puu.
Kaikki se on on erillinen tapa järjestää solmujen
riippuen mitkä tarpeet ovat.
>> Joten sinulla on juuri ja sitten on lehdet.
Tapa, jolla voimme erityisen ajattele sitä on binääripuu,
binääripuu on vain tietyntyyppistä puu
jossa kukin solmu vain pistettä to, max, kaksi muuta solmut.
Ja niin täällä on selvä symmetria teidän puu
että helpottaa sellaista näyttää mitä arvoja olet koska silloin
on aina vasemmalle tai oikealle.
Ei koskaan kuin vasemman kolmanneksen vasemmalle tai neljäsosa vasemmalta.
Se on vain sinulla on vasen ja oikea ja voit hakea joko näistä kahdesta.
Ja niin miksi tämä hyödyllinen?
Siten, että tämä on hyödyllinen on jos etsit
etsiä arvoja, eikö?
Sijasta, binary etsiä virheen array,
jos halusi pystyä lisätä solmuja ja ottaa pois solmut tahtoa ja myös
säilyttää haku kapasiteetin binäärihakupuu.
Joten tällä tavalla, olemme eräänlainen tricking-- muistan kun me
sanoi liittyy luetteloita ei binäärihaku?
Olemme tavallaan luoda tietorakenteen että temppuja että työskentelyasentoon.
>> Ja siksi sidoksissa luettelot ovat lineaarisia, ne yhdistävät vain yksi toisensa jälkeen.
Voimme sellaista olla toisenlaisen osoittimia
Siinä vaiheessa eri solmut jotka voivat auttaa meitä haku.
Ja niin tässä, jos halusin on binäärihakupuu,
Tiedän, että minun keskimmäinen jos 55.
Olen juuri menossa luoda että minun keskimmäinen, kuten minun root,
ja sitten aion olla arvot spin off sitä.
>> Joten tässä, jos aion etsiä arvo 66, voin aloittaa 55.
Se on 66 suurempi kuin 55?
Kyllä se on, niin tiedän mus etsi I n oikea osoitin tämän puun.
Menen 77.
OK, on ​​66 pienempi tai suurempi kuin 77?
Se on vähemmän kuin, niin tiedät, oi, jonka on oltava vasemmalle solmu.
>> Ja joten tässä olemme eräänlainen säilyttämiseen kaikki suuria asioita paneelit,
joten kuten dynaaminen koon esineitä, että
voi lisätä ja poistaa mieleisekseen, ilman huolta siitä kiinteä
paljon tilaa.
Meillä on vielä säilyttää kaikki niitä ihania asioita
samalla myös mahdollisuus säilyttää log ja etsiä aikaa binary haku
että olimme vain aiemmin saada lause.
>> Cool tietorakenne, eräänlainen hankala toteuttaa, solmu.
Kuten näette, kaikki se on struct solmun
on, että sinulla on vasemmalle ja oikea osoitin.
Siinä kaikki se on.
Joten sen sijaan vain ottaa X tai edellinen.
Sinulla vasemmalle tai oikealle, ja sitten voit sellaista liittää ne yhteen
kuitenkin niin haluat.
>> OK, olemme todella menossa vain kestää muutaman minuutin.
Joten aiomme palata tänne.
Kuten sanoin aiemmin, Olen sellainen selittänyt
logiikka miten me olisi etsiä tätä.
Aiomme yrittää pseudocoding tätä nähdä
jos voimme sellaista soveltaa Sama logiikka binäärihaku
eri tyyppisiä tietoja rakenteen.
Jos kaverit haluavat ottaa kuin pari minuuttia vain ajatella tätä.
OK.
Hyvä, aion oikeastaan ​​vain antaa sinulle the-- ei,
me puhumme pseudokoodina ensin.
Joten ei kukaan halua antaa puukottaa mitä
ensimmäinen asia, jonka haluat tehdä, kun olet aloittamassa haku on?
Jos etsimme arvo 66, mikä on
ensimmäinen asia haluamme tehdä, jos haluamme binäärihakupuu tämän puun?
>> Yleisö: Haluat katsoa oikealle ja näyttävät vasemmalle ja nähdä [äänetön]
suurempi määrä.
>> ANDI Peng: Joo, täsmälleen.
Joten olet menossa katsomaan pääkäyttäjän.
On paljon tapoja, joilla voit soittaa se, vanhempasi solmu ihmiset sanovat.
Haluan sanoa juuri koska se on kuin puun juuri.
Olet menossa katsomaan sinun juurisolmu, ja olet
näkemään on 66 suurempi kuin tai vähemmän kuin 55.
Ja jos se on suurempi kuin, no, se on suurempi kuin, jos haluamme näyttää?
Missä haluamme etsiä nyt, eikö?
Haluamme etsiä oikea puoli tämän puun.
>> Joten meillä on, sopivasti, osoitin, joka osoittaa oikealle.
Ja niin sitten voimme asettaa uusi pääkäyttäjän 77.
Voimme vain mennä minne osoitin osoittaa.
No, oh, tässä alamme 77, ja voimme vain
Tätä rekursiivisesti uudestaan ​​ja uudestaan.
Näin voit laji on on toiminto.
Sinulla on tapa etsiä että te voi vain toistaa uudestaan ​​ja uudestaan ​​ja uudestaan,
riippuen siitä, missä haluat katsoa kunnes lopulta saada arvoa
että etsit.
Käydä järkeen?
>> Olen aikeissa näyttää todellinen koodi, ja se on paljon koodia.
Ei tarvitse älyttömästi.
Puhutaan sen läpi.
>> Itse asiassa, ole.
Se oli vain pseudokoodilla.
OK, että oli vain pseudokoodina, joka on vähän monimutkainen,
mutta se on täysin hieno.
Jokainen seuraava pitkin täällä?
Jos juuri on null, paluu väärä, koska se tarkoittaa
sinun ei edes ole mitään siellä.
>> Jos juuri n on arvo, joten jos se sattuu olemaan yksi etsit,
sitten olet menossa return true koska tiedät löysit sen.
Mutta jos arvo on pienempi kuin juuri n, olet
menossa etsiä vasemmalle lapsi tai vasemmalle lehtiä,
mitä haluat kutsua sitä.
Ja jos arvo on suurempi kuin juuri, aiot etsiä oikea puu,
sitten vain ajaa toiminto haun kautta uudelleen.
>> Ja jos juuri on null, että tarkoittaa olet saavuttanut loppuun?
Tämä tarkoittaa sinulla ei ole lisää lisää lehtiä etsiä,
niin tiedät, oi, minä kai se ei ole täällä
koska kun olen käynyt läpi koko juttu ja se ei ole täällä,
se vain voi olla täällä.
>> Tarkoittaako tämä järkevää kaikille?
Joten se on kuin binäärihaku säilöntä ominaisuuksia linkitettyjen listojen.
Jäähtyä, ja siten toisen tyypin Tietojen rakenne te
voi kokeilla täytäntöönpanosta teidän PSET, sinulla on vain valita yksi menetelmä.
Mutta ehkä vaihtoehtoinen menetelmä hash table me kutsumme trie.
>> Kaikki trie on on tietyntyyppisen puun, joka
on arvoja, jotka menevät muita arvoja.
Joten sen sijaan, että binary puu siinä mielessä, että vain yksi
asia voi viitata kaksi, voit olla yksi asia kohta monia, monia asioita.
Voit olennaisesti on taulukot jonka sisällä tallennat
osoittimia, jotka viittaavat muihin paneelit.
>> Joten solmu miten määriteltäisiin trie
on haluamme Boolean, C sana, eikö?
Joten solmu on Boolen kuten totta vai tarua,
ensinnäkin kärjessä että matriisi, on tämä sana?
Toiseksi, haluat olla viitteitä mihin tahansa loput niistä ovat.
Hieman monimutkainen, hieman abstrakti, mutta Selitän, mitä se kaikki keinot.
>> Joten tässä, huipulla, jos on joukko julisti jo,
solmu, jossa sinulla on Boolen tallennettu arvo edessä
joka kertoo on tämä sana?
Eikö tämä ole sana?
Ja sitten on loppuelämäsi array, joka
todella tallentaa kaikki mahdollisuuksia mitä se voisi olla.
Niinpä esimerkiksi, kuten huipulla olet
ensimmäinen asia, joka sanoo totta tai väärä, kyllä ​​tai ei, tämä on sana.
>> Ja sitten on 0 kautta 26 kirjaimet, jotka voit tallentaa.
Jos halusin etsiä täällä BAT, menen alkuun
ja odotan B löydän B minun array, ja niin tiedän, OK, on ​​B sana?
B ei ole sana, niin näin Minun täytyy pitää etsimistä.
Menen B, ja katson osoitin, että B osoittaa kohti
ja minä näen toisen joukko tietoja, sama rakenne, että meillä oli ennen.
>> Ja here-- oh, seuraava kirje [äänetön] on A.
Joten katsomme, että jono.
Löydämme kahdeksas arvo, ja sitten me katsomme, OH,
hei, on että sana, on B-sana?
Se ei ole sana.
Meidän täytyy pitää näköinen.
>> Ja niin sitten katsomme missä osoittimen pistettä,
ja se osoittaa muulla tavalla joka meillä on enemmän arvoa tallennetaan.
Ja lopulta, saamme B--T-, joka on sana.
Ja niin seuraavan kerran näytät, olet menossa
on, että tarkastus, kyllä, tämä Boolen toiminto on totta.
Ja niin siinä mielessä olemme eräänlainen ottaa puu paneelit.
>> Joten voit eräänlainen haku alaspäin.
Sen sijaan, hajautus funktio ja osoitetaan arvoja linkitetty lista,
voit vain toteuttaa trien, joka etsii downwords.
Todella, todella monimutkainen kamaa.
Ei helppo ajatella, koska olen kuin sylkeminen niin paljon tietorakenteita ulos
sinulle, mutta ei jokainen sellainen ymmärtää, miten logiikkaa tämä toimii?
>> OK, viileä.
Joten B--T, ja sitten aiot etsiä.
Seuraavan kerran olet menossa nähdä, OH, hei, se on totta,
Näin Tiedän, että tämä on sana.
>> Sama asia eläintarha.
Joten tässä on asia juuri nyt, jos me halusi etsiä eläintarhaan, juuri nyt,
tällä hetkellä eläintarha ei ole sana sanakirjastamme
koska, kuten te voi nähdä, ensinnäkin, että meillä on Boolen
return true on lopussa zoom.
Meillä on Z-O-O-M.
>> Ja niin tässä, meillä ei oikeastaan sana, eläintarha, meidän sanakirja
koska tämä valintaruutu ei ole valittuna.
Joten tietokone ei tietävät, että eläintarha on sana
koska siten, että olemme se on tallennettu vain zoom täällä
itse asiassa on totuusarvon joka on kytketty totta.
Joten jos haluamme lisätä sana, eläintarha, meidän sanakirja,
kuinka voisimme edetä tee sitä?
Mitä meidän on tehtävä, jotta voimme varmistaa tietokone tietää, että Z-O-O on sana
ja ole ensimmäinen sana on Z-O-O-M?
>> Yleisö: [äänetön]
>> ANDI Peng: Aivan, me haluat varmistaa, että tästä
täällä, että Boolen arvo on tarkistanut pois, että se on totta.
Z-O-O, niin aiomme tarkistaa, että joten tiedämme tarkalleen, hei, eläintarha on sana.
Aion kertoa tietokoneeseen, se on sana niin
että kun tietokone tarkistaa, se tietää, että eläintarha on sana.
>> Koska muistaa kaikki nämä tiedot rakenteet, se on hyvin helppoa meille
sanoa, oh, lepakko on sana.
Zoo on sana.
Zoom on sana.
Mutta kun olet rakentamassa sitä, tietokone ei ole aavistustakaan.
>> Joten sinun täytyy kertoa se tarkalleen missä vaiheessa on tämä sana?
Missä vaiheessa se ole sana?
Ja missä vaiheessa minun täytyy etsiä asioita,
ja missä vaiheessa minun täytyy mennä seuraavaksi?
Jokainen selvää siitä?
Viileä.
>> Ja niin sitten tulee ongelma, miten voisimme
edetä lisäämällä jotain se oikeastaan ​​ole siellä?
Joten vain sanoa haluamme lisätä sana, kylpyamme, meidän trie.
Kuten te voi nähdä, kuten tällä hetkellä meidän täytyy nyt on B--T,
ja tämä uusi tietorakenne siellä oli pint että
viittasivat null koska oletamme että, oi, ei ole sanoja jälkeen B--T,
miksi meidän täytyy pitää ottaa asioita jälkeen T.
>> Mutta ongelma syntyy, jos teemme sinulle haluavat sana joka tulee jälkeen
T: n.
Jos sinulla on kylpyamme, olet menossa halua H oikealla.
Ja niin miten aiomme tehdä niin on aiomme luoda erillinen solmu.
Emme jakaa summaksi muistia tämän uuden taulukon,
ja aiomme siirtää osoittimia.
>> Aiomme antaa H, Ensinnäkin, tämä null,
aiomme päästä eroon.
Aiomme olla H-pisteen alaspäin.
Jos näemme H, haluamme sen mennä jonnekin muualle.
>> Täällä voimme sitten ruksata kyllä.
Jos me osuma H jälkeen T, OH, me tiedämme, että tämä on sana.
Boolean aikoo palata totta.
Jokainen selvää, miten se tapahtui?
OK.
>> Niin olennaisesti, kaikki nämä tietorakenteita
että olemme ylittäneet tänään, olen menneet heitä todella, todella nopeasti
eikä paljon yksityiskohtaisesti, ja se on OK.
Kun aloitat Messing sen kanssa, voit olla
pitää kirjaa siitä, missä kaikki osoittimet ovat,
mitä tapahtuu omassa tietorakenteita, jne.
He ovat erittäin hyödyllisiä, ja se on sinun
kaverit täysin selvittää, miten haluat toteuttaa asioita.
>> Ja niin pset4, on 5-- Voi, että on väärä.
Pset5 on kirjoitusvirheet.
Kuten aiemmin sanoin, olet menossa, kun uudelleen, lataa lähdekoodin meiltä.
Siellä tulee olemaan kolme asiat sinua lataamista.
Sinun ladata sanakirjoja, KERS, ja tekstejä.
>> Kaikki nämä asiat ovat ovat joko sanakirjoja sanoja
että haluamme tarkistaa tai testi tiedot
että me haluamme teidän oikeinkirjoituksen tarkistus.
Ja niin sanakirjat annamme aiot
antaa sinulle todellinen sanoja että haluamme voit tallentaa jotenkin tavalla, joka on
tehokkaampi kuin jono.
Ja sitten tekstit ovat olemaan mitä olemme
pyytää teitä oikeinkirjoituksen varmista kaikilla sanoilla olemassa todellisia sanoja.
>> Ja niin kolme korttelin ohjelmia, jotka annamme sinulle
kutsutaan dictionary.c, dictionary.h, ja speller.c.
Ja niin kaikki dictionary.c tekee on mitä sinua pyydetään toteuttamaan.
Se lataa sanoja.
Se oikeinkirjoituksen tarkistaa niitä, ja se varmistaa, että kaikki on asetettu oikein.
>> diction.h on vain kirjastotiedosto että ilmoittaa kaikki toiminnot.
Ja speller.c, me aiomme antaa teille.
Sinun ei tarvitse muuttaa mitään siitä.
Kaikki speller.c ei on ottaa sen, lataa sen, tarkistaa nopeus se,
testaa vertailukohtana kuten miten nopeasti pystyt tekemään asioita.
>> Se on speller.
Eivät vain sotkea sitä, mutta varmista, että ymmärrät mitä se tekee.
Käytämme toiminto nimeltään getrusage että testaa suorituskykyä loitsu
Checker.
Kaikki se on periaatteessa testata aika kaiken teidän sanakirjasta,
joten varmista, että ymmärrät sen.
Varo sotkea sitä tai muuten asiat eivät toimi kunnolla.
>> Ja suurin osa tähän haasteeseen on te todella muuttaa dictionary.c.
Aiomme antaa teille 140.000 sanat sanakirjasta.
Aiomme antaa sinulle tekstiviestin tiedoston, nämä sanat,
ja haluamme pystyä järjestämään ne hajautustaulun tai trie
koska kun pyydämme teitä oikeinkirjoituksen check-- kuvitella, jos olet loitsu
tarkkailun kuten Homeroksen Odysseia.
Se on kuin tämä valtava, valtava testi.
>> Kuvittele, jos joka ikinen sana oli etsiä
läpi joukko 140000 arvoja.
Se kestää ikuisesti oman koneen käydä.
Siksi haluamme organisoida data tehokkaampi tietorakenteiden
kuten hajautustaulun tai trie.
Ja sitten te voi kind ja kun haet pääsy
asioita helpommin ja nopeammin.
>> Ja joten ole varovainen ratkaista törmäyksiä.
Olet menossa saada nippu sanoja, jotka alkavat A.
Olet menossa saada nippu sanoja jotka alkavat B. Jopa sinua
kaverit, miten haluat sen ratkaisemiseksi.
Ehkä siellä on enemmän tehokas tiivistefunktio
kuin vain ensimmäinen kirjain jotain, ja niin se on sinun
kaverit sellaista tehdä mitä haluat.
>> Ehkä haluat lisätä kaikki kirjaimet yhteen.
Ehkä haluat pidät tehdä outoja asioita tilille kirjeiden määrä,
aivan sama.
Jopa te miten haluat tehdä.
Jos haluat tehdä hajautustaulun, jos kannattaa kokeilla trie, täysin vain haluat.
Minä varoitan teitä etukäteen, että trie on tyypillisesti hieman vaikeaa
vain koska siellä on paljon lisää viitteitä seurata.
Mutta täysin jopa teitä.
Se on paljon tehokkaampaa useimmissa tapauksissa.
Haluat todella pystyä pitämään kirjaa kaikki osoittimia.
Kuten tehdä sama asia että tein täällä.
Kun yrität lisätä arvot hajautustaulun tai poistaa,
varmista, että olet todella pitää kirjaa
missä kaikki on, koska se on todella helppoa jos olen
yrittää lisätä kuten sana, Andy.
Sanotaan vain, että on oikea sana, sana, Andy,
jättimäisen luettelon sanoista.
>> Jos minä vain sattuvat siirtää osoitin väärä, oho,
siellä menee kokonaisuudessaan loppuelämäni linkitetyn listan.
Nyt vain sana I on on Andy, ja nyt
kaikki muut sanat Sanakirja on menetetty.
Ja niin haluat varmistaa, että sinulla seurata kaikki osoittimet
tai muuten olet menossa saada valtavia ongelmia koodissa.
Piirrä asioita huolellisesti askel askeleelta.
Se tekee siitä paljon helpompi ajatella.
>> Ja lopuksi, haluat pystyä testata suorituskykyä ohjelman
iso aluksella.
Jos te ottaa katsokaa CS50 juuri nyt,
meillä on mitä kutsutaan iso board.
Se on arvostelukaavakkeen nopeimmin oikoluvun kertaa kaikilla on CS50
juuri nyt, mielestäni top kuin 10 kertaa Luulen kahdeksan heistä ovat henkilökunnan.
Haluamme todella te lyödä meitä.
>> Kaikki meistä yrittivät toteuttaa nopein koodi kuin mahdollista.
Haluamme te yrittää haastaa meille ja toteuttaa nopeammin kuin me kaikki
voi.
Ja niin tämä on todella ensimmäisen kerran, että olemme
pyytää te tehdä PSET joka voit todella tehdä missä tahansa menetelmässä
haluat.
>> Sanon aina, tämä on enemmän sukua ja tosielämän ratkaisu, eikö?
Sanon, hei, tarvitsen sinua tekemään tämän.
Rakenna ohjelma, joka tekee tämän minulle.
Tee se kuitenkin haluat.
Tiedän vain, että haluan nopeasti.
Se on sinun haaste tällä viikolla.
Kaverit, aiomme antaa sinulle tehtävän.
Aiomme antaa teille haasteen.
Ja sitten se on sinun kaverit täysin vain selvittää
mikä on nopein ja tehokas tapa toteuttaa tätä.
Joo?
>> Yleisö: Olemmeko saa jos halusi tutkia nopeammin tapoja
tehdä hash taulukoita verkossa, voimme tehdä että ja mainitsevat jonkun toisen koodia?
ANDI Peng: Joo, täysin hieno.
Joten jos te lukea spec, siellä linja
spec joka sanoo te ovat täysin vapaasti tutkimukseen hash
toimintoja mitkä ovat joitakin ja nopeammin hash toimintoja
ajaa asioita läpi kuin kunhan mainita, että koodin.
Joten jotkut ihmiset ovat jo tajunnut nopeasti tapoja
tehdä oikolukuohjelmia, nopeasti tapoja tallentaa tietoa.
Täysin vain te, jos haluavat vain ottaa sen?
Varmista, että olet vedoten.
Haasteena todella että yritämme testata
on varmistaa, että tiedät päin osoittimia.
Niin pitkälle kuin täytäntöönpanosta todellinen tiivistefunktio
ja keksiä kuten matematiikka tehdä niin,
te voi tutkia mitä tahansa menetelmiä online-kaverit haluavat.
Joo?
>> Yleisö: Voimmeko mainita vain käyttämällä [äänetön]?
>> ANDI Peng: Joo.
Voit vain, sinun kommentti, voit mainita kuten, oh,
otettu yada, Yada, Yada, tiivistefunktio.
Kellään mitään kysyttävää?
Me itse asiassa breezed kautta jakso tänään.
Aion olla jopa täällä vastata kysymyksiin samoin.
>> Myös, kuten sanoin, toimisto tuntia tänään ja huomenna.
Spec tällä viikolla on oikeastaan erittäin helppo ja erittäin lyhyt lukea.
Ehdotan ottaa tarkastella, vain lukea läpi kokonaisuudessaan se.
>> Ja Zamyla todella kävelee sinua kullakin toimintojen
sinun täytyy toteuttaa, ja niin se on hyvin, hyvin selvää, kuinka tehdä kaikkea.
Vain varmista, että olet pitää kirjaa osoittimia.
Tämä on erittäin haastava PSET.
>> Se ei ole haastavaa, koska kuten, oh, käsitteet ovat niin paljon enemmän
vaikea, tai sinun täytyy oppia niin paljon uusia syntaksi tavalla
että teit viime PSET.
Tämä PSET on vaikeaa, koska on niin paljon viitteitä,
ja sitten se on hyvin, hyvin helppo kerran sinulla vian koodi ei voi
löytää missä se vika on.
>> Ja niin täydellisestä uskon sinua kaverit pystyä voittamaan meidän [äänetön]
kirjoitusasuja.
Minulla on oikeastaan ​​ole mitään kirjallista minun vielä, mutta olen aikeissa kirjoittaa minun.
Joten kun olet kirjoittamassa sinun, otan kirjallisesti minun.
Aion yrittää tehdä minun nopeammin kuin sinun.
Näemme kuka on nopein.
>> Ja joo, minä näen kaikki te täällä tiistaina.
Käyn sellaista kuin PSET työpaja.
Kaikki osat tämän viikko ovat PSET työpajoja,
joten teillä paljon mahdollisuuksia apua, virka kuten aina,
ja minä todella odotan lukeminen kaikki kaverit "koodi.
Minulla on tietokilpailuja tänne jos kaverit haluavat tulla saada näitä.
Siinä kaikki.