[Powered by Google Translate] [6 savaitė]
[David J. Malan] [Harvardo universiteto]
[Tai CS50.] [CS50.TV]
>> Tai CS50, o tai yra 6 Savaitės pradžia,
taip pora naujų priemonių, dabar yra prieinami jums pasinaudoti,
kurių pirmasis, vadinamas CS50 Stilius.
Šansai yra, jei jūs panašus į mane ar bet mokymo bičiulių,
jūs tikriausiai matė programą, kurios stilius atrodo truputį kažką panašaus į tai.
Gal pradėdami pjauti kai kampus vėlai naktį, ar jums kovoti su ja vėliau,
ir tada TF arba CA ateina darbo valandomis.
Tada jis mums sunku skaityti.
Na, šis kodas yra sintaksiškai teisinga, ir jis bus sudaryti, ir tai tikrai bus paleisti.
Bet tai tikrai ne dėl stiliaus 5.
>> Bet dabar, jei mes einame į šį katalogą čia
ir pastebėjo, kad turiu conditions2.c-
ir aš paleisti šią naują komandą, style50, šio failo conditions2.c, Enter,
pastebėsite, kad jis man pranešė, kad jis buvo stilizuotas.
Gedit pastebėjau, kad failas buvo pakeistas diske,
ir jei aš spustelėkite paleisti, visos jūsų problemos dabar yra automatizuotas.
[Plojimai]
Tai yra vienas iš dalykų, mes padarėme šį savaitgalį.
Suprasti, kad ji yra netobula, nes yra keletas kodas
, kad ji tiesiog negali būti Stilizuoti puikiai,
bet suprantame, kad tai dabar yra įrankis, kurį galite pasinaudoti
jei tik sutvarkyti kai daugiau errantly pateikti Garbanotasis petnešos ir pan.
>> Bet daugiau įtikinamų CS50 Registracijos.
CS50 patikrinimui, jūs iš tikrųjų galite atlikti tuos pačius korektiškumo bandymus
savo kodą, kad mokymo bičiulių galime.
Tai yra komandų eilutės įrankis, kuris ateina dabar į prietaisą
kuo greičiau padaryti, kaip už update50
pset 4 specifikacijos, o jūs jį naudoti iš esmės panašus į šį.
Jūs paleisti komandų check50.
Tada jums perduoti komandinės eilutės argumentu, arba apskritai žinomi kaip jungiklis ar vėliava.
Apskritai, dalykų, kurie brūkšnelių vadinamas jungiklis
komandinės eilutės programa, todėl c aprašoma
patikrinimai, kad jūs norite paleisti.
>> Išbandymas, kurį norite paleisti individualiai pažymimas šios eilutės,
2012/pset4/resize.
Kitaip tariant, tai tik savavališkai, bet unikalus ID
kad mes naudojame unikaliai identifikuoti pset 4 korektiškumo testus.
Ir tada jums nurodyti, atskirtų tarpais, sąrašas failus, kad jūs norite ákelti
CS50 patikrinimo analizei.
Pavyzdžiui, jei aš einu į mano sprendimas čia resize.c
leiskite man atverti didesnę terminalo lange-
ir aš einu į priekį ir paleisti tegul sako check50-c 2012/pset4/resize
ir tada aš eiti į priekį ir nurodyti failų pavadinimus,
resize.c, ir tada paspauskite Enter, ji suspaudžia,
Ji išsiunčia, jis pasitikrina, ir aš tiesiog nepavyko visa krūva bandymų.
Viena raudonai viršutiniame kairiajame kampe sako, kad egzistuoja resize.c ir BMP.
Tai buvo bandymas. Tai buvo klausimas, mes paprašė.
Ir tai yra nelaimingas, nes atsakymas buvo neteisingas.
Baltas tekstas žemiau sako, kad tikimasi, bmp.h egzistuoti, ir tai tik mano kaltė.
Aš pamiršau įkelti jį, todėl man reikia įkelti abu failus,
resize.c ir bmp.h.
Bet dabar pastebėsite, visi kiti bandymai yra geltonos spalvos, nes jie nebuvo paleisti,
ir taip smiley veido yra vertikali, nes jis nei laimingi, nei liūdna,
bet mes turime ištaisyti šį klausimą raudonai, iki šių kiti patikrinimai bus paleisti.
>> Leiskite man išspręsti šią problemą.
Leiskite man nutolinti ir iš naujo, šį kartą su bmp.h taip pat
į komandų eilutę, Enter, ir dabar, jei viskas vyks gerai,
ji ketina patikrinti ir tada grįžti rezultatą laikykite savo kvėpavimą
visai žalia, o tai reiškia, darau tikrai gerai pset 4 šiol.
Jūs galite matyti ir daryti išvados aprašomasis tekstas čia
ką ji yra, mes patikrinome.
Mes pirmiausia tikrinama, ar failai yra?
Mes tada buvo patikrintas, veikia resize.c kompiliavimo?
Tada mes patikrinome, ar ji nemano dydį 1x1 pikselių BMP, kai n, dydį faktorius, yra 1.
Dabar, jei jūs neturite idėjos, kas n yra, jums bus, kai jūs pasinerti į pset 4,
bet kad tiesiog yra normalumas patikrinti, įsitikinkite, kad jūs ne dydžio keitimas
vaizdas ne visi, jei dydžio keitimo koeficientas yra 1.
Jei, priešingai, ji didinama 1x1 pikselio iki 1x1 pixel BMP 2x2 teisingai
kai n yra 2, tada panašiai, mano formų.
>> Trumpai tariant, tai reiškia, vienas, imtis kirtimo pirštų
iš lygtį tiesiai prieš jus pateikti savo pset.
Jūs žinosite, ką jūsų TF netrukus žinoti
, kai jūs einate, kaip pateikti kai kurie iš šių probleminių rinkinių,
taip pat pedagoginis motyvacija yra tikrai įdėti
galimybė, kad priešais jus, kai jūs žinote, a priori
, kad yra savo kodą klaidas ir bandymai, kurie negali būti perduodama,
jūs galite įdėti daugiau efektyvaus laiko priekyje spręsti šias problemas
, o ne prarasti taškų, gauti grįžtamąjį ryšį iš savo TF
ir tada eiti "Ahh, kaip aš turėjo suprato, kad iš.
Dabar bent yra įrankis, kad padėtų jums rasti, kad.
Jis nesiruošia atkreipti dėmesį į tai, kur klaida yra, bet jis jums pasakys,
kas yra simptominis.
>> Dabar suprantame, bandymai nebūtinai yra baigtinis.
Tiesiog todėl, kad jūs gaunate ekranas visiškai žalia smiley veidus
nereiškia, kad jūsų kodas yra tobulas, tačiau tai nereiškia,
kad jis praėjo tam tikrus tyrimus, nustatytas pagal spec.
Kartais mes neatleidžia patikrinimus.
Pavyzdžiui, Detektīvromāns, vienas iš aspektų pset 4,
rūšies nuvilia, jei mes suteikiame Jums
atsakymas, kokia ji yra, ir yra būdų atskleisti
kas yra tas asmuo yra to raudono triukšmo.
Visada nurodyti spec ateityje pset 5 tolyn
kokių patikrinimų yra už jus.
Jūs pastebėsite, ten tai white URL apačioje.
Nes dabar, tai yra tik diagnostikos produkcija.
Jei norite aplankyti šį URL, jūs gausite visą krūva Crazy, paslaptingas žinutes
kad jūs pažvelgti pro, bet tai daugiausia darbuotojų
, kad galėtume diagnozuoti ir derinimo klaidas check50 pati.
>> Be triukšmo, galime pereiti, kur mes nerašomas.
CS50 biblioteka mes laikė savaime keletą savaičių,
bet tada praeitą savaitę, mes pradėjome lupimasis atgal vieną iš jos sluoksnių.
Eilutę, už ką, ​​o ne atsisakyti įsišaknijusių?
[Studentai] Char.
Char *, kuri buvo char * visą šį laiką,
bet dabar mes neturime apsimesti, kad tai faktinis duomenų tipas eilutė.
Atvirkščiai, tai buvo tam tikros rūšies sinonimas char *
eilutė yra simbolių seka,
kodėl ji prasmės atstovauti eilutes kaip char * s?
Ką char * į šią eilutę koncepciją?
Taip. >> [Studentų] pirmasis simbolis.
Geras, pirmasis simbolis, bet ne visai pirmasis simbolis.
Tai-[Studentai] Adresas.
Geras, pirmą pobūdžio adresas.
Viskas, ko reikia atstovauti eilutę, kompiuterio atmintyje
yra tik unikalus adresas, labai pirmasis baitas.
Jūs net neturi žinoti, kiek laiko ji yra
, nes, kaip jūs galite suprasti, kad atliekami dinaminiai?
[Studentų] String ilgis.
Galite skambinti eilutės ilgis, puikus, bet kaip veikia eilutės ilgio?
Ką jis daro? Taip.
[Studentų] Keep going,, kol gausite null charakterį.
Taip, tiksliai, tai tiesiog kartojasi už linijos, o linijos,
nepriklausomai nuo * iki galo, ir pabaiga yra atstovaujama
\ 0, vadinamasis nul personažas, nul,
neturi būti painiojama su NULL, kuris yra rodyklė,
kuris ateis į pokalbį vėl šiandien.
>> Nuplėšus sluoksnį GetInt, tada mes paėmė pažvelgti GetString
bei primena, kad šių funkcijų, ar tikrai,
GetString, naudojant tam tikrą funkciją
faktiškai apdoroti, kad, skaityti ir analizuoti, vartotojo įvestį.
Ir kas buvo, kad nauja funkcija?
Scanf arba sscanf. Ji iš tikrųjų ateina į keletą skirtingų skonių.
Yra scanf, yra sscanf, yra fscanf.
Nes dabar, nors, galime sutelkti dėmesį į vienas labiausiai puikiai iliustruoja,
ir leiskite man eiti į priekį ir atidaryti prietaiso
kaip šį failą, scanf1.c.
Tai yra super paprasta programa,
bet kad daro kažką, kad mes niekada padaryti
be CS50 bibliotekoje.
Gauna iš naudotojo int. Kaip tai veikia?
Na, line 16 yra,
pastebėti, kad mes skelbiame int vadinama X, ir šio taško istorija,
kas yra x vertė?
[Nesigirdi studentas atsakas]
[M. David] Teisė, kas žino, kai šiukšlių vertė gali būti, kad 17, mes tiesiog pranešti vartotojui
man duoti numerį, prašome, ir 18 žingsnis yra ten, kur jis bus įdomus.
Scanf atrodo, kad skolintis iš printf idėja, kad ji naudoja šiuos formato kodus į kabutes.
% D, žinoma, dešimtainis skaičius.
Bet kodėl aš artimųjų & X, o ne tik X?
Pirmoji yra teisinga. Taip.
[Nesigirdi studentas atsakas]
Tiksliai, jei šios programos tikslas, kaip ir pačios funkcijos GetInt
yra gauti iš vartotojo int galiu perduoti funkcijas
visi kintamieji noriu, bet jei aš neturiu perduoti jas nuorodą
arba adresu arba žymeklis, visi šiandienos tikslais sinonimai,
tada, kad funkcija neturi galimybės keisti šio kintamojo turinį.
Tai būtų perduoti kopija, lygiai kaip Buggy versija apsikeitimo sandorio
, kad mes kalbėjome apie kelis kartus dabar.
>> Bet vietoj to, atlikdami & X, aš tiesiog eina kokiais?
[Studentų] adresas. >> X adresą.
Tai, pavyzdžiui, piešimo funkcija vadinama scanf žemėlapį ir sako: čia,
tai yra kompiuterio atminties riekė nurodymai
, kad galite eiti laikyti šiek tiek sveikasis skaičius, in
Tam, kad sscanf dabar daryti, kad
operatorius, ką gabalas sintaksė jis ketina naudoti
nors mes negalime matyti, nes kažkas ją parašė šią funkciją?
Kitaip tariant - kas tai?
[Studentų] X skaityti.
Ten bus šiek tiek skaityti, bet tik atsižvelgiant į X čia.
Jei scanf išlaikė x adresą,
sintaksiškai, operatorius privalo egzistuoti kažkur
viduje scanf įgyvendinimo, kad scanf
iš tikrųjų galite rašyti skaičių 2 tuo adresu?
Taip, kad *.
Prisiminkite, kad * yra mūsų dereference operatorius, kuris iš esmės reiškia, ten.
>> Sukūrę buvo perduotas adresą, kaip yra šiuo atveju,
scanf tikriausiai, jei mes iš tikrųjų pažvelgė aplink savo kodą
daro * x arba atitinkamą faktiškai eiti tuo adresu ir įdėti tam tikrą vertę.
Dabar, kaip scanf gauna įvesties iš klaviatūros,
mes pakylės mūsų rankas šiandien.
Tiesiog manyti, kad operacinė sistema leidžia sscanf kalbėti
vartotojo klaviatūros, tačiau šiuo metu dabar atitinka 19,
kai mes tiesiog atspausdinti x, atrodo, kad tuo atveju,
kad scanf įdėti int x.
Tai yra būtent tai, kaip scanf veikia, ir prisiminti praėjusią savaitę
tai tiksliai, kaip GetString ir GetInt ir kitų šeimos funkcijų
galiausiai veikia, nors ir šiek tiek prieštarauja, pavyzdžiui, sscanf
o tai reiškia, nuskaityti vietoj klaviatūros eilutę.
Bet Paimkime bent šiek tiek variacijos išvaizdą.
Į scanf2, aš tikrai įsukus.
, Kas yra negerai, ir aš paslėpti komentaras, kuris paaiškina, kiek
kas yra negerai su šia programa, versija 2?
Techninį ir šiuo metu.
Atrodo gana gerai.
Tai gražiai įtraukta, tačiau
gerai, kaip apie galime genėti trumpesnius klausimus?
Linija 16. Kas linija 16 daro tiksliai, bet techninė anglų kalba?
Kaip šiek tiek nepatogu. Taip, Maiklai.
[Studentų] Ji nukreipta į eilutę pirmąją raidę.
>> Gerai, arti. Leiskite man įgnybti, kad šiek tiek.
Nukreipta į pirmąją raidę eilutę, jūs deklaruojate kintamasis vadinamas buferis
kad į pirmą eilutę adresą,
arba, tiksliau, kad bus nurodyti tiksliau char.
Pastebėsite, kad jis nėra iš tikrųjų nukreipta niekur, nes nėra priskyrimo operatorius.
Nėra jokios lygybės ženklas, todėl visi mes darome, yra paskirstant kintamasis vadinamas buferis.
Taip atsitinka, kad 32 bitų, nes tai rodyklė,
ir tikriausiai buferio turinys galiausiai
bus pateikta char adresą, bet dabar, ką buferis yra?
Tiesiog kai fiktyvus, kas žino, kai šiukšlių vertė,
nes mes ne aiškiai inicializuoti jį, todėl mes neturėtų prisiimti nieko.
Gerai, kad dabar eilutė 17-ką eilutė 17 daryti?
Gal, kad bus šilta tai padaryti.
Jis spausdina eilutę, tiesa?
Jis spausdina Styginių prašome.
>> Eilutė 18 rūšies susipažinę dabar, kad mes tik pamačiau tai dispersiją
bet su kitokiu formatu kodą, todėl 18 eilutėje,
mes sakau scanf čia yra atminties riekė adresas.
Aš noriu, kad jis skambėtų į eilutę, kurį rodo nuo% s,
tačiau problema yra ta, kad mes ne padaryti keletą dalykų.
, Kas yra viena iš problemų?
[Studentų] Jis bando dereference NULL pointeris.
Geras, null, arba tiesiog kitaip nežinoma patarimų.
Jūs dalijamos scanf adresą, bet ką tik sakė prieš akimirką
, kad adresas yra šiek tiek šiukšlių vertė, nes mes ne iš tikrųjų priskirti jį su visa
ir taip sakai scanf efektyviai eiti įdėti eilutę,
bet mes nežinome, kur čia dar yra,
taip mes ne iš tikrųjų skiriama atminties buferio.
Be to, ką tu taip pat nėra net pasakoja scanf?
Manau, kad tai buvo atminties riekė, ir tai buvo ne šiukšlių vertė,
, bet jūs vis dar nesako scanf kažką svarbaus.
[Studentų] Jei jis iš tikrųjų yra, Ampersand.
Ampersand, todėl šiuo atveju, tai gerai.
Nes buferis jau deklaruotas kaip rodyklė
* gabalas sintaksę, mums nereikia naudoti ampersendo
, nes ji jau adresas, bet aš manau, kad aš girdėjau jį čia.
[Studentų] Kaip didelis yra?
Geras, mes ne sakau scanf kaip didelis buferis yra,
, o tai reiškia, net jei buferis rodyklė,
mes sakome scanf, įdėti eilutę,
bet čia gali būti 2 baitai, tai gali būti 10 baitų, tai gali būti megabaitas.
Scanf neturi jokios idėjos, nes tai yra atminties riekė
matyt, tai nėra dar eilutę.
Tai tik eilutę, kai rašote simbolių ir \ 0 iki tos atminties riekė.
Dabar tai tik keletas atminties riekė.
Scanf nebus žinoti, kada sustoti parašydami tuo adresu.
>> Jei jūs prisimenate, kai praeityje pavyzdžių, kai aš atsitiktinai klaviatūros įvestą į
bando perpildymo buferio, ir mes kalbėjomės penktadienį, apie būtent tai.
Jei priešininkas kažkaip įleidžia į savo programą daug didesnę žodį
ar sakinį ar frazė, tada jūs tikėjotės, galite viršyta
daug atminties riekė, kurie gali turėti blogas pasekmes,
kaip visame pačios programos.
Mes turime išspręsti šią problemą kažkaip.
Leiskite man nutolinti ir eiti į šios programos 3 versija.
Štai šiek tiek geriau.
Šioje versijoje pastebėsite skirtumą.
Atitinka 16, aš vėl skelbiantis kintamasis vadinamas buferis,
bet kas tai yra?
Tai 16 simbolių masyvas.
Tai yra gerai, nes tai reiškia, aš dabar gali pasakyti scanf
čia yra tikrasis atminties riekė.
Jūs galite beveik galvoti apie masyvų dabar kaip rodykles,
nors jie faktiškai nėra lygiavertis.
Jie elgiasi skirtingai skirtinguose kontekstuose.
Bet tai tikrai tas atvejis, buferis nuorodas
16 gretimuose simbolių, nes tai, ką masyvas
ir buvo keletą savaičių dabar.
>> Čia aš čia sakau scanf riekė atminties.
Šį kartą, tai tikrai iš atminties riekė,
bet kodėl ši programa vis dar eksploatuojamas?
Kas negerai dar?
Jau sakiau duok man 16 baitų, bet-
[Studentų] Ką daryti, jei jie tipo daugiau nei 16?
Tiksliai, ką daryti, jei vartotojas įveda į 17 simbolių ar 1700 simbolių?
Iš tiesų, galime pamatyti, jei mes negalime užkliūti šios klaidos dabar.
Tai geriau, bet nėra tobula.
Leiskite man eiti į priekį ir kaupti šią programą, paleisti, kad scanf3.
Aš bėgsiu scanf3, styginių prašome: labas, ir mes, atrodo, bus gerai.
Leiskite man pabandyti šiek tiek ilgiau žmogus, hello there.
Gerai, tegul neturi hello there how are you today, "Enter".
Kaip rūšies pasisekė čia, tegul say hello how are you.
Damn it.
Gerai, kad mums pasisekė. Leiskite pamatyti, jei mes galime išspręsti šią problemą.
Ne, jis nesiruošia leisti man nukopijuoti.
Pabandykime tai vėl.
Viskas gerai, stovėti.
Mes pamatyti, kaip ilgai aš galiu apsimesti, kad sutelkti dėmesį, o dar tai daryti.
Damn it. Kad, o, iš tikrųjų.
Čia mes eiti.
Taškas.
>> Tai nemalonu, nors ji taip pat yra, tai taip pat yra vienas iš sujaukė šaltinių
rašyti programas, kurios klaidas, nes jie pasireiškia
tik vieną kartą, o kartais.
Realybė yra tai, kad net jei jūsų kodas yra visiškai neveikia,
gali tik visiškai neveikia vieną kartą, o
, nes kartais, iš esmės kas atsitinka, kai operacinės sistemos skiria
šiek tiek daugiau atminties, nei jums iš tikrųjų reikia, dėl bet kokios priežasties,
ir, kad niekas kitas naudoja atmintį, iš karto po to, kai savo riekė 16 simbolių,
todėl, jei jūs einate į 17, 18, 19, nepriklausomai nuo, tai nėra tokia baisi.
Dabar, kompiuteris, net jei jis nėra gedimų, tuo momentu,
kažkas ilgainiui gali naudoti baitų skaičių 17 arba 18 arba 19,
, kuriose pabrėžiama, kad jūs įtraukėte savo duomenis, nors ir pernelyg ilgas,
ketina gauti perrašyti potencialiai kitu funkcija.
Tai nebūtinai ketina likti sveiki,
bet ji nebūtinai sukelti seg kaltės.
Tačiau šiuo atveju, aš pagaliau pakankamai simbolių
kad aš iš esmės viršijo savo atminties segmentą, ir BAM,
operacinė sistema, sakė: "Deja, tai nieko gero, segmentavimas kaltė".
>> Ir pažiūrėkime dabar, jei tai, kas lieka čia mano kataloge
pastebėsite, kad turiu šį failą čia, core.
Atkreipkite dėmesį, kad tai dar kartą paragino core dump.
Tai iš esmės failas, kuriame savo programos atminties turinį
to momento, kai jis sudužo,
ir tiesiog pabandykite šiek tiek pavyzdį leiskite man eiti čia
ir paleisti gdb scanf3 ir tada nurodyti trečiojo argumento, vadinama pagrindinė,
ir pastebėsite čia, kad jei aš sąrašą kodą,
galėsime, kaip įprasta, su gdb pradėti vaikščioti per šią programą,
ir galiu paleisti ir kuo greičiau aš paspauskite žingsnio komandą gdb
kaip tik aš hit potencialiai Buggy eilutę po rašyti didžiulis eilutę,
Aš galėtų iš tikrųjų nustatyti jį čia.
Daugiau informacijos apie tai, nors, skyriuje kalbant apie pagrindinių sąvartynų
ir pan, kad jūs iš tikrųjų galite baksnoti aplink viduje core dump
ir pamatyti, ką linija programa nepavyko.
Bet tada rodykles ir adresais klausimų?
Nes šiandien mes ketiname pradėti vartoti savaime suprantamu dalyku, kad šie dalykai egzistuoja
ir mes žinome, ką jie yra.
Taip.
>> [Studentų] Kaip gi jūs neturite įdėti ampersendo daliai
Geras klausimas.
Kaip atvykti aš neturėjau įdėti simbolių masyvas šalia ampersendo, kaip aš anksčiau
su dauguma iš mūsų pavyzdžių?
Trumpas atsakymas yra, matricos yra šiek tiek ypatingas.
Jūs galite beveik manote, buferis, kaip iš tikrųjų yra adresas,
ir jis tiesiog taip atsitinka, kad tuo atveju, kad kvadratas laikiklis notacijos
yra patogiau, kad galėtume eiti į laikiklio 0 1, laikiklis,
laikiklis 2, be naudoti * žymėjimą.
Tai yra šiek tiek balto melas, nes matricas ir rodyklės
, iš tikrųjų yra šiek tiek skiriasi, tačiau jie gali dažnai, bet ne visada gali būti vartojami kaip sinonimai.
Trumpai tariant, kai funkcija laukiasi žymiklį į atminties riekė,
galite perduoti, kad adresas buvo grąžintas pagal malloc
ir mes pamatyti, malloc vėl prieš ilgas, ar galite perduoti jį masyvo vardą.
Jūs neturite ampersendo su matricomis, nes jie jau
iš esmės nori adresus.
Štai viena išimtis.
Skliaustus, kad jie ypatingas.
>> Ar jūs galėsite įdėti ampersendo prie buferio?
Ne šiuo atveju.
Kad neveiks nes, vėlgi, šio kampo atveju
kur matricos yra ne visai tikrųjų adresai.
Bet mes galbūt grįžti, kad iki kol su kitais pavyzdžiais.
Pabandykime išspręsti problemą čia.
Mes turime duomenų struktūra, kad mes buvo naudojant tam tikrą laiką, žinomas kaip masyvo.
Byla punktas, kad tai, ką mes tik turėjo.
Bet matricos turi šiek tiek upsides ir praradimas.
Matricos yra gražus, kodėl?
Kas yra vienas dalykas, kad jums patinka tiek, kiek jums patinka masyvų apie masyvų?
Kas patogu apie juos? Kas yra patrauklus?
Kodėl mes pristatyti juos į pirmąją vietą?
Taip.
[Studentų] Jos gali saugoti daug duomenų, ir jūs neturite naudoti visą dalykas.
Jūs galite naudoti skyrių.
Geras, masyvo galite saugoti daug duomenų,
ir jūs nebūtinai turite naudoti visa tai, todėl galite overallocate,
, kuris gali būti patogu, jei jūs nežinote, iš anksto, kaip daug ką galima tikėtis.
>> GetString yra puikus pavyzdys.
GetString, parašyta ne mums, neturi jokios idėjos, kiek simbolių galima tikėtis,
todėl tai, kad mes galime skirti gabaliukus vientisos atminties yra gera.
Matricos taip pat išspręsti problemą, mes matėme prieš porą savaičių dabar
jūsų kodas prasideda pereina į kažką labai prastai parengto.
Prisiminkite, kad aš sukūriau studentų struktūrą, pasišaukęs Dovydą,
ir tada, kad iš tikrųjų buvo alternatyva, nors,
kad kintamasis vadinamas vardą ir kito kintamojo pavadinimu, manau, namas,
kitas kintamasis vadinamas ID, nes toje istorija Aš tada norėjau pristatyti ką nors kita
patinka Rob į programą, taip, tada aš nusprendė palauk,
Man reikia pervadinti šiuos kintamuosius.
Susisiekime kasyklos NAME1, ID1, house1.
Susisiekime Rob NAME2 house2, ID2.
Bet tada palauk minutėlę, ką apie Tommy?
Tada mes turėjome tris kintamuosius.
Mes pristatėme kažkas kitas, keturių kintamųjų rinkinius.
Pradėjo gauti purvinas pasaulis labai greitai,
todėl mes pristatėme structs, o kas įtikinamų apie struct?
Ką C struct jums tai padaryti?
Tai tikrai nepatogu šiandien.
Ką? >> [Nesigirdi studentas atsakas]
Taip, būtent, Typedef leidžia jums sukurti naują duomenų tipą,
struct struct raktinį žodį, leidžia jums įdėti į kapsulę
konceptualiai susiję duomenų vienetų
, o po to jiems skambinti kažką panašaus studentas.
>> Kad buvo gerai, nes dabar mes galime modeliuoti
daug daugiau rūšiuoti konceptualiai atitinka studento sąvoka kintamasis
o ne savavališkai, turintys vieną eilutę, po vieną asmens tapatybę ir pan.
Matricos yra gražus, nes jie leidžia mums pradėti valyti savo kodą.
Bet kas yra neigiama masyvo?
, Ką galite daryti? Taip.
[Studentų] Jūs turite žinoti, kaip didelis jis yra.
Jūs turite žinoti, kaip didelis jis yra, todėl rūšies skausmas.
Tiems iš jūsų, ankstesnės programavimo patirties žinome, kad daug kalbų,
pavyzdžiui, "Java", galite paprašyti atminties riekė, specialiai masyvo,
kaip didelis, kurių ilgis, turtinės padėties, taip sakant, ir tai tikrai patogu.
C, jūs negalite net skambinti strlen bendrinis masyvo
nes strlen, nes žodis reiškia, yra tik stygos,
ir jūs galite išsiaiškinti, eilutės ilgis, nes šio žmogaus konvencijos
A \ 0, bet masyvo, bendrąja prasme, yra tik atminties riekė.
, Jei tai int masyvas, ten nebus kai specialus simbolis
pabaigoje laukia Jūsų.
Jūs turite prisiminti, masyvo ilgį.
Kitas masyvo neigiama, auginami savo galvą į save GetString.
Kas yra kitą masyvo neigiama?
Pone, tik tu ir aš šiandien.
[Nesigirdi studentas atsakas] >> Tai ką?
Jis deklaruojamas kamino.
Gerai, deklaruojamas kamino. Kodėl gi ne jums tai patinka?
[Studentų], nes jis gauna pakartotinai naudoti.
Ji gauna pakartotinai naudoti.
Gerai, jei jūs naudojate masyvą paskirstyti atmintį,
Pavyzdžiui, jūs negalite grįžti, nes tai ant kamino.
Gerai, kad trūkumas.
Ir kaip apie vieną su kita masyvo?
Kai jūs jį skirti, esate rūšies prisukamas, jei jums reikia daugiau vietos,
, nei masyvas.
>> Tada mes pristatėme, prisiminti, malloc, kuris davė mums galimybę dinamiškai paskirstyti atmintį.
Bet kas, jei mes bandėme kitą pasaulį apskritai?
Ką daryti, jei mes norėjome išspręsti keletą šių problemų
, kad mes, o ne-mano parkeris užmigo čia
ką daryti, jei mes, o ne norėjo iš esmės sukurti pasaulį, kad ne ilgiau kaip tai?
Tai masyvas, ir, žinoma, šios rūšies pablogėja, kai mes paspauskite masyvo pabaigos,
ir aš dabar nebeturi kito sveikojo skaičiaus ar kitokio pobūdžio vietos.
Ką daryti, jei mes tarsi Preemptively pasakyti, kodėl ne mes atsipalaiduoti
šis reikalavimas, kad visi šie atminties gabaliukus ribotis atgal atgal,
ir kodėl gi ne, kai man reikia int arba char
tik duok man vietos vienam iš jų?
Ir kai aš turiu kitą, duok man kitą erdvę,
ir kai man reikia kito, duok man kitą erdvę.
Kurio privalumas yra tai, kad, jei kas nors
per čia mano atminties, ne big deal.
Imsiu šį papildomą atminties riekė čia tai jo.
>> Dabar, tik sugavimo čia yra tai, kad beveik jaučiasi turiu
visa krūva įvairių kintamųjų.
Tai jaučiasi penkių skirtingų kintamųjų, galinčių daryti poveikį.
Bet kas, jei mes pavogti idėją nuo styginių
kurią mes kažkaip susieti šiuos dalykus kartu konceptualiai, ir ką daryti, jei aš padariau tai?
Tai yra mano labai prastai parengtas rodyklė.
Tačiau tarkime, kad kiekvienas iš šių atminties gabaliukus
atkreipė dėmesį į kitą, ir šis vaikinas, kuris neturi broliai ir seserys savo teisę,
neturi tokio rodyklę.
Tai yra iš tikrųjų, tai, kas vadinama susieta sąrašas.
Tai nauja duomenų struktūra, kuri leidžia mums skirti atminties riekė,
tada kitą, tada kitą, tada kitą, bet kuriuo metu mes norime
programos metu, ir mes prisiminti, kad jie visi kažkaip susiję
pažodžiui Grupavimo juos kartu, o mes padarėme, kad pictorially su rodykle.
Bet kodu, koks būtų mechanizmas, per kurį galėtų kažkaip sujungti,
beveik kaip nulio, viena į kitą riekė riekė?
Mes galime naudoti rodyklę, tiesa?
Nes tikrai rodyklė, kad manimi vyksta viršutiniame kairiajame aikštėje,
šis vaikinas šį vieną, gali būti viduje šioje aikštėje
ne tik kai int, ne tik kai char, bet kas, jei aš iš tikrųjų skiriama
šiek tiek daugiau erdvės, kad dabar,
kiekvienas mano gabaliukus atminties, nors tai kainuos man,
dabar atrodo šiek tiek stačiakampio formos, kai vienas iš atminties gabaliukus
naudojamas numerį, kaip ir skaičiumi 1,
ir tada, jei šis vaikinas saugo skaitmeniu "2",
tai kitas gabalas atminties naudojama rodykle,
arba konkrečiau, žymeklis.
Ir manau, kad aš čia įrašykite šį numerį iš 3, o aš naudoju tai, pabrėžiama, kad vaikinas,
ir dabar šis vaikinas, tarkime, aš tik noriu tris tokius gabaliukus atminties.
Aš nubrėžti liniją, kad, nurodant null.
Nėra jokių papildomų pobūdis.
>> Iš tiesų, tai, kaip mes galime eiti apie įgyvendinimo
kažkas, kad vadinama susieta sąrašas.
Sąrašas nauja duomenų struktūra, o tai yra pirmasis žingsnis link
daug mėgėjas duomenų struktūras, kad pradėti spręsti problemas
kartu "Facebook" tipo problemų linijų ir tipo "Google" problemų
kur jūs turite didelius duomenų rinkinius, ir ji nebepalaiko gabalai jį
laikyti viską Kaimynystėje ir naudoti kažką panašaus į tiesinės paieškos
ar net kažkas panašaus dvejetainis paieškos.
Jūs norite dar geresnių rodymo laikus.
Iš tiesų, viena Šventosios Grails mes kalbame apie vėliau šią savaitę arba kitą
yra algoritmas, kurio trukmė yra pastovi.
Kitaip tariant, ji visada mano pačios trukmės laikotarpį, nesvarbu,
kaip didelis indėlis yra, ir kad iš tikrųjų būtų įtikinamų,
netgi labiau nei kas nors logaritminis.
Kas tai yra ekrane čia?
Kiekviena iš stačiakampių, yra būtent tai, ką aš ką tik piešė rankomis.
Bet dalykas kairėje yra specialus kintamasis.
Tai bus viena rodyklė, nes vienas kabliuko
susietą sąrašą, kaip šie dalykai yra vadinami
yra, kad jūs turite pakabinti ant vieno galo susietojo sąrašą.
>> Tiesiog patinka su eilutę, jūs turite žinoti, pirmą char adresą.
Tas pats spręsti dėl susijusių sąrašų.
Jūs turite žinoti, kad pirmą riekė atminties adresą
, nes iš ten, jūs galite pasiekti kiekvieną kitą.
Neigiama.
Kokia kaina mes mokėti už šio universalumo dinamiškai
didelis duomenų struktūra, kad, jei mes kada nors reikia daugiau atminties, gerai,
tiesiog skirti dar vieną gabalą ir parengti rodyklę
sena į naują sąrašo uodega?
Taip.
[Studentų] Tai užtrunka maždaug dvigubai daug vietos.
Tai užtrunka dvigubai daug vietos, todėl tai tikrai neigiama, ir mes matėme tai
kompromisas prieš tarp laiko ir erdvės ir lankstumo
dabar, mes turime ne 32 bitus kiekvienam iš šių numerių.
Mums tikrai reikia 64, 32 skaičių ir 32 už rodyklė.
Bet hey, aš turiu 2 GB RAM.
Pridėti kitą 32 bitų čia ir čia neatrodo, kad didelis spręsti.
Tačiau kai duomenų rinkiniai dideli, tai tikrai prideda iki tiesiog dvigubai tiek, kiek.
Kaip dar neigiama dabar, ar ką funkciją mes pasiduoti,
jei mes atstovaujame dalykų sąrašus su susietą sąrašą ir ne masyvo?
[Studentų] Jūs negalite feed jį atgal.
Jūs negalite feed jį atgal, todėl jūs tipo prisukamas, jei jūs vaikščioti
iš kairės į dešinę linijos ar while cikle
ir tada jūs suprasite, "O, aš noriu grįžti prie sąrašo pradžioje."
Jūs negalite, nes šių patarimų tik eiti iš kairės į dešinę, kaip strėlės rodo.
>> Dabar galite prisiminti sąrašo pradžioje su kito kintamojo,
bet tai sudėtingumą reikia nepamiršti.
Masyvas, nesvarbu, kaip toli jums eiti, jūs visada galite padaryti minuso, minusas, minusas, atėmus
ir grįžti atgal, iš kur tu atėjai.
Kaip dar neigiama čia? Taip.
[Nesigirdi studentas klausimas]
, Todėl Jūs galite jūs iš tikrųjų tiesiog pasiūlė duomenų struktūrą, vadinamas dvigubai susijęs sąrašas
ir iš tiesų, jums reikės pridėti dar vieną žymiklį į kiekvieną iš šių stačiakampių
kad eina kita kryptimi, aukštyn
dabar, jums gali eiti į priekį ir atgal,
kurių neigiama dabar jūs naudojate tris kartus daugiau atminties, kaip mes panaudojome
ir sudėtingumą, taip pat pridedant kodą, jūs turite parašyti, teisę ją gauti.
Tačiau visa tai yra galbūt labai pagrįstų kompromisų, jei atstatymas yra svarbesnis.
Taip.
[Studentų] Jūs taip pat negali turėti 2D susietą sąrašą.
Gerai, jūs negalite iš tikrųjų turi 2D susijęs sąrašą.
Galima. Tai toli gražu ne taip paprasta, kaip masyvo.
Kaip masyvo, jūs skliaustai atidaromi uždarą skliaustelius, skliaustai atidaromi, uždaryti laikiklį,
ir jūs gaunate šiek tiek 2-dimensijų struktūrą.
Jūs galite įgyvendinti 2-dimensijų susijęs sąrašą
jei jūs add-proposed-trečiąją žymeklį į kiekvieną iš šių dalykų,
ir jei jūs manote apie kito sąrašo, dar ne 3D stilius
iš ekrano į mus visus, o tai tik dar vienas tam tikros rūšies grandinės.
Mes galime tai padaryti, bet tai nėra taip paprasta, kaip rašyti skliaustai atidaromi, kvadratas laikiklis. Taip.
[Nesigirdi studentas klausimas]
Gerai, kad tai yra realus skandalistas.
>> Šie algoritmai, kad mes pined daugiau, kaip oh, dvejetainis paieškos
skaičių masyvo galite ieškoti ant lentos
arba per telefono knygą, daug greičiau, jei jūs naudojate skaldyk ir valdyk
ir dvejetainis paieškos algoritmas, bet dvejetainis paieškos reikalaujama dvi prielaidas.
Vienas iš jų, kad duomenys buvo surūšiuoti.
Dabar mes galime matyt išlaikyti šią surūšiuoti,
tad gal tai ne problema, bet dvejetainis paieškos pat daroma prielaida,
, kad jūs turėjo laisvą prieigą prie numerių sąraše,
ir pasirinkimas leidžia jums turėti laisvą prieigą, ir laisvą prieigą,
Aš turiu galvoje, jei jūs masyvą, kiek laiko tai užtruks jums
patekti į laikiklio 0?
Viena operacija, tiesiog naudokite [0] ir tu teisus ten.
Kiek žingsnių reikia, kad patekti į 10 vietą?
Vienas žingsnis, jums tiesiog eikite į [10] ir jūs ten.
Priešingai, kaip jums gauti į susietą sąrašą 10 sveikąjį skaičių?
Jūs turite pradėti iš pradžių, nes jūs tik prisiminti,
įsimenamas susietą sąrašo pradžioje, kaip ir eilutės
savo pirmojo char adresą, ir rasti, kad 10 int
arba, kad 10 simbolių į eilutę, jūs turite ieškoti visoje Damn Thing.
>> Vėlgi, mes ne spręsti mūsų problemų.
Mes pristatome naujus, bet tai tikrai priklauso nuo to, ką jūs bandote kurti.
Įgyvendinimo, mes galime skolintis idėja, kad studentas struktūros.
Sintaksė yra labai panaši, išskyrus dabar, idėja yra šiek tiek daugiau abstraktus
nei namas, vardas ir pavardė ir ID.
Bet aš siūlau, kad galėtume turėti duomenų struktūrą C
tai yra vadinama mazgas, paskutinis žodis skaidrėje rodo,
viduje mazgas, mazgas yra tik bendrinis informatikos konteineris.
Tai paprastai sudarytas apskritimas ar kvadratas ar stačiakampis, kaip mes padarėme.
Ir šios duomenų struktūros, mes turime int, n,
taip, kad I norite išsaugoti.
Bet kas tai yra antra eilutė, Struct mazgas * šalia?
Kodėl tai yra teisinga, ar kokį vaidmenį tai, ką žaisti,
nors tai šiek tiek paslaptingas, iš pirmo žvilgsnio?
Taip.
[Nesigirdi studentas atsakas]
Tiksliai, todėl * tarsi grobio, kad tai tam tikra rodyklė.
Šio rodyklė vardas savavališkai kitą,
, tačiau mes galime jį pavadino ką norime, bet ką tai rodyklė taškas?
[Studentų] Kitas mazgas. >> Būtent, ji nurodo kitas toks mazgas.
>> Dabar, tai yra tarsi C. smalsumo
Prisiminkite, kad C skaito sudarytojas viršaus į apačią, iš kairės į dešinę,
tai reiškia, jei, tai yra šiek tiek skiriasi nuo to, ką mes padarėme su mokiniu.
Kai mes apibrėžta studentas, mes iš tikrųjų nebuvo įdėjo žodį.
Jis tiesiog pasakė Typedef.
Tada mes turėjome int id, String vardas, String namas,
ir tada studentas struct apačioje.
Ši deklaracija yra šiek tiek kitoks, nes,
vėl, C kompiliatorius yra šiek tiek kvailas.
Tai tik ketina skaityti iš viršaus į apačią,
todėl, jei jis pasiekia 2-oji linija
toliau yra paskelbta ir ji mato, oi, čia kintamasis vadinamas kitą.
Tai rodyklė struct mazgo.
Kompiliatorių suprasti, kas yra Struct mazgas?
Aš niekada girdėjote apie prieš šio dalyko,
, nes žodis mazgas gali kitaip pasirodyti
iki dugno, todėl yra šis rezervo.
Jūs turite pasakyti struct mazgas, kurį galite sutrumpinti vėliau
dėka Typedef žemai čia, bet tai yra dėl
mes nuorodų struktūra pati viduje struktūros.
Štai kabliuko nėra.
>> Keletas įdomių problemų atsirasti.
Mes turime numerių sąrašą. Kaip mes įterpti į jį?
Kaip mes ieškoti? Kaip mes ištrinti iš jo?
Ypač dabar, kad mes turime valdyti visus šiuos patarimus.
Jūs manėte, patarimų buvo tarsi iš proto-lenkimo
kai turėjo vienas iš jų tiesiog bando skaityti int.
Dabar mes turime visą sąrašą verta manipuliuoti.
Kodėl ne mes atsižvelgti į mūsų 5-minučių pertrauką, ir tada mes atnešti
kai ant scenos žmonės daryti būtent tai.
>> C yra daug smagiau, kai jis veikė.
Kas būtų tiesiog norite būti pirmas?
Gerai, ateiti iki. Jūs esate pirmas.
Kas norėtų būti 9? Gerai, 9.
Kaip apie 9? 17?
Mažai klika čia. 22 ir 26 toje pirmoje eilėje.
Ir tada, kaip apie ką nors ten buvo pažymėti.
Jūs esate 34. Gerai, 34, ateiti iki.
Pirma, tai ten. Gerai, iš jūsų vaikinai visi keturi.
Ir kas mes sakome, 9?
Kas yra mūsų 9?
, Kuris tikrai nori būti 9? Viskas gerai, nagi, būti 9.
Čia mes einame.
34, mes susitikti su jumis ten.
Pirmoji dalis yra padaryti sau atrodyti, kad.
26, 22, 17, geras.
Jei jūs galite stovėti ne į tą pusę, nes mes ketiname malloc jums akimirką.
>> Gerai, gerai.
Gerai, puikiai, todėl galime užduoti porą klausimų.
Ir iš tikrųjų, kas yra jūsų vardas? >> Anita.
Anita, gerai, eikš čia.
Anita ketina padėti mums tarsi išspręsti vieną gana paprastą klausimą pirmąjį,
kaip jums atrodo, ar ne vertė yra sąraše?
Dabar pastebėti, kad, pirma, sudarė čia Lucas,
yra šiek tiek kitoks, ir todėl jo gabalas popieriaus sąmoningai į šoną
, nes tai nėra labai aukštas ir neužima kuo daugiau bitų,
nors techniškai jis yra tokio paties dydžio popieriaus, yra pasukti.
Bet jis šiek tiek skiriasi tuo, kad jis yra tik 32 bitų rodykle,
ir visi šie vaikinai yra 64 bitų, iš kurių pusė yra skaičius, iš kurių pusė yra žymeklis.
Bet rodyklė nėra vaizduojamas, todėl, jei jus vaikinai galėtų šiek tiek nerangiai
naudoti savo kairę ranką, pabrėžiama, kad asmuo šalia tavęs.
Ir jūs numeris 34. Koks tavo vardas?
Ari.
Ari, kad iš tikrųjų, laikykite popierių į savo dešinę ranką ir kairę ranka eina tiesiai žemyn.
Jūs pareiškiate null kairėje.
>> Dabar mūsų žmogaus vaizdas yra labai nuosekli.
Iš tikrųjų tai yra kaip patarimų dirbti.
Ir, jei galite Menkė šiek tiek tokiu būdu, kad aš ne į savo kelią.
Anita čia, rasti man 22 skaičių,
bet prisiimti ne žmonės telpa popieriaus lapų apribojimą,
bet tai yra sąrašas, ir jūs turite tik Lucas pradėti
, nes jis yra tiesiog pirmas rodyklė.
Tarkime, jūs sau yra žymeklis, ir kad jūs taip pat turi galimybę atkreipti dėmesį į kažką.
Kodėl gi ne jums pradėti, nurodydami, ką Lucas nukreipta?
Geras, ir leiskite man priimti tai iš čia.
Tik diskusijos dėlei, leiskite man atsigriebti tuščią puslapį.
Kaip rašoma jūsų vardas? >> Anita.
Gerai, Anita.
Tarkime, mazgas * anita = Lucas.
Na, mes neturėtume skambinti jums Lucas. Turėtume skambinti pirmą kartą.
Kodėl tai iš tikrųjų atitinka su tikrove čia?
Vienas, pirmiausia, jau egzistuoja.
Pirma buvo skirta turbūt kažkur čia.
Mazgas * pirma ir tai buvo skirta sąrašą kažkaip.
Aš nežinau, kaip tai atsitiko. Tai atsitiko prieš klasę pradėjo.
Šis susijęs su žmonių sąrašas buvo sukurtas.
, O šiuo metu šio punkto istorija-tai yra viskas "Facebook", matyt, vėliau-
Šiuo istorija Anita buvo inicijuoti, turi būti lygus, pirmiausia,
bet tai nereiškia, kad Anita punktai Lucas.
Atvirkščiai, ji atkreipia į tai, ką jis nurodo
nes tas pats adresas, tai viduje Lucas "32 bits - 1, 2, 3 -
dabar taip pat viduje Anita "32 bitų - 1, 2, 3.
>> Dabar rasti 22. Kaip tu apie tai darote?
Kas tai? >> Point whatever.
Atkreipti whatever, kad eiti į priekį ir veikti tai, kaip geriausiai galite čia.
Gerai, gerai, ir dabar jūs nukreipta į, koks tavo vardas su 22?
Ramonas. >> Ramonas, todėl Ramonas telpa 22.
Jūs jau padaryta čekį.
Ar Ramonas == 22 ir jei taip, pavyzdžiui, mes galime grįžti tiesa.
Leiskite man, o šie vaikinai stoviu čia šiek tiek nerangiai
leiskite man padaryti kažką greitai, kaip Bool rasti.
Aš ruošiuosi eiti į priekį ir pasakyti (mazgas * sąrašas, int n).
Aš būsiu su jumis vaikinai. Aš tiesiog parašyti šiek tiek kodo.
Ir dabar aš ruošiuosi eiti į priekį ir tai padaryti, mazgas * anita = sąrašą.
Ir aš ruošiuosi eiti į priekį ir pasakyti, o (Anita! = NULL).
>> Metafora čia truputį ištempti, bet o (Anita! = NULL), ką aš noriu padaryti,?
Man reikia šiek tiek nuorodų kelią
sveikasis skaičius, kad Anita nukreipta.
Praeityje, kai mes turėjome struktūras, kurios mazgas yra,
mes naudojome taško žymėjimą, ir mes norime pasakyti kažką panašaus
anita.n, bet problema čia yra ta, kad Anita struct savaime nėra.
Kas ji yra?
Ji yra žymeklis, kad tikrai, jei norime naudoti šią dot žymėjimą
ir tai vyksta ieškoti sąmoningai šiek tiek paslaptingas
mes turime kažką daryti, pavyzdžiui, eiti į Nepriklausomai Anita kaire ranka nukreipta į
ir tada gauti lauką pavadinimu n.
Anita yra rodyklė, bet, kas yra * anita?
Kaip jums atrodo, kai jūs einate į ką Anita nukreipta?
Struct mazgas ir mazgas, išėmimą iš apyvartos, turi lauką, vadinamą n
nes ji, prisiminti, šie 2 laukai, šalia ir N,
kad mes matėme prieš akimirką čia.
>> Faktiškai imituoti kodu,
galėtume tai padaryti ir pasakyti, ar ((* anita). n == n), n, kad aš ieškau.
Atkreipkite dėmesį, kad funkcija buvo perduota skaičius man rūpi.
Tada aš galiu eiti į priekį ir padaryti kažką panašaus Return TRUE.
Kitur, jei tai ne tas atvejis, ką aš noriu daryti?
Kaip man išversti kodas Anita taip ir padarė intuityviai pėsčiomis per sąrašą?
Ką turėčiau daryti, čia, kad būtų imituotos Anita šį žingsnį į kairę, kad žingsnis į kairę?
[Nesigirdi studentas atsakas] >> Kas tai?
[Nesigirdi studentas atsakas]
Gera, o ne bloga idėja, bet anksčiau, kai mes padarėme tai, mes baigsite Anita + +
, nes tai būtų pridėti 1 Anita
, kuri paprastai nurodo kitą asmenį, kaip Ramon,
arba asmuo, šalia jo, arba šalia jo asmuo žemyn linija.
Bet tai dar ne gana gera čia, nes tai, ką šis dalykas atrodo kaip atminties?
Ne todėl, kad. Turime išjungti.
Atrodo, kad ši atminties, ir nors aš paruošiau 1 ir 2 ir 3 arti vienas kito,
jei mes tikrai imituoti tai gali jus vaikinai, o dar nukreipta į tų pačių žmonių,
kai kurie iš jūsų atsitiktinį žingsnį atgal, kai kurie iš jūsų atsitiktinis žingsnis į priekį?
>> Ši netvarka yra vis dar susieta sąrašas
tačiau šie vaikinai gali būti bet kur į atmintį,
taip Anita + + yra nesiruošia dirbti, kodėl?
Kas LOCATION anita + +?
Kas žino.
Tai kai kita vertė, kad tiesiog taip atsitinka, turi būti tarpininke
tarp visų šių atsitiktinai mazgų, nes mes ne naudojant masyvą.
Skyrėme vienas iš šių mazgų atskirai.
Gerai, jei jus vaikinai galite valyti save atgal į viršų.
Leiskite man pasiūlyti, kad vietoj anita + +, mes, o ne daryti anita gauna
gerai, tai kodėl ne mes einame kokia Anita nukreipta ir tada daryti. toliau?
Kitaip tariant, mes einame į Ramon, kas holdingo kurios numeris 22,
ir tada. šalia yra, nors Anita būtų kopijuoti Jo kairė ranka žymeklį.
Bet ji negali eiti toliau nei Ramon, nes mes radome 22.
Bet tai būtų idėja. Dabar, tai yra dievas baisu netvarka.
Sąžiningai, niekas kada nors prisiminti šią sintaksę, ir, laimei
tai tikrai šiek tiek sąmoningas-Oh, jūs ne iš tikrųjų matyti, ką parašiau.
Tai būtų patrauklesni, jei galėtumėte. Voila!
>> Užkulisiuose, aš išspręsti šią problemą šiuo būdu.
Anita, žengti šį žingsnį į kairę,
pirma, mes eiti tuo adresu, Anita nukreipta į
ir kur ji ras ne tik n, kurį mes ką tik patikrino palyginimas labui,
bet jūs taip pat rasti kitą - šiuo atveju,
Ramon kaire ranka, nukreipta į kitą mazgą sąraše.
Bet tai yra dievas baisu netvarka, aš paminėjo anksčiau,
tačiau paaiškėja, C leidžia mums supaprastinti šią.
Vietoj to, kad raštu (* anita), mes galime, o ne tiesiog parašyti Anita> N,
ir tai yra lygiai toks pats dalykas funkciškai, bet tai daug daugiau intuityvi,
ir tai daug labiau atitiktų vaizdą, kad mes buvo piešimo
visą šį laiką naudojant rodykles.
>> Galiausiai, ką mes turime padaryti, šios programos pabaigoje?
Yra viena eilutė kodo likusių.
Grįžti ką?
Klaidinga, nes, jei mes gauname per visą while cikle
ir Anita, iš tiesų, yra nulis, tai reiškia, kad ji nuėjo visą kelią į sąrašo pabaigoje
kur ji buvo nukreipta ne-koks tavo vardas dar kartą?
Ari Ari. >> Kairė ranka, kuris yra niekinis.
Anita dabar yra nulis, ir aš suprantu, jūs tiesiog čia stovėjo nerangiai nežinioje
nes aš ruošiuosi į monologą,
bet mes įtraukti jus vėl vos akimirką.
Anita yra niekinis tuo istorija tašką, todėl while cikle baigiasi,
ir mes turime gražins false, nes, jei ji gavo visą kelią iki Ari NULL pointeris
ten buvo ne skaičius, kad ji siekė sąraše.
Mes galime išvalyti iki pat, tačiau tai yra gana gera įgyvendinimo
Sankryþos funkcija, rasti funkcijos susietos sąrašą.
Jis vis dar yra linijinis paieška, bet tai nėra taip paprasta, kaip + + rodyklė
+ + i kintamasis, nes dabar mes galime negali atspėti
kur kiekvienas iš šių mazgų yra atminties.
Mes turime tiesiog sekti duonos trupinių takas arba, tiksliau,
rodyklės, gauti iš vieno mazgo į kitą.
>> Dabar pabandykime dar vieną. Anita, jūs norite grįžti čia?
Kodėl ne mes einame į priekį ir paskirti po vieną asmenį iš auditorijos?
Malloc-koks tavo vardas? >> Rebecca.
Rebecca. Rebecca buvo malloced iš auditorijos,
ir ji saugoti, kurios numeris 55.
Ir po ranka tikslas dabar yra Anita įterpti
Rebecca į susietą sąrašą čia savo tinkamoje vietoje.
Nagi čia for a moment.
Aš padariau kažką panašaus į tai.
Aš padariau mazgas *. Ir koks tavo vardas dar kartą?
Rebecca. >> Rebecca, gerai.
Rebecca gauna malloc (sizeof (mazgas)).
Tiesiog kaip ir skyrėme anksčiau, dalykų, pavyzdžiui, studentams ir Papuošalą
mums reikia mazgo dydį, todėl dabar Rebecca
yra nukreipta į tai, ką?
Rebecca jos viduje turi du laukus, iš kurių vienas yra 55.
Darykime ką, Rebecca-> = 55.
Bet tada rebecca-> Kitas turėtų būti kaip dabar, jos ranka yra natūra, kuris žino,?
Ji nukreipta į kai šiukšlių vertės, tai kodėl gi ne į gera priemonė
mes bent jau tai padaryti taip, kad kairė ranka dabar jos pusėje.
Dabar Anita, išgerkite ją iš čia.
Turite Rebecca, kuriems buvo skirtos.
Eiti į priekį ir rasti, kur turėtume Rebecca.
Gerai, labai gerai.
Gerai, gerai, ir dabar mes turime jums pateikti šiek tiek krypties,
todėl jūs pasiekėte Ario.
Jo kairė ranka yra niekinis, bet Rebecca aiškiai priklauso į dešinę,
taip, kaip mes turime pakeisti šią susietą sąrašą
siekiant įtraukti Rebecca į tinkamą vietą?
, Jei galėtumėte tiesiog perkelti žmonių kairę rankas aplink, kiek reikia,
mes jums išspręsti šią problemą, kad taip.
Gerai, gerai, o tuo tarpu, Rebecca kaire ranka dabar šalia jos.
>> Tai buvo labai lengva.
Pabandykime skiriant mes beveik jau padaryta, 20.
Gerai, ateiti iki.
20 buvo skirta, todėl leiskite man eiti į priekį ir dar kartą pasakyti, čia
mes ką tik padaryta mazgas * Saad.
Mes turime malloc (sizeof (mazgas)).
Mes tada daryti tą patį tiksliai sintaksę, kaip mes padarėme prieš, 20
ir aš padarysiu next = NULL, ir dabar jis iki Anita
įterpti į susietą sąrašą, jei galima žaisti, kad tą patį vaidmenį.
Vykdyti.
Gerai, gerai.
Dabar pagalvokite, prieš pradėdami juda į kairę rankas aplink.
Jūs iki šiol gavo labiausiai nepatogios vaidmenį šiandien.
Kurio ranką turėtų būti perkeltas pirmas?
Gerai, palauk, aš klausos kai ne.
, Jei kai kurie žmonės būtų mandagiai patinka padėti išspręsti nepatogią padėtį čia.
Kieno kairė ranka turėtų būti atnaujintas galbūt? Taip.
[Studentų] Saad.
Gerai, Saad, kodėl, nors?
[Nesigirdi studentas atsakas]
Gerai, nes jei mes einame-koks tavo vardas? >> Maršalo
Marshall, jei mes einame į ranką null
dabar mes tiesiog našlaičiais keturi žmonės šiame sąraše
, nes jis buvo vienintelis dalykas, nukreipta į Ramon ir kiekvienas į kairę,
atnaujinti, kad žymeklį pirmą kartą buvo blogas.
Leiskite anuliuoti, kad.
Gera, ir dabar eiti į priekį ir perkelti atitinkamą kairę ranką, nukreipta į Ramon.
Tai jaučiasi šiek tiek nereikalingas.
Dabar yra du žmonės, rodančių, Ramon, bet tai gerai
nes dabar kaip kitaip mes atnaujinti šį sąrašą?
Kas kita vertus, turi judėti?
Puikus, dabar mes prarado atmintį?
Ne, taip gerai, galime pamatyti, jei mes galime padalyti dar kartą.
>> Paskutinį kartą, Mallocing numeris 5.
Visi atgal būdas, nagi žemyn.
Tai labai įdomi.
[Plojimai]
Koks tavo vardas? >> Ron.
Ron, gerai, jūs malloced kaip 5 numeriu.
Mes ką tik įvykdytas kodą, kuris beveik identiškas šių
tik kitu pavadinimu.
Puikus.
Dabar Anita, geros kloties, įterpiant į sąrašą 5.
Geras, ir?
Puikus, todėl tai yra tikrai trečiasis iš trijų visų susirgimų.
Mes pirmą kartą buvo kažkas pabaigoje, Rebecca.
Mes tada buvo kažkas per vidurį.
Dabar mes turime ką nors pradžioje, ir šiame pavyzdyje,
dabar mes pirmą kartą teko atnaujinti Lucas
nes pirmasis elementas sąraše dabar turi atkreipti naujas mazgas,
kurie, savo ruožtu, yra nukreipta mazgo numeris 9.
>> Tai buvo labai nepatogu demonstravimas, aš tikiu,
todėl didelis audringi plojimai šie vaikinai, jei galėtumėte.
Gražiai padaryta.
Štai ir viskas. Galite palikti popieriaus lapų, šiek tiek atminties.
Pasirodo, kad tai daryti kodas
yra ne visai taip paprasta, kaip tiesiog perkelti rankas aplink
ir rodo, patarimų įvairių dalykų.
Bet suprantame, kad kai jis ateina laikas įgyvendinti kažką panašaus
susijęs sąrašas ar jo variantas, jei jums sutelkti dėmesį į tikrai
šie pagrindiniai pagrindai, kąsnio dydžio problemos, turiu išsiaiškinti,
tai ranka ar tai ranka, reikia suprasti, kad tai, kas kitaip gana sudėtinga programa
, iš tiesų, gali būti sumažintas iki gana paprastų statybinių blokų, kaip šis.
>> Paimkime dalykų sudėtingesnių kryptimi.
Dabar mes turime iš susietų sąrašo sąvoka.
Mes taip pat turime dėl šio pasiūlymo atgal yra dvigubai susijęs sąrašas,
, kuris atrodo beveik tas pats, bet dabar mes turime dvi rodykles viduje struct
vietoj vieno, ir mes turbūt galėtų skambinti tos rodykles ankstesniojo ir kito
arba į kairę arba į dešinę, bet mes, tiesą sakant, reikia du iš jų.
Kodas būtų šiek tiek aktyviau dalyvauti.
Anita būtų turėjusi daugiau dirbti čia ant scenos.
Bet mes tikrai galėtų įgyvendinti tokios struktūros.
Važiavimo laikas, nors, kas būtų važiavimo laikas
Anita rasti skaičiaus n susietos sąraše dabar?
Vis dar didelis O n, todėl ne geriau ne linijinis paieška.
Mes negalime daryti Dvejetainė paieška, nors vėl.
Kodėl, kad byla? Jūs negalite šokinėti.
, Nors mes akivaizdžiai pamatyti visas scenoje žmones,
ir Anita galėjo eyeballed jį ir tarė: "Čia yra sąrašo viduryje"
ji negalėjo žinoti, kad, jei ji buvo kompiuterinė programa
nes vienintelis dalykas, ji turėjo sklende scenarijaus pradžioje
Lucas, kuris buvo pirmasis žymeklis.
Ji būtinai turi sekti tuos ryšius,
skaičiuojant savo kelią, kol ji rado maždaug viduryje,
ir net tada, ji nesiruošia žinoti, kai ji pasiekė vidurį
nebent ji eina visą kelią iki galo išsiaiškinti, kiek yra,
backtracks, ir kad taip pat būtų sunku, nebent jūs turėjote
dvigubai susijęs sąrašas tam tikros rūšies.
>> Tam tikrų problemų sprendimas šiandien, bet įvedant kitus.
Ką apskritai apie skirtingas duomenų struktūros?
Tai Mather House padėklai nuotrauka,
ir šiuo atveju, mes turime duomenų struktūrą, mes taip pat rūšies jau kalbėti apie.
Mes kalbėjome apie kamino atminties,
ir tai tarsi sąmoningai pavadintas, nes kamino atminties
iš esmės yra duomenų struktūra, kad yra vis daugiau ir daugiau dalykų Sluoksniuotas ant jo.
Bet įdomus dalykas, apie kamino, kaip yra šiuo atveju, iš tikrųjų,
yra tai, kad specialios rūšies duomenų struktūros.
Tai duomenų struktūra, pagal kurią pirmasis elementas
yra paskutinis elementas.
Jei esate pirmasis dėklas turi būti įdėti į steką,
jūs ketinate būti deja paskutinis dėklas būti išbraukti iš kamino,
ir tai nebūtinai yra geras dalykas.
Priešingai, jūs galite galvoti apie tai, atvirkščiai,
paskutinis yra pirmas išėjo ".
>> Dabar visi scenarijai ateiti į galvą, kai kamino
duomenų struktūra, kur jūs turite, kad nuosavybė
in, first out, iš tikrųjų yra įtikinamų?
Yra tai, kad geras dalykas? Yra tai, kad yra blogas dalykas?
Tai tikrai blogas dalykas, jei padėklai buvo ne visi identiški
ir jie buvo visi specializuota įvairių spalvų arba Papuošalą,
ir norimą spalvą visi apačioje būdas.
Žinoma, jūs negalite gauti, kad be didelių pastangų.
Jūs turite pradėti iš viršaus ir dirbti savo kelią žemyn.
Be to, ką daryti, jei jums buvo viena iš šių ventiliatoriaus berniukai
kas laukia visą naktį bando gauti "iPhone" ir linijų iki
vietoje, kaip ši?
Ar nebūtų puiku, jei "Apple" parduotuvė
kamino duomenų struktūra?
Yay? Dargi?
Tai tik tiems žmonėms, kurie rodo iki paskutiniu minutę
ir tada gauti nupešti eilę.
Ir iš tiesų, tai, kad aš taip linkę pasakyti eilę
iš tiesų yra suderinamas su tuo, ką mes vadiname šios rūšies duomenų struktūros,
vienas iš tikrųjų, kai užsakymas yra svarbu,
, ir jūs norite, kad pirmasis turi būti pirmasis
jei tik Žmogiškojo teisingumo labui.
Mes paprastai vadiname eilė duomenų struktūra.
>> Pasirodo, be susijusių su sąrašų, mes galime pradėti naudoti tas pačias pagrindines idėjas
ir pradėti kurti naujų ir skirtingų tipų sprendimų problemų.
Pavyzdžiui, kamino, mes galime atstovauti kamino
naudojant duomenų struktūrą, kaip tai, aš norėčiau pasiūlyti.
Šiuo atveju, aš paskelbė struct, ir aš sakė šios struktūros viduje
yra skaičių masyvas ir tada kintamasis vadinamas dydis,
ir aš einu skambinti šis dalykas kamino.
Dabar kodėl tai faktiškai dirba?
Kamino, galėčiau daryti tai veiksmingai kaip masyvo ekrane.
Čia yra mano kamino. Tie, kurie mano numeriai.
Ir mes parengti juos, nes tai, tai, tai, tai, tai.
Ir tada aš turiu kai kurių kitų duomenų narys čia
kuris yra vadinamas dydis, todėl tai yra dydis, ir tai yra numeriai,
ir kolektyviai, čia visa iPad atstovauja vieną kamino struktūrą.
Dabar, pagal nutylėjimą, dydis, manoma, turite būti inicializuoti iki 0,
ir tai, kas viduje skaičių masyvas iš pradžių
kai aš pirmą kartą skirti masyvą?
Šiukšlių. Kas žino? Ir tai iš tikrųjų nėra svarbu.
Nesvarbu, jei tai yra 1, 2, 3, 4, 5, visiškai atsitiktinai
nedalia saugomi mano struktūros, nes taip ilgai, kaip aš žinau, kad kamino dydis
yra 0, tada aš žinau, programiškai, ne pažvelgti į bet kurį iš masyve elementų.
Nesvarbu, kas ten.
Nežiūrėkite į juos, kaip būtų nuo 0 dydžio potekstė.
>> Tačiau tarkime, dabar aš eiti į priekį ir įrašyti kažką į kaminą.
Noriu įrašyti skaičius 5, todėl aš įdėti skaičius 5,
ir kas tada aš pribaigti?
Dabar aš iš tikrųjų pribaigti 1 dydžio,
o dabar krūva yra 1 dydžio.
Ką daryti, jei aš einu į priekį ir įterpti skaičių, galime pasakyti, 7 Toliau?
Tai tada bus atnaujintas iki 2, ir tada mes padarysime 9,
ir tada tai bus atnaujintas iki 3.
Bet įdomi funkcija šio kamino yra tai, kad
Aš turėjo pašalinti, kuris elementas, jei aš noriu, kad pop
ką nors ne iš kamino, taip kalbėti?
9 būtų pirmas dalykas, kurį eiti.
Kaip turėtų paveikslėlį pakeisti, jei noriu, kad pop-off kamino elementas,
panašiai kaip dėklą Mather?
Taip. >> [Studentų] Įrenginio dydis 2.
Tiksliai, aš nustatyto dydžio 2, ir ką man daryti su masyvo?
Aš neturiu nieko daryti.
Galėjau, tiesiog, kad būtų analinis, 0 Nėra įdėti ar -1 ar kažką, rodanti
, kad tai yra ne teisėtas, bet nesvarbu, nes
Galiu užrašyti už masyvo, kiek laiko ji
todėl, kad aš žinau, tik pažvelgti į pirmuosius du šio masyvo elementų.
Dabar, jei aš einu skaičiumi 8, ir pridėti šio masyvo, kaip vaizdas keičia kitą?
Tai tampa 8, ir tai tampa 3.
Aš pjovimo kelis kampus.
Dabar mes turime 5, 7, 8, ir mes grįžome į 3 dydžio.
Tai gana paprasta įgyvendinti,
bet kai mes ketiname apgailestauju sprendimą šio projekto?
Kada viskas pradeda eiti labai, labai negerai? Taip.
[Nesigirdi studentas atsakas]
, Kai norite grįžti ir gauti pirmąjį elementą jūs įtraukėte in
>> It turns out, nors krūva yra po gaubtu masyvas,
Mes pradėjome kalbėti apie šių duomenų struktūros taip pat paprastai žinomas kaip
Abstraktus duomenų struktūros, pagal kurią, kaip jie įgyvendinami
yra visiškai be taško.
Duomenų struktūra, kaip kamino Manoma, kad įtraukti paramą
operacijos, pavyzdžiui, stumti, kuris verčia padėklą ant kamino,
ir pop, kuris pašalina elementą iš kamino, ir viskas.
Jei buvo atsisiųsti kažkieno kodą, kuris jau įgyvendinta
šis dalykas, vadinamas kamino, kad asmuo būtų parašyta
tik dvi funkcijos jums stumti ir pop, kurio vienintelis gyvenimo tikslas
būtų daryti būtent tai.
Jūs arba jam ar jai, kurie įgyvendino šią programą
būtų buvę visiškai vienas nuspręsti, kaip įgyvendinti
po gaubtu stumti ir Popping semantika
arba stumti ir Popping funkcijos.
Ir aš čia šiek tiek trumparegis sprendimą
mano krūvą su šia paprasta duomenų struktūra, kodėl?
Kada šio duomenų struktūros pertraukos?
, Ką turiu grąžina klaidos, kai vartotojas skambina stumti, pavyzdžiui?
[Studentų] Jei nėra daugiau vietos.
Tiksliai, jei yra ne daugiau vietos, jei aš viršijo pajėgumus,
yra visi dangteliai, nes ji rodo, kad tai kažkoks pasaulio konstantos.
Na, tada aš tik ketina turėti pasakyti: "Atsiprašau, aš negaliu stumti kitą vertę
ant kamino, "panašiai kaip Mather.
>> Tam tikru momentu, jie ketina hit viršutinę dalį, kad šiek tiek spintoje.
Daugiau nebėra vietos ar pajėgumus įrenginyje, kuriame taškas yra keletas klaidų rūšies.
Jie turi įdėti elementą kažkur kitur, dėklas kažkur kitur,
ar niekur ne visi.
Dabar, kai eilėje, mes galime įgyvendinti jai šiek tiek kitaip.
Eilė yra šiek tiek kitoks, kad po gaubtu, ji galėtų būti įgyvendinta
masyvo, bet kodėl, šiuo atveju, aš siūlo
taip pat galvos dalis, sudaranti sąrašo galvą,
sąrašo priekyje, pirmasis asmuo, atsižvelgiant į Apple Store, be dydžiui?
Kodėl aš turiu papildomų duomenų gabalas čia?
Prisiminkite ką numerius
jei aš paruošiau taip.
Tarkime, tai dabar vietoj kamino eilė,
yra kaip ir "Apple" parduotuvėje eilėje skirtumas yra teisinga.
Pirmasis asmuo eilėje prie sąrašo pradžioje, šiuo atveju 5 numeris,
jis ar ji bus tegul į parduotuvę.
Darykime, kad.
Tarkime, kad tai yra mano eilėje valstybės šiuo metu laiku, o dabar "Apple" parduotuvė
atidaro ir pirmasis asmuo, numeris 5, vadovauja į parduotuvę.
Kaip aš galiu pasikeisti paveikslėlį, dabar, kad aš įtraukiami į eilę ir joje pirmojo asmens-
priekinės linijos?
Kas tai? >> [Studentų] Keisti eilę.
Keisti galvą, todėl 5 dingsta.
Iš tikrųjų, tai kaip nors, kaip geriausiai tai padaryti?
Iš tikrųjų, tai, taip, lyg šis vaikinas dingsta.
Ką numeris 7 faktinė parduotuvėje?
Jie būtų didelis žingsnis į priekį.
>> Bet tai, ką mes vertiname, kai jis ateina į masyvų
ir perkelti dalykų aplink?
Tai tipo savo laiko švaistymas, tiesa?
Kodėl jūs turite būti, analinis, kad pirmasis asmuo
į eilutės pradžią, ne fiziškai, atminties riekė pradžios?
Tai visiškai nereikalingas. Kodėl?
Ką galėčiau tiesiog prisiminti vietoj? >> [Nesigirdi studentas atsakas]
Tiksliai, galėčiau tiesiog prisiminti šią papildomą duomenimis, valstybės galvos
kad dabar sąraše galva nebėra 0, kuris prieš tai buvo momentas.
Dabar tai tikrai numeris 1. Tokiu būdu, man šiek tiek optimizavimas.
Tik todėl, kad aš-į eilę ir joje ką nors iš linijos į eilutės pradžią Apple Store
nereiškia, kad kiekvienas turi pereiti, išėmimas iš apyvartos yra tiesinė operacija.
Galiu vietoj nuolatinio laiko praleisti tik
ir pasiekti daug greičiau reaguoti.
Bet kaina, aš mokėti yra tai, ką gauti, kad papildomos efektyvumą
ir nereikia perkelti visus?
Taip. >> [Nesigirdi studentas atsakas]
Galite pridėti daugiau žmonių, gerai, kad problema yra statmenos
į tai, kad mes ne perjungimo žmonių visame.
Jis vis dar yra masyvas, ar ne mes pereiti visus ar ne
oh, aš matau, ką tu kalbi, gerai.
Tiesą sakant, aš sutinku su tuo, ką jūs sakote, kad tai beveik kaip nors
mes dabar niekada naudoti šio masyvo pradžios nebėra
nes jei aš pašalinti 5, tada aš pašalinti 7.
Bet aš tik įdėti žmonių į dešinę.
>> Jis jaučiasi kaip aš taupiai, ir galiausiai mano eilė išsigimsta į visai nieko,
, kad galėtume tiesiog žmonės vaikjuostės
ir mes galime galvoti apie šiame masyve tikrai kažkokio apskrito struktūra,
bet mes naudojame, kas operatorių C padaryti, kad vaikjuostės rūšiuoti?
[Nesigirdi studentas atsakas] >> modulį operatorius.
Būtų šiek tiek erzina, apgalvoti, kaip jūs darote vaikjuostės,
, tačiau mes galime tai padaryti, ir mes galime pradėti išleisti žmones tuo, kas anksčiau buvo priekinės linijos,
bet mes tiesiog prisiminti su šio galvos kintamojo, kuris tikrasis vadovas linijos iš tikrųjų yra.
Ką daryti, jei, vietoj to, galiausiai mūsų tikslas, nors,
ieškoti numerius, kaip mes čia ant scenos su Anita,
bet mes tikrai norime, kad visų šių pasaulių geriausias?
Mes norime daugiau rafinuotumo kaip masyvas leidžia
nes mes norime, kad gebėjimas dinamiškai augti duomenų struktūrą.
Bet mes nenorime, kad turi kažką, kad jau minėta,
į pirmąją paskaitą nebuvo optimalus algoritmas,
kad tiesinio paieška.
It turns out, kad jūs galite iš tikrųjų, pasiekti
arba bent jau arti nuolat laiko, kuriuo kažkas panašaus Anita,
jei ji konfigūruoja savo duomenų struktūrą negali būti susieta sąrašas
negali būti kamino, negali būti eilė, galėtų, iš tiesų,
sugalvoti su duomenų struktūrą, kuri leidžia jai ieškoti dalykų,
net žodžiai, o ne tik skaičiai, ką mes vadiname pastovų laiko.
>> Ir iš tikrųjų, kalbant apie ateitį, vienas iš šios klasės psets beveik visada
iš spellchecker įgyvendinimas, kuriuo
mes suteikiame Jums dar keletą 150.000 angliškų žodžių ir tikslas yra
įkelti į atmintį ir greitai galės atsakyti į klausimus formos
yra parašyti teisingai šis žodis?
Ir tai būtų tikrai čiulpia, jei Jums teko pakartoti per visus 150.000 žodžių atsakyti, kad.
Bet, tiesą sakant, mes matome, kad galite tai padaryti labai, labai greitai laikas.
Ir tai vyksta įtraukti įgyvendinimo kažką, vadinamą maišos lentelė,
ir nors iš pirmo žvilgsnio šis dalykas, vadinamas maišos lentelė ketina
leiskite mums pasiekti šie Super Rapid reagavimo laikas,
paaiškėja, kad yra iš tikrųjų problema.
Kai ateina laikas įgyvendinti šią dalykas vadinamas-vėl, aš darau jį dar kartą.
Aš esu čia tik vienas.
Kai jis ateina laikas įgyvendinti tai, ką pavadino maišos lentelė
mes ketiname priimti sprendimą.
Kaip didelis turėtų tai, ką iš tikrųjų?
Ir kai mes pradedame nurodydami numerius į šią maišos lentelės,
kaip mes ketiname saugoti juos taip,
, kad mes galime gauti juos atgal taip greitai, kaip mes turime juos?
Bet mes pamatysime prieš ilgas, kad šis klausimas
kai kiekvienas gimtadienis yra klasės bus gana Priklauso.
Pasirodo, kad šiame kambaryje, mes turime kelis šimtus žmonių,
todėl tikimybė, kad du iš mūsų gimtadienis yra tikriausiai gana didelis.
Ką daryti, jei ten buvo tik 40 iš mūsų šiame kambaryje?
, Kas yra dviejų žmonių, turinčių tą patį gimtadienį šansai?
[Studentai] Daugiau nei 50%.
Taip, daugiau kaip 50%. Tiesą sakant, aš net davė diagramos.
Pasirodo, ir tai yra tikrai tik Slapta peržiūra
jei yra tik iš mūsų 58 šiame kambaryje, 2 tikimybė mus
turintys tą patį gimtadienį yra labai didelis, beveik 100%,
ir kad ketina sukelti mums skauda visa krūva trečiadienį.
>> Turint tai sakė, galime atidėti čia. Mes pamatysime trečiadienį.
[Plojimai]
[CS50.TV]