[Powered by Google Translate] [Wythnos 7] [David J. Malan - Harvard University] [Mae hyn yn CS50. - CS50.TV] Mae pob hawl. Croeso yn ôl. Mae hyn yn CS50, ac mae hyn yn dechrau wythnos 7. Mae cwpl o gyhoeddiadau bach: Pset5 yn awr ar y gweill, neu fydd cyn bo hir, a gadewch i mi ddweud, yn hollol onest, mae hyn yn tueddu i fod ymhlith y rhai mwyaf heriol o setiau problem y cwrs, felly gadewch i mi sôn am hyn yn awr fel bod yr wythnos hon yn fwy nag erioed nad ydych yn aros tan, dyweder, nos Fercher neu nos Iau i ddeifio i mewn Mae hyn yn bendant yn pset diddorol. Rydym yn credu ei fod yn hwyl. Os ydych mewn gwirionedd yn cael ei hollol gywir a gallant wedyn herio'r Bwrdd hyn a elwir yn Big, bydd gennych gyfle i gyd-fynd tennyn gyda rhai o staff y cwrs a bydd rhai o'ch cyd-ddisgyblion. Beth Mae'r Bwrdd Fawr yw yn ôl i chi gael eich gwirydd sillafu gweithio, byddwch yn gallu mynd i'r cs50.net ar ôl rhedeg gorchymyn, unig ddewis ymuno, ac wedyn faint o amser a faint o RAM a mwy o Bydd yr ydych wedi eu defnyddio yn eich weithredu yn cael ei arddangos yma ar dudalen gartref y cwrs. Byddwch yn sylwi bod criw cyfan o Folks hyn yma yn cael eu rhestru fel staff ers dros y penwythnos y staff yn meddwl y byddai'n hwyl i geisio gwneud yn well na'r gilydd. Felly yn sylweddoli nad yw'r nod yma yw gwneud yn well na'r i'r staff. Hyd yn oed fy mod yn unig yma yn rhif 13. Unig ddewis ymuno, ond ei fod yn gyfle i weld yn union pa mor RAM ychydig o a chyn lleied o eiliad CPU gallwch ddefnyddio vis-a-vis rhai o'ch cyd-ddisgyblion. A byddaf yn cyfaddef bod Michael Kevin Schmid, ar hyn o bryd mewn sefyllfa rhif 1 fel un o'r TFS, hwn yn gweithredu nad ydym yn galw bosibl ystyried ei fod wedi defnyddio bron i 0 RAM a bron 0 eiliad ar gyfer llwytho. Felly, byddwn yn cymryd gofalu am Kevin oddi ar lein. [Chwerthin] Mae rhai sgiliau fod Kevin yn rhoi i'r prawf yma. Un o'r pethau yr ydym yn meddwl y bydden ni'n ei wneud yn rhy yn awr CS50x yn wythnos ar y gweill, ac rydych guys yn gymaint rhan o'r arbrawf hwn gan y myfyrwyr hynny. Rydym wedi gofyn iddynt fel rhan o'u pset0, a oedd yn debyg i gyflwyno prosiect Scratch o ddiddordeb iddynt - gêm, yn ddarn o gelf ryngweithiol, animeiddiad, neu bethau tebyg - 1 - fideo i 2-funud, os hoffent, gan ddweud helo wrth y byd a pwy ydynt mewn gwirionedd. Rwy'n meddwl y byddwn i'n rhannu gyda chi ond ychydig o'r fideos sydd wedi eu cyflwyno hyd yn hyn oherwydd i ni ar y staff o leiaf 'n sylweddol wedi bod yn gyffrous ac yn ysbrydoliaeth i weld y Folks o bob cwr o'r byd - o wledydd ledled y byd - tiwnio i mewn, pob peth, i gyfrifiadur cwrs gwyddoniaeth ar y Rhyngrwyd, boed hynny am eu bod am barhau â'u hastudiaethau eu hunain, maent yn awyddus i gymryd eu gyrfaoedd i gyfeiriad newydd, maent yn awyddus i lenwi bylchau yn eu gwybodaeth eu hunain, felly mae rhai o'r rhesymau ag yr ydych yn guys efallai wedi bod yma. Felly, yr wyf yn rhoi i chi 1 myfyriwr o'r fath yma. Gallech godi'r gyfrol dim ond ychydig bach. Dyma un o'n myfyriwr 1-munud cyflwyniadau. Helo, byd. Rwy'n fyfyriwr o beirianneg ddiwydiannol yma yn Malaga, Sbaen. Rwy'n edrych ymlaen am y cwrs ar-lein oherwydd fy mod yn caru gwyddoniaeth gyfrifiadurol, Fi 'n sylweddol ei wneud, ac yr wyf wir yn gwerthfawrogi fy mod yn cael ei archwilio. Ac mae'r ffaith mod i'n gallu dysgu yr un fath bob un ohonoch guys yn ei wneud ond yn hytrach na bod yn Harvard Yr wyf yn Malaga, pa mor wych yw hynny? Wel, yr wyf Fernando, ac mae hyn yn CS50. Welwn ni chi guys. [Chwerthin] arall clip rydym yn arbennig o hoff, fe welwch nad Saesneg y gwr hwn yw mor gryf. Mae'n edrych fel ei fod wedi ei beiriant cyfieithu, felly mae'r cyfieithiadau eu hunain yn ychydig yn amherffaith, ond roedd hyn yn un o'n ffefrynnau hyd yn hyn yn ogystal. [♪ ♪] Helo, byd. [Yn siarad yn Siapan] [Rhaid i mi gyfarch yn Siapan oherwydd bod fy Saesneg yn annibynadwy iawn.] [Rwyf wedi cyflwyno'r neges i chi gan y ddinas Gifu, Japan.] [Gallaf fod yn fyfyriwr am y tro cyntaf mewn 20 mlynedd, fel y gellir gweld.] [Yr wyf yn ddiolchgar iawn i Brifysgol Harvard a roddodd i mi y cyfle hwn ac EDX.] [Mae golff yn gitâr a fy hoff beth yn rhedeg.] [Chwerthin] [♪ ♪] [Pam ydych chi'n meddwl fy mod yn ceisio i fynychu cs50x.] [Prifysgol Harvard, mae fy hiraeth.] [Yn enwedig os ydw i'n presenoldeb bell yn byw yn Japan.] [Roeddwn i eisiau i roi cynnig ar unwaith yn ymwybodol o fodolaeth EDX o'r fath pryd.] [Peidiwch â ydych yn meddwl fel nad ydych yn berthnasol i oed dysgu I.] [Cs50 yw fy hiraeth. Fy enw i yw Kazu, ac mae hyn yn cs50.] [♪ ♪] [gymeradwyaeth a bloeddio] Ffefryn arall o ni oedd y cyflwyniad yma o rywun. [♪ ♪] [Malan] Google os ydych yn anghyfarwydd â hyn meme. Ac yna yn olaf, un neu ddau o bobl eraill a gafodd eu postio efallai ennill y wobr annwyl. [Myfyrwyr] Aww! >> [Malan] Bydd yn rhaid i wrando. Mae hyn yn fyr, felly gwrandewch yn ofalus. [Siaradwr benywaidd] Beth yw eich enw? >> Louie. [Siaradwr benywaidd] Beth ydyn nhw? >> [Chwerthin] CS50. [Chwerthin] [Malan] Gwnaeth 2 yn cymryd, er. Yma rydym yn mynd, yr olaf. Fy enw i yw Louie, ac mae hyn yn CS50. [Chwerthin] Mae hyn wedyn yn CS50x. Diolch i bawb ohonoch tra'n dilyn ar hyd yn y cartref sydd wedi bod yn cymryd rhan hyd yma. Heddiw rydym yn dod i'r casgliad ein trafodaeth o strwythurau data, o leiaf rai o'r mwyaf sylfaenol, ac yna rydym yn parhau ein sgwrs am HTML ac ar y we rhaglennu. Yn wir, rydym wedi gwario y gorffennol mae rhai 7 wythnos yn edrych ar hanfodion rhaglennu - algorithmau, strwythurau data, ac ati - a C, oherwydd efallai y byddwch wedi cael profiad hyd yn hyn, Nid yw anghenraid yr un mwyaf hygyrch o ieithoedd y mae i weithredu rhai o'r syniadau hynny. Ac felly yn dechrau yr wythnos hon a'r wythnos nesaf, ac yna y canlynol, byddwn o'r diwedd yn gallu symud o C, a elwir yn gyffredinol fel iaith gweddol lefel isel, i bethau lefel uwch, yn eu plith PHP, JavaScript, ac ati, y byddwn yn gweld tynnu ar yr un gwersi yr ydym wedi dysgu dros yr wythnosau diwethaf, ond fe welwch fod datgan pethau fel araeau a thablau hash a chwilio a didoli dod yn gymaint yn haws oherwydd bod yr ieithoedd eu hunain byddwn yn dechrau defnyddio yn dod yn fwy pwerus. Ond yn gyntaf, cais o goed. Mae'n gyffredin iawn y dyddiau hyn i angen i gywasgu gwybodaeth. Ym mha gyd-destun ydych am ei cywasgu rhyw fath o wybodaeth ddigidol? Yeah. >> [Myfyrwyr] Pan fydd angen i chi ei anfon dros y We. Yeah, pan fyddwch eisiau anfon rhywbeth dros y We. Os ydych am i lawrlwytho ffeil fawr, mae'n ddelfrydol os bydd rhywun ar y pen arall wedi cywasgu y ffeil gan ddefnyddio fformat zip neu rywbeth fel 'na fel eich bod yn anfon llai o darnau na'r hyn y gellid fel arall gael ei drosglwyddo. Felly, sut ydych chi'n cywasgu gwybodaeth? Mae i gyd yn boils i lawr i ddefnyddio darnau llai na'r hyn sy'n ofynnol yn ddiofyn. Ond mae hyn yn fath o beth rhyfedd oherwydd bod yn meddwl yn ôl i'r wythnos 0 ac 1 pan fyddwn yn siarad am ASCII a deuaidd a buom yn siarad am ASCII yn arbennig fel gan ddefnyddio 8 did i gynrychioli llythrennau'r wyddor fel bod y llythyren A yn cael ei gynrychioli gan 65, lythrennau bach a yw nifer 97, a sut bynnag y ydych yn cynrychioli y 65 neu 97, ydych chi'n defnyddio 7 neu 8 did. Ond y ddalfa yw bod rhai llythrennau yn yr wyddor Saesneg nad ydynt mor boblogaidd ag eraill. Nid Z yw'r cyfan sydd poblogaidd, nid Q yw'r cyfan sydd poblogaidd, ond A ac E yn super poblogaidd. Ac eto ar gyfer pob un o'r llythyrau hyn, yn ddiofyn yn y byd yn defnyddio'r un nifer o ddarnau, dim ond 8. Felly, ni fyddai wedi bod yn fwy craff os yn hytrach na gan ddefnyddio 8 did i bob llythyr, hyd yn oed y mwyaf defnyddio'n aml fel Q a Z, beth os ydym yn defnyddio darnau llai o A ac E a S a'r llythyrau mwyaf poblogaidd ac yn defnyddio darnau mwy am y llythyrau yn llai poblogaidd, y syniad yw gadewch i optimize ar gyfer yr achos cyffredin, sy'n thema mewn gwyddoniaeth gyfrifiadurol o geisio gwneud y gorau beth sy'n mynd i ddigwydd y rhan fwyaf o ac yn treulio ychydig mwy o amser, ychydig o le mwy ar y pethau sydd, ie allai, yn digwydd ond nid o reidrwydd mor aml. Felly, gadewch i ni gymryd enghraifft. Tybiwch ein bod yn awyddus i amgodio gwybodaeth gymharol effeithiol. Efallai eich bod wedi tyfu i fyny yn gwybod rhywbeth ychydig am côd Morse, ac groes yn nad ydych yn gwybod y cod ei hun, ond efallai y byddwch yn cofio ei fod yn o leiaf y gyfres hon o dotiau a llinellau toriad. Mae hwn yn codio yn eithaf effeithlon, a rhybudd bod y llythyr mwyaf poblogaidd - er enghraifft, E - defnyddio byrraf o beeps. Côd Morse yn ymwneud â Canu-Canu Canu-Canu-Canu-Canu-a chynnal tonau naill ai am gyfnodau byr o amser neu gyfnodau hir o amser. E, a nodir gan y dot, yn bîp byr super, dim ond sŵn, ac y byddai yn cynrychioli E. Ar y llaw arall, byddai T yn bîp hwy, fel beep [yn ymestyn gadarn], a fyddai'n cynrychioli T. Ond mae hynny'n dal i fod yn eithaf byr oherwydd, ar y llaw arall, os ydych yn edrych ar Z, i fynegi Z fyddech yn mynd Canu, beep [hirach sain], Canu, Canu [sain byrrach]. Felly, bydd yn hwy oherwydd ei fod yn llai cyffredin. Ond mae'r Gotcha yma yw bod côd Morse yn ychydig yn ddiffygiol gan nad yw'n syth decodable. Er enghraifft, mae'n debyg eich bod yn clywed ar rai ddiwedd y Canu wifren [byr], Canu [hir]. Pa neges oedd Fi jyst ei dderbyn? Mae dot a llinell doriad. Beth mae hynny'n ei gynrychioli? [Myfyrwyr] A. >> [Malan] Efallai. Gallai hefyd fod yn E ddilyn gan T. Mewn geiriau eraill, côd Morse, er ei fod leverages egwyddor hon o wneud y gorau o'r achos gornel, nad yw'n rhoi benthyg ei hun i decodability ar unwaith. Hynny yw, y bobl sy'n clywed neu dderbyn y dotiau a llinellau toriad wedi i rywsut chyfrif i maes lle y gwyliau rhwng llythrennau, oherwydd os nad ydych yn gwybod lle mae'r gwyliau yn, efallai y byddwch yn drysu A ar gyfer ET neu i'r gwrthwyneb. Felly, beth ydych yn ei wneud? Yn côd Morse gallech oedi rhwng pob un o'r llythyrau. Ond mae oedi yn fath o groes i'r holl bwynt o oryrru pethau i fyny. Felly beth os yn hytrach rydym yn dod i fyny gyda cod lle nad oedd y sefyllfa ddrwg lle mae E yn rhagddodiad, er enghraifft, o A - mewn geiriau eraill, pe gallem wneud yn siŵr bod y patrymau yn dal byr ar gyfer y llythyrau poblogaidd hir ar gyfer y llythrennau llai poblogaidd, ond does dim ddryswch posibl? Mae dyn o'r enw Huffman mlynedd yn ôl ddyfeisiodd y cynllun o'r enw Huffman codio sydd mewn gwirionedd yn leverages un o'r strwythurau data rydym wedi treulio ychydig o amser yn siarad am yr wythnos hon ddiwethaf, fod o goed, coed deuaidd yn benodol - a deuaidd sy'n golygu coeden nad oes ganddo fwy na 2 o blant. Mae ganddo efallai blentyn chwith, efallai plentyn cywir, a dyna ni. Felly, mae'n debyg dim ond er mwyn trafod y mae rhywun eisiau anfon neges sy'n edrych fel hyn. Mae'n nonsens llwyr, ond mae'n cynnwys Fel, B, C, D, ac Es. Ac os ydych yn cyfrif yr holl Fel, B, C, D, ac Es ac yna ei rannu â chyfanswm nifer o lythyrau, y siart bach yma yn dweud bod 45% o'r llythyrau yn Es, 20% yn Fel, 10% Brecwast, ac yn y blaen. Felly, mewn geiriau eraill, cymryd yn ganiataol bod y llinyn a ddyfynnir yno yn unig yw rhai neges yr ydych am ei anfon. Mae'n digwydd yn lol yn union fel y gallwn eu defnyddio fel rhai o'r llythrennau ag y bo modd, ond mae'n wir yn wir bod E yn parhau i fod y mwyaf poblogaidd, a B a C yw'r lleiaf poblogaidd, o leiaf un o'r 5 lythrennau'r wyddor. Felly sut allwn ni fynd ati i ddod o hyd i amgodio, amgodiad binary, patrwm o 0s a 1s ar gyfer pob un o'r llythyrau hyn yn y fath ffordd sy'n E yn batrwm byr ac efallai B ac C yn phatrymau ychydig yn hirach, unwaith eto, y syniad yw ein bod am ddefnyddio darnau llai y rhan fwyaf o'r amser a darnau mwy dim ond unwaith mewn blwc. Yn ôl Huffman codio, gallwch greu coedwig o goed. Mae math o linell stori yma sy'n cynnwys coed a hefyd y broses o adeiladu i fyny. Gadewch i ni ddechrau. Yr wyf yn cynnig eich bod yn dechrau gyda y goedwig, fel petai, 5 o goed, pob un ohonynt yn goeden eithaf dwp. Mae'r goeden yn cynnwys dim ond un nod, a gynrychiolir fel yma gan gylch. Felly, gallai pob un o'r pethau hyn fod yn strwythur C a allai tu mewn i'r strwythur C fod yn arnofio yn cynrychioli'r cyfrif amlder ac yna efallai golosg cynrychioli'r llythyr. Felly meddyliwch am y nodau fel dim ond unrhyw strwythur C hen, ond, ar hyn o bryd, ar lefel uwch. Mae hyn yn goedwig 5 o goed, pob un sydd ond yn cael un nod. Beth Huffman arfaethedig yw ein bod yn dechrau cyfuno y coed hynny sy'n meddu ar y cyfrifon amlder lleiaf i'r coed ychydig yn fwy trwy eu cysylltu gyda nod gwraidd newydd. Felly, ymysg y llythrennau yma, sylwch ar gyfer hwylustod wyf wedi trefnu iddynt o'r chwith i'r dde, er nad yw hynny'n gwbl angenrheidiol, a rhybudd bod y nodau lleiaf o bryd mae 10% a 10%. Felly Huffman cynnig ein bod yn cyfuno hynny 2 nodau lleiaf i mewn i goeden newydd drwy gyflwyno nod rhiant newydd ac yna rhoi y rhiant i blentyn chwith a dde phlentyn os yw B yn fympwyol y chwith ac C yn fympwyol y dde. Ac yna Huffman Cynigir ymhellach y gadewch i ni yn awr yn unig yn meddwl y plentyn chwith yn un o'r coed hyn bob amser yn cael eu cynrychioli gan 0 a'r plentyn cywir bob amser yn cael eu cynrychioli gan y rhif 1. Nid oes ots os ydych yn eu troi cyn belled â'ch bod yn gyson. Felly, nawr rydym gael 4 goed yn y goedwig yma. Ac yr wyf yn dweud 4 oherwydd yn awr y goeden ar y chwith - ac nid yw'n gymaint coeden yn yr ystyr ei fod yn tyfu y modd hwn, mae'n fwy fel coeden deuluol lle nawr 0.2 yn fath o riant y 2 o blant - sylwi bod yn rhiant hwnnw rydym wedi tynnu 0.2. Rydym wedi ychwanegu y cyfrifon amlder y 2 o blant ac o ystyried y nod newydd yn y swm cyfan. Felly, nawr rydym yn ailadrodd y broses hon. Dod o hyd y 2 nodau lleiaf ac yna ymuno â hwy i mewn i goeden newydd ac yna ailadrodd y broses ymhellach. Ar hyn o bryd mae gennym ychydig o ymgeiswyr, 20%, 15%, a 20% arall. Yn yr achos hwn mae'n rhaid i ni dorri'r ddadl. Gallwn wneud hyn yn fympwyol. Dylem wneud dim ond yn gyson. Yn yr achos hwn byddaf yn fympwyol yn mynd gyda'r un ar y chwith, ac yr wyf yn awr cyfuno 20% a'r 15% i roi i mi yn rhiant newydd o'r enw 35%, y mae ei phlentyn ar y chwith yw 0, y mae ei ddiogel gywir ar 1, ac erbyn hyn mae gennym dim ond 3 goed yn y goedwig. Gallwch o bosibl weld lle mae hyn yn mynd. Os byddwn yn ailadrodd y gwaith y cwpl yn fwy, rydym yn mynd i gael coeden dim ond 1 yn fwy, bob un o'u ymylon yn cael eu labelu gyda 0au ac 1. Gadewch i ni wneud hynny eto. 35% yw gwraidd y goeden. 20% a 45%, felly rydym yn mynd i uno y 35% a 20%. Nawr mae gennym y goeden yma. Rydym yn ychwanegu hynny at ei gilydd, mae gennym 55%. Nawr mae dim ond 2 goed yn y goedwig. Rydym yn gwneud hyn amser 1 derfynol, a gobeithio fathemategol holl amleddau adio i fyny oherwydd y dylent ers i ni gyfrifo rhag y get-fynd i ychwanegu hyd at 100%. Ac yn awr rydym wedi 1 goeden. Felly, mae hyn yn goeden codio Huffman. Mae'n fath o Cymerodd beth amser i gyrraedd yno ar lafar, ond y gwir amdani yw gyda gyfer dolen neu gyda swyddogaeth recursive gallech adeiladu y peth hyn i fyny 'n bert gyflym. Felly, yn awr rydym wedi 1 nod newydd, a phob un o'r nodau mewnol wedi cael eu malloc'd, yn ôl pob tebyg, ar hyd y ffordd. Felly, yn awr ar ben y goeden hon mae gennym 100%, ond nawr yn sylwi gennym lwybr o'r newydd gor-or-or-nain neu daid i bob un o'r gor-or-or-wyrion yr holl ffordd ar y gwaelod, i bob un o'r dail. Beth ydym ni'n mynd i'w wneud yn awr yw cynnig er mwyn cynrychioli'r llythyren E, byddwn yn syml yn defnyddio'r rhif 1. Pam? Oherwydd os ydym yn croesi goeden hon oddi wrth y gwraidd terfynol i lawr at y ddeilen a elwir yn E, rydym yn dilyn dim ond 1 ymyl, yr ymyl dde, ac mae hynny'n labelu, wrth gwrs, ar 1 dde uchaf. Felly, y goblygiadau yma i Huffman oedd y bydd amgodio E yn unig fod deuaidd 1. A dyna 'n bert damn effeithlon. Methu wir yn cael unrhyw llai na hynny. Mewn cyferbyniad, A yn mynd i gael eu cynrychioli, os ydych yn dilyn y rhesymeg, gan yr hyn patrwm o ddarnau yn lle hynny? 01. Felly, i ddod i A, byddwn yn dechrau wrth wraidd ac rydym yn mynd i'r chwith ac yna rydym yn mynd yn iawn, sy'n golygu ein bod yn dilyn 0 ac yna 1. Felly, byddwn yn cynrychioli'r llythyren A gyda phatrwm 0 ac 1. Ac yn awr sylwi gennym eisoes yn eiddo decodability ar unwaith nad oedd gennym mewn côd Morse. Hyd yn oed er bod y ddau o'r patrymau hyn yn eithaf byr - E yn 1 did, A yw 2 darnau - yn sylwi nad ellir eu drysu un neu'r llall, oherwydd os byddwch yn gweld 1 mae'n rhaid i fod yn E, os gwelwch yn 0 yna 1 mae'n 'got amlwg i fod yn A. Yn yr un modd, beth yw D? 001. Beth yw C? 0001. A beth yw B? 0000. Ac eto, gan fod yr holl o'r llythyrau yr ydym yn gofalu amdanynt yn y dail ac nid oes yr un ohonynt yn fath o middlemen yn y llwybr o'r gwreiddyn i'r ddeilen, does dim risg o conflating amgodiadau 2 lythyr 'gwahanol oherwydd bod pob un o'r patrymau bit yn benderfynedig. Bydd 0000 bob amser yn B. Does dim nod rywle yn y canol y gallech drysu 1 llythyr ar gyfer y llall. Felly beth yw'r goblygiadau yma? Roedd y llythyr mwyaf poblogaidd - yn yr achos E - wedi gotten y amgodio byrraf, Mae wedi gotten y amgodio nesaf byrraf, a B a C, yr ydym eisoes yn gwybod o'r fath gael-fynd yn y lleiaf poblogaidd ar amledd o 10% yr un, maent wedi gotten y amgodio hiraf. Ac felly beth mae hyn yn golygu yn awr yw, os ydych am i anfon neges sydd wedi cywasgu dros y Rhyngrwyd neu mewn e-bost neu debyg, yn hytrach na defnyddio ASCII safonol, gallwch anfon neges Huffman cod lle os ydych am anfon y llythyr E, rydych yn anfon dim ond ychydig sengl. Os ydych am anfon A, rydych anfon 2 darnau, 01, yn lle anfon 8 did un arall ar 8 did un arall ar 8 did ac yn y blaen. Ond mae Gotcha yma. Nid yw'n ddigon i ddim ond adeiladu'r goeden ac yna dechrau anfon o Alice i Bob y patrwm ychydig yn fyrrach, llinyn o ASCII, oherwydd Alice hefyd i roi gwybod i Bob am yr hyn os Bob yn mynd i fod yn gallu darllen ei neges cywasgedig? [Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod? [Ymateb y myfyrwyr Anghlywadwy] >> O'r hyn y mae'r goeden yn. Neu hyd yn oed yn fwy penodol, beth yw'r amgodiadau yn, yn enwedig gan fod yn ystod y stori hon rydym yn gwneud galwad barn ar un adeg. Cofiwch bod rhaid i ni ddewis yn fympwyol rhwng y 2 nodau 20% wahanol? Felly, nid yw'n wir y gall Bob, y derbynnydd, dim ond ail-greu y goeden ar ei ben ei hun oherwydd efallai y bydd yn creu y goeden erioed mor ychydig yn wahanol i Alice. At hynny, nid yw hyd yn oed Bob yn gwybod beth y neges gwreiddiol yn oherwydd yr unig beth Alice yn anfon iddo, wrth gwrs, yw'r neges cywasgedig. Felly y ddalfa gyda cywasgu fel hyn yw, ie, gall Alice arbed llawer gyfan o ddarnau drwy anfon 1 am E a 01 ar gyfer A ac yn y blaen, ond mae hi hefyd i roi gwybod i Bob hyn y mae'r mapio yn rhwng llythrennau a darnau oherwydd na allant glir â dibynnu ar ASCII anymore os nad ydym yn defnyddio ASCII. Felly, gall hi naill ai anfon y goeden rhywsut - ysgrifennu i lawr, ei storio fel data deuaidd neu rhywbeth fel 'na - neu dim ond anfon taflen twyllo ychydig, ffeil Excel, sy'n dangos y mapiadau. Felly, effeithiolrwydd y cywasgu mewn gwirionedd yn cymryd yn ganiataol bod y negeseuon eich bod yn anfon yn eithaf mawr, o leiaf o faint canolig, oherwydd os ydych yn anfon neges byr super, os ydych chi eisiau anfon y neges DRWG, sy'n digwydd i fod yn air gallwn sillafu yma, B-A-D, mae'n debyg eich bod yn mynd i ddefnyddio darnau llai, ond y ddalfa yw os rhaid i chi hefyd roi gwybod Bob hyn y mae'r goeden yn neu beth yw'r amgodiadau, yr ydych chi'n mynd i fwy na thebyg yn gorbwyso holl arbedion o gael pethau cywasgedig i ddechrau. Felly, gall fod mewn gwirionedd fod yn wir os ydych yn ceisio cywasgu hyd yn oed gyda rhywbeth fel fformatau zip neu ffeil efallai y byddwch yn gyfarwydd â nhw - ffeiliau 'n bert bach, ffeiliau hyd yn oed yn wag - Weithiau efallai y ffeiliau yn mynd yn fwy ac nid llai. Ond yn realistig, mae hynny'n digwydd dim ond ar gyfer maint y ffeil bach, felly nid yw'n mynd i wneud ffeil gigabyte yn 2 gigabeit; rydym yn wirioneddol yn siarad bytes neu dim ond kilobytes cwpl. Mae rhai rhaglenni fel zip yn ddigon craff i sylweddoli, "Rydych chi'n mynd i wario mwy o gywasgu darnau hyn." "Gadewch i mi beidio trafferthu gywasgu ar eich o gwbl." Felly mae hyn yn dim ond 1 ffordd yna o gywasgu fformat testun. Gallai Rydym yn gweithredu rhywbeth fel hyn yn C. Er enghraifft, dyma yw sut y gallai ydym yn eu cynrychioli yn nod yn y goeden lle mae gennym golosg ar gyfer y symbol, mae gwerth fel y bo'r angen ar gyfer y amlder, ac fel yr ydym wedi gweld â'n strwythurau data eraill, 2 awgrymiadau, 1 i'r plentyn chwith, 1 i'r dde, gall y naill neu'r llall fod yn NULL, ond os nad yw, mae'n cyfeirio at blentyn chwith a dde phlentyn. Felly, mae hyn felly yw Huffman codio, ac mae'n 1 ffordd y gallwch fynd ati i gywasgu gwybodaeth, ac mae'n sicr yn un o'r mwyaf yn hawdd i weithredu yng nghyd-destun, dyweder, strwythurau data yr wythnos diwethaf, ond hyd yn oed algorithmau mwy soffistigedig yn bodoli sy'n gallu gwneud treigladau hyd yn oed yn fwy soffistigedig o'ch data. Unrhyw cwestiynau, yna ar goed, coed deuaidd, neu gywasgiad o destun? [Myfyrwyr] A oes rhywfaint o amwysedd, fel pe rhaniad [Anghlywadwy] i 01, yna byddai 011 yn amwys, dde? [Anghlywadwy] >> Cwestiwn da. Amwysedd. Gadewch i mi grynhoi drwy gyfeirio at y darlun hwn yma. Oherwydd bod y cymeriadau yr ydych yn gywasgu, y sylwadau o, yn ôl y diffiniad hwn yn algorithm bob amser yn parhau i fod y dail, na fyddwch byth yn ddamweiniol yn defnyddio'r un patrwm o ddarnau ar gyfer y rhagddodiad llythyrau lluosog. Felly, mewn geiriau eraill, rydych yn poeni am, mae'n swnio fel, yn amwysedd sy'n codi lle gallai 001 yn ddechrau B neu ddechrau C neu rywbeth fel 'na. Ond ni all hynny fod yn wir oherwydd bod hysbysiad fod y cyfan o lythrennau'r wyddor rydym yn amgodio ar y dail. Gall y amwysedd yn unig yn codi, fel yn achos y côd Morse, os, er enghraifft, C yn rhywle ar hyd y llwybr o'r gwraidd i B. [Myfyrwyr] Hawl. Felly, yn yr achos hwnnw, yn dweud A yw 2 ddeilen. >> Dweud A yw - Dweud hynny eto. [Myfyrwyr] Dweud Mae wedi 2 dail, F a G, ac yna G - >> Iawn. Ond ni all. Mae Ni allai ei hun fod dail F a G oherwydd y llythyrau hynny F a G eu hunain yn cael gadael rhywle i'r chwith B nac ar hawl E. Felly, drwy ddiffiniad, rhaid iddynt fod dail. Fel arall, rydych yn hollol gywir, nid ydym wedi datrys y broblem sy'n wynebu côd Morse. Da cwestiwn. Cwestiynau eraill? Mae pob hawl. Mae'r syniad o ddarnau, mae'n troi allan yr ydym wedi cael pŵer ar hyd nad ydym wedi defnyddio mewn gwirionedd pan ddaeth i drin hyn 0s a 1s. Fe wnaethom ofyn am hyn ar un o'r setiau broblem cynharaf, sef, sut ydych chi'n mynd ati i drosi priflythyren i lythrennau bach neu i'r gwrthwyneb? Neu yn fwy concretely, un o'r rhai cyntaf a ofynnir psets faint o ddarnau ydych chi mewn gwirionedd yn rhaid i troi er mwyn newid A i lythrennau bach i'r gwrthwyneb a neu? Dyma atgof cyflym o hyn 65 a 97 yn edrych fel yn y deuaidd. A hyd yn oed os yw'r cwestiwn fath o ddiflannu yn eich cof, gallwch weld yma eto mai faint o ddarnau angen flipped i newid cyfalaf A i lythrennau bach a? Dim ond 1. Maent yn unig yn wahanol mewn 1 lleoliad, y rhan y trydydd o'r chwith. Tra mae A yn 010, ychydig a sydd â 011. Felly, rhywsut mae angen i ni dim ond yn gallu troi y tamaid hwnnw, ac yna gallwn fanteisio neu lythrennau bach lythyrau. Rydym wedi gwneud hyn yn y gorffennol gan ei ddefnyddio mewn gwirionedd os yw amodau a gwirio os y llythyr hwn yw rhwng cyfalaf A a chyfalaf Z, Yna, allbynnau fel A - "a" + 26 neu rywbeth fel 'na. Mae'n debyg y byddwch yn gwneud newid rhifyddol i llythrennau'r wyddor. Ond beth pe gallem dim ond troi ychydig yn sengl? Sut allech chi fynd ati i gymryd werth 1 beit o ddarnau, felly 8 did fel 01,000,001 01,100,001 a? Os ydych wedi cael y patrymau o ddarnau, sut gallwn ni fynd ati i newid dim ond 1 ohonynt? Beth os ydym yn cyflwyno mewn melyn yma y patrwm o ddarnau eraill? Os byddaf yn gwneud y 0au llinyn melyn cyfan ac eithrio ar gyfer y darn 1 na wyf am newid ac yna rwyf yn cyflwyno weithredwr newydd o'r enw fel gweithredwr bitwise - bitwise yn yr ystyr ei fod yn gweithredu ar ddarnau unigol, nid ar beit cyfan neu 4 bytes i gyd ar unwaith. Mae'r bar fertigol yno mewn melyn yn awgrymu bod yr hyn os ydym yn cymryd y gynrychiolaeth o gyfalaf i a bitwise "neu" gyda dilyniant melyn o ddarnau? Mewn geiriau eraill, yn meddwl yn ôl at ein trafodaeth ar mynegiadau Boole yn Scratch ac yna yn C. Gwneud Boolean neu yn golygu bod i fod yn wir, naill ai y peth cyntaf sydd i fod yn wir neu'r ail beth wedi i fod yn wir neu os ydynt yn rhaid i'r ddau fod yn wir, ac yna yr allbwn o ganlyniad yn ei hun yn wir. Yn yr achos yma, beth ydym yn ei gael os byddwn yn cymryd 0 "neu" ed gyda 0? Ffug neu anwir? Mae'n dal ffug, felly mae'r llythrennau bach a dal yn ôl y disgwyl. Beth os ydym yn ei wneud yn lle hynny 1 neu 0? Mae hyn bellach yn parhau i fod 1, ond sylwi ar beth sydd ar fin digwydd yma. Os byddwn yn dechrau gyda chyfalaf A ac rydym yn parhau i "neu" ei darnau unigol fel rydym yn ei wneud yma, 0 neu 1 melyn yn rhoi i ni beth i lawr yma? Mae hyn yn rhoi i ni 1. Yn wir, mae'n debyg nad ydym yn gwybod beth y fersiwn priflythyren o ychydig o mewn gwirionedd. Gadewch i ni fynd yn gwneud hyn. Gadewch i mi symud hyn yn ôl dros yma. Gadewch i ni wneud hyn eto. 0 neu 0 yn rhoi i mi 0. 1 neu 0 yn rhoi i mi 1. 0 neu 1 yn rhoi i mi 1. 0 neu 0 yn rhoi i mi 0. Mae'r un nesaf yw 0, yr un nesaf yn 0, yr un nesaf yw 0. 1 neu 0 yn rhoi i mi 1. Ac felly hyd yn oed os nad ydym yn gwybod ymlaen llaw beth lythrennau bach a oedd, yn syml gan "neu" ing A gyda patrwm hwn o ddarnau yr ydym wedi cyflwyno yma mewn melyn, gallwch lythrennau bach cyfalaf A trwy flipping y bit. Rydym yn defnyddio hyn wythnosau mynegiant yn ôl: flipping ychydig. Sut yr ydych yn gwneud hynny programmatically? Byddwch yn defnyddio'r hyn a elwir yn gyffredinol mwgwd, cyfres o ddarnau, yn yr achos hwn ond fel y digwydd i edrych fel y nifer hwn yma, ac yna i chi "neu" at ei gilydd defnyddio'r gweithredwr C newydd, Nid | |, byddwch yn defnyddio un | a byddech yn mewn gwirionedd yn cael yr ateb hwn yma oherwydd pam? Dyma'r lle 1s, 2s lle, 16 4, 8,, 32s. Felly, mae'n troi allan os byddwch yn cymryd llythyr cyfalaf A a bitwise "neu" gyda y 32 cyfanrif, oherwydd bod y cyfanrif 32 pan fyddwch yn edrych arno fel darnau yn edrych fel hyn, sy'n golygu y gallwch chnithia y rhan yr ydych ei eisiau mewn gwirionedd. Ac yn yr un modd - a byddwn yn edrych ar god mewn dim ond hyn o bryd - debyg ydym am fynd i'r cyfeiriad arall. Sut ydych chi'n mynd o lythrennau bach cyfalaf i A? Pa bit angen newid? Mae yr un un. Rydym am newid hynny ychydig yn drydydd o 1 i 0. Ac efallai y modd y byddwn yn gwneud hyn? Sut ydym yn troi oddi ar ychydig? Gallai Gyda pa batrwm o ddarnau rydym yn troi oddi ar ychydig? Beth os ydym yn datrys gwrthdro y mwgwd? O'r blaen, ni wneud y 0au mwgwd melyn cyfan ac eithrio ar gyfer y darn 1 rydym eisiau i droi ymlaen, beth os y cyfnod hwn rydym yn gwneud y 1s mwgwd cyfan heblaw am y peth yr ydym am droi i ffwrdd ac yna defnyddio'r hyn weithredwr? Beth os ydym yn "a" phethau? Gadewch i ni edrych. Os ydym yn awr yn troi at hyn, mae'n debyg bod eto i'n creu mwgwd dyna i gyd 1s ac eithrio ar gyfer y rhan 1 yr wyf am droi i ffwrdd ac yna yn hytrach na "neu" y rhifau gwyn i fyny rhowch y rhifau melyn i lawr yma, beth os wyf yn lle "a" nhw at ei gilydd? Mae'n cael ei alw bitwise a. Yn rhesymegol, mae'n yr un peth â Boole a. Mae hyn yn rhoi i mi 0 & 1 yn 0. Felly, ffug ac yn wir yn ffug. Gwir ac yn wir yn wir. A dyma yw'r hud: Gwir a ffug yn awr yn ffug, felly rydym wedi troi oddi ar y bit. Ac yn awr gweddill y stori braidd yn syml. Oherwydd bod y gweddill y mwgwd yn 1s, nid oes gwahaniaeth beth yw'r rhifau hyn yn wyn. Pan fyddwch yn "a" rhywbeth gyda wir, nid ydych yn mynd i newid ei werth. Os yw'n wir, bydd yn parhau i fod yn wir. Os oedd yn anwir, bydd yn parhau ffug. Ond mae'r hud yn digwydd pan fyddwch yn cymryd rhywbeth a oedd yn wir ac rydych yna "a" gyda ffug. Mae hyn yn cael yr effaith o droi oddi ar y bit. Felly cryptic bach yno. Gadewch i ni mewn gwirionedd yn edrych ar rai cod, a allai mewn gwirionedd yn edrych hyd yn oed mwy cryptig, ond gadewch i ni edrych yma yn tolower. Os byddaf yn edrych ar tolower, mynd o gyfalaf A i lythrennau bach a, gadewch i ni weld sut y gallem weithredu'r rhaglen hon. Dyma brif, ac nid yw'n cymryd unrhyw ddadleuon gorchymyn-lein. Rwy'n datgan c cymeriad ar gyfer y llythyr fod y defnyddiwr yn mynd i deipio i mewn Yna defnyddiwch do cyfarwydd tra dolen i ddim ond gwneud yn siŵr bod y defnyddiwr yn bendant yn rhoi i mi cyfalaf A neu B neu C. .. Z, fel eu bod yn ei roi i mi rhywbeth rhwng A a Z. Ac yn awr beth ydw i'n ei wneud yma? Rwy'n "neu" ing hyn gyda 0x20, ond sydd mewn gwirionedd yr un fath â - a byddwn yn dod yn ôl at hyn mewn munud - 32. Felly eto, 32 yn y patrwm hwn o ddarnau yma. Pam ydyn ni'n gwybod hyn? Meddyliwch yn ôl i wythnos 0. Dyma'r lle 1s, 2s lle, 4, 8, 16 oed, lle 32s. Felly, y nifer hwn melyn yn digwydd i fod yn 32. Yna gallaf gymryd lythyr fel y torgoch yma, bitwise "neu" gyda llythrennol y rhif 32, a beth ydw i'n ei gael yn ôl? Mae fersiwn llythrennau bach y torgoch. Mae hyn o bryd yn ôl, fodd bynnag, yr wyf yn mynegi hyn mewn nodiant sylfaenol gwahanol. Beth oedd hyn yn ei gynrychioli? >> [Myfyrwyr] hecsadegol. [Malan] Mae hyn yn digwydd i gynrychioli hecsadegol. Nid ydym wedi siarad am hecsadegol i gyd bod llawer, ond mewn gwirionedd mae'n gyfleus mewn achosion fel hyn. Hyd yn oed er ei fod yn edrych yn fwy cymhleth a hyd yn oed er ei fod yn edrych fel 20 ac nid 32, mae'n troi allan bod mewn gwirionedd yn hecsadegol nodiant super cyfleus oherwydd yn hecsadegol pob digid ar ôl y 0x - ac mae hyn yn golygu dim; yn unig yw hwn confensiwn dynol sy'n dweud yma daw rhif hecsadegol - pob un o'r digidau, y 2 ac yna'r 0, eu hunain yn cael eu cynrychioli gyda union 4 darnau. Felly, os ydym yn gwneud hyn, gadewch i mi agor golygydd testun yma - 'n annaearol AutoComplete - os byddwn yn gwneud golygydd testun bach yma, y ​​rhif 0x20 yn golygu yma yw 4 darnau, dyma 4 arall ddarnau. Gadewch i ni wneud y 4 rightmost darnau yn gyntaf. 0 pan cynrychioli gyda 4 darnau yw beth? Super hawdd. Dim ond yr holl 0au. Hynny 4 darnau yn 0au. Sut ydych chi'n cynrychioli 2? Mae wedi bod yn amser ers i ni wneud hyn, ond mae'n 0100. Felly, dyma'r lle 1s, dyma'r lle 2s, ac yna nid oes gwahaniaeth beth yw'r mannau eraill yn cael eu. Mewn geiriau eraill, yn hecsadegol gallech ddweud 0x20, ond os ydych yn meddwl wedyn am yr hyn sydd y 2 a sut mae'n cael ei gynrychioli yn binary, beth yw'r 0 a sut y mae'n cael ei gynrychioli yn binary, yr atebion i'r cwestiynau hynny yw hyn ac mae hyn, yn y drefn honno. Felly 0x20 yn digwydd cynrychioli y patrwm hwn o 8 did, sef yr union y mwgwd ein bod eisiau. Felly mae hyn yn ar hyn o bryd dim ond ymarferiad deallusol, ond y realiti yw mewn cod fel arfer mae'n fwy cyffredin i ysgrifennu cysonion fel hyn yn hecsadegol oherwydd wedyn gall y rhaglennydd yn gymharol hawdd, hyd yn oed os mae angen rhywfaint o bapur a phensil, chyfrif i maes beth y patrwm o ddarnau yn oherwydd nid ydych yn gallu mynegi 0s a 1s fel arfer mewn cod. Ni allwch fynd 00,010 ac yn y blaen. Mae'n rhaid i chi ddewis nodiannau degol neu hecsadegol neu wythol neu eraill. Rhan fwyaf o bobl yn tueddu i ddewis hecsadegol yn syml fel bod pob digid yn cynrychioli 4 darnau a gallwch wneud hyn mathemateg gyflym. A byddaf yn chwifio fy llaw ar toupper, sydd bron yr un fath; mae'n edrych bron yn union yr un fath. Toupper digwydd i ddefnyddio'r nad yw'r gweithredwr neu ond yn hytrach y boi a df. Beth mae df ei gynrychioli? df? Dylai unrhyw un? >> [Myfyrwyr] 255. 255? Ddim yn 255. Byddai hynny'n ff. Byddwn yn gadael yr un yma fel ychydig o ymarfer corff. Ond os byddwch yn mynd o 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ac yna beth sy'n dod ar ôl 9? Rydym yn fath y tu allan o ddigidau degol, ond yn hecsadegol beth sy'n dod ar ôl 9? [Myfyrwyr] a. >> Felly, b, c, d. Gallwch chyfrif i maes oddi yno pa batrwm o ddarnau d gwirionedd gynrychioli. Ac os ydym yn gwneud y math, byddwn yn gweld bod y mwgwd byddwch yn mynd yn ôl yn union yr un fath i hyn. Mae hyn yn f, pob 1s, ac mae hyn yn d. Felly df cynrychioli'r mwgwd. Mae pob hawl. Ac nid yn olaf, i wneud sain pethau super, super technegol, ond cymerwn ein bod eisiau ysgrifennu rhaglen sy'n gwneud hyn. Gadewch i mi fynd yn ei flaen ac yn gwneud binary, sef rhaglen mewn ffeil o'r enw binary.c. Ac yn awr gad i mi redeg deuaidd ac yn rhoi i mi cyfanrif heb fod yn negyddol. Gadewch i ni ddechrau hawdd a theipiwch 0. Mae hyn yn awr yw rhaglen sy'n argraffu allan cyfanrif yn ei gynrychiolaeth deuaidd. Felly, os wyf yn chwarae'r gêm hon eto a deipio i mewn dim ond 1, dylwn gael cynrychiolaeth 32-bit o 1. Os byddaf yn gwneud hyn eto gyda 2, dylwn gael y. Os byddaf yn ei wneud 7, dylwn gael 1s ychydig ar y diwedd ac yn y blaen. Mae'n troi allan wyf yn sôn am hyn oherwydd gyda gweithrediadau bitwise alli 'n weithredol wneud 1 peth arall yn ogystal. Gallwch greu mygydau hyn yn ddeinamig. Cymerwch olwg ar yr enghraifft hon 1 arall sy'n ymwneud â gweithrediadau bitwise. Dyma'r rhan gyntaf y cod, wrth wraidd y defnyddiwr am nifer, ac mae'n mynnu eich bod yn rhoi i mi cyfanrif heb fod yn negyddol. Felly dyna fath o bethau hen ysgol. Ond dyma yn rhywbeth y fath o ddiddorol. Sut ydw i'n mynd ati i argraffu nifer yn deuaidd? Tro cyntaf i mi ailadrodd o beth i beth? Beth yw maint o int fel arfer, o leiaf yn y teclyn? >> [Myfyrwyr] 4. Mae'n 4. Hynny 4 * 8 yw 32 - 1 yn 31. Felly os dwi'n dechrau cyfrif o 31, sy'n cynrychioli, mae'n troi allan, dim ond yn gysyniadol, y rhan 31eg neu'r bit radd flaenaf, sef y dyn yma, gydag tra bod hyn yn mynd i fod yn 0 bit. Felly mae hyn yn ychydig yn 01 ... bit 31. Felly beth yw cod hwn yn ei wneud? Hysbysiad hwn ar gyfer dolen, er ei fod yn edrych yn cryptic, yn unig yw ailadrodd o 31 i lawr i 0. Dyna ni. Felly, y rhan ddiddorol rhaid bellach i fod yn y 5 llinell yma. Sylwch fod yn y llinell hon Rwy'n datgan mwgwd amrywiol o'r enw i fod yn gyson â'n hanes y niferoedd melyn. Ac yna beth mae hyn yn ei wneud? Mae hyn yn weithredwr arall bitwise nid ydym wedi gweld o'r blaen, yn fwyaf tebygol. Mae'n y gweithredwr sifft chwith. Mae'r gweithredwr yn gwneud hyn. Dyma'r rhif 1, ac os ydych yn ei wneud i adael sifft, newid y chwith, beth ydych chi'n feddwl sy'n cael yr effaith o wneud i bod 1 unigolyn? Yn llythrennol symud drosodd. Felly, os yw'r rhif 1 yn yr hyn yr ydych yn ei gael ar y chwith a byddwch yn dechrau drwy ymgychwyn i i 31, yr hyn yw ei fod yn mynd i wneud? Mae'n mynd i gymryd y rhif 1 a symud ei 31 o leoedd dros yma. Ac oherwydd does amlwg, nid oes digidau eraill y tu ôl iddo, bydd y rhai yn ddiofyn yn cael eu disodli gyda 0au. Felly, byddwch yn dechrau allan gyda rhif 1, sydd wrth gwrs yn edrych fel hyn - a gadewch i mi dynnu dros yma yn y ganolfan. Ac yna wrth i chi symud pethau i'r chwith, mae hyn yn guy yn ei hanfod yn mynd y ffordd hon. Ond cyn gynted ag y byddwch yn gwneud hynny, o 0 yn cael ei llenwi i mewn Os ydych yn symud eilwaith, mae'n mynd y ffordd hon ac un arall yn cael ei llenwi 0 i mewn Ydych yn symud eto, ac yna un arall yn cael ei llenwi 0 i mewn Felly, os byddwch yn gwneud hyn beth o 1 << i 31 o leoedd, ydych yn darfod i fyny yn cael mwgwd hynny yw 32 nod o hyd, yr un leftmost ohonynt yn 1, pob un o'r gweddill sydd yn 0. Ac mae'n troi allan, wrth fynd heibio, newid nifer ar y chwith fel hyn hefyd yn gyd-ddigwyddiad, ac weithiau yn gyfleus, cael yr effaith o wneud yr hyn at y nifer hwnnw? >> [Myfyrwyr] Dyblu ei. Dyblu ei fod pob un o'r colofnau - y lle 1, 2 lle, lle 4s, Lle 8, 16 lle - they're holl dyblu wrth i chi fynd i'r chwith. Neu yn hytrach, pan fyddwch yn symud y 1s ydych yn mynd i roi diwedd ar i fyny ddyblu gwerth y rhif. Gallwch pen draw yn gwneud trawsffurfiadau diddorol o ddigidau drwy symud popeth drosodd yn y ffordd hon gan bwerau o 2. Felly sut mae hyn yn gweithio? Mae hyn wedyn yn rhoi i mi mwgwd dyna i gyd 0au ac eithrio ar gyfer 1 mewn union y lle yr wyf yn dymuno hynny, ac yna ymadrodd hwn, sy'n cael ei ddwyn o toupper.c, yn syml, ddweud yn cymryd y nifer n bod y defnyddiwr deipio i mewn, "A" â'r hyn a wneir mwgwd, a beth yr ydych yn mynd i gael? Rydych yn mynd i gael 1 os oes o 1 yn y lleoliad cuddio, neu os ydych chi'n mynd i gael 0 os nad oes. Ac felly mae'r holl y rhaglen hon yn effeithiol yn bod ganddo dolen, ac mae'n creu mwgwd gyda 1 dros yma, yna 1 dros yma, yna 1 dros yma, ac mae'n defnyddio hyn bitwise a tric i ddweud a oes ychydig yn 1 mewn fewnbwn y defnyddiwr yma? A oes ychydig yn 1 mewn fewnbwn y defnyddiwr yma? Ac os felly, yn llythrennol argraffu 1, arall argraffu 0. Rydym yn gwneud hyn gyda ints yn unig oherwydd dyna pam yr ydym yn ei wneud 32 catiau yn hytrach na 8, ond yr hyn rydym wedi cyflwyno, yna mae hyn yn bitwise, mae hyn yn bitwise neu, ac mae hyn yn gweithredydd newid y chwith, nad ydynt yn aml yn hynod o ddefnyddiol, ond mae'n troi allan y gallant fod. Yn wir, pe baech yn cynrychioli rhywbeth fel amrywiaeth o Booleans dim ond i gynrychioli wir neu'n anwir, mae'n debyg eich bod yn awyddus i gadw golwg ar a yw ystafell yn llawn o 300 o fyfyrwyr yn bresennol, gallech ddatgan amrywiaeth o faint 300 o fath bool fel eich bod yn cael 300 bools, a gallwch osod yr un i wir os bydd rhywun yma a ffug fel arall. Pam fod cynrychiolaeth yn y strwythur data aneffeithlon? Beth sy'n ddrwg am y dyluniad o hynny, strwythur data amrywiaeth o 300 bools? Beth yw bool mewn gwirionedd o dan y cwfl? Mae hyn hefyd yn rhywbeth na allai fod yn gyfarwydd. Mae'n troi allan nad oes bool. Cofiwch, rydym fath o greu hynny gyda'r ffeil cs50.h, sydd ei hun yn cynnwys bool safonol. C yn fath o fud, fodd bynnag, pan ddaw'n fater o bool. Mae'n defnyddio 8 did i gynrychioli pob bool, sydd yn hollol wastraffus oherwydd yn amlwg, faint o ddarnau sydd eu hangen arnoch i gynrychioli bool? Dim ond 1. Felly, mae'n troi allan, os ydych yn awr yn cael y gallu gyda gweithredwyr bitwise i drin darnau unigol hyd yn oed mewn golosg, hyd yn oed mewn beit sengl, mae'n troi allan y gallech ostwng y gof i gynrychioli rhywbeth twp fel 'na strwythur data presenoldeb styled gan ffactor o 8. Yn hytrach na gan ddefnyddio 8 did i gynrychioli wir neu'n anwir, gallech llythrennol yn defnyddio 1 drwy ddefnyddio beit unigol ar gyfer bob 8 o fyfyrwyr yn y dosbarth a toggling 0-1 darnau unigol trwy ddefnyddio mathau hyn o lefel isel driciau. Hynny'n rhoi gwir diwedd ar yr ynni. A oes unrhyw gwestiynau am weithrediadau bitwise? Yeah. >> [Myfyrwyr] A oes weithredwr unig neu? Ydw. Mae gweithredwr unigryw neu sy'n edrych fel hyn, ^, y symbol moron, sy'n golygu mai dim ond y peth cyntaf neu gall y ail beth fod yn 1 ar gyfer y cynnyrch i fod yn 1. Mae yna hefyd, nid ~, a fydd yn caniatáu i chi gwrthdro o 0 i 1 neu i'r gwrthwyneb hefyd. Ac mae hefyd yn weithredwr newid i'r dde, >>, sef y gwrthwyneb i'r un a welsom. Mae pob hawl. Gadewch i ni gymryd pethau yn awr i lefel uwch. Rydym yn dechrau drwy siarad am destun ac yna cywasgu ei a chynrychioli'r testun gyda niferoedd llai o ddarnau; buom yn siarad ychydig am sut y gallwn yn awr yn dechrau trin pethau ar lefel bitwise. Gadewch i ni yn awr yn chwyddo yn ôl i fyny 10,000 troedfedd i gynrychiolaeth o bethau mwy cymhleth megis graffeg. Yma mae gennym baner yr Almaen, dyma mae gennym un o Ffrainc. Gallai'r rhain gael eu cynrychioli mewn fformatau ffeil efallai y byddwch yn gwybod - GIFs, er enghraifft. Os ydych chi wedi gweld erioed ddelwedd ar y We sy'n gorffen efo. Gif, mae hwn yn ffurf cyfnewidfa graffeg. Mae'r 2 baneri yma fath o addas ar gyfer cywasgu am yr hyn efallai yn amlwg reswm? >> [Anghlywadwy ymateb y myfyrwyr] Mae yna lawer o ailadrodd, dde? Er mwyn anfon yr Almaen baner, yn meddwl am hyn fel bod â delwedd ar y sgrin cefnogi yn eich dyddiau Scratch. Efallai y byddwch yn cofio bod yna picsel unigol neu ddotiau sy'n cyfansoddi ddelwedd. Mae rhes gyfan o dotiau du ac un arall rhes gyfan o dotiau du. Mae 'na griw o resi o dotiau du y gallem weld os ydym chwyddo mewn gwirionedd, llawer yn hoffi pan rydym yn chwyddo i mewn ar Rob wyneb yn Photoshop. Cyn gynted ag y cawsom ddyfnach ac yn ddyfnach ac yn ddyfnach i mewn i'r ddelwedd, i chi ddechrau gweld y picselu, pob un o'r sgwariau a gyfansoddodd ei lygaid yn yr achos hwnnw. Un fargen yma. Os byddwn yn chwyddo i mewn gryn dipyn, byddech yn gweld dotiau unigol. Wel, mae hyn yn fath o wastraff o ddarnau. Os yw traean o'r faner yn ddu a thraean y faner yn felyn ac yn y blaen, pam na allwn ni rywsut cywasgu y faner? A gallai hyd yn oed y faner Ffrengig yn cael ei gywasgu er bod y patrwm hwn ychydig yn wahanol. Mae'n troi allan y fformat ffeil GIF yn fformat cywasgu lossless, sy'n golygu y gallwch gymryd ddelwedd fel y faner yr Almaen yma, gallwch chi daflu i ffwrdd llawer o'i ddarnau heb aberthu ansawdd. Mae hyn yn wahanol i rywbeth fel JPEG, y mae rhan fwyaf ohonom yn ôl pob tebyg yn fwy cyfarwydd. Facebook lluniau a lluniau Flickr ac yn y blaen yn cael eu bron bob amser yn arbed fel JPEG pan fyddant yn llwytho i fyny, ond JPEG yn lossy - fformat lle rydych yn taflu darnau - lossy ond byddwch hefyd yn taflu i ffwrdd ansawdd. Ac felly os ydych yn cywasgu lluniau gyda Photoshop neu lwytho i Facebook neu fynd â nhw ar ffôn wirioneddol crappy, eich bod yn gwybod bod y darlun yn dechrau mynd yn splotchy a pixelated, ac mae hynny oherwydd ei fod yn cael ei gywasgu gan y cyfrifiadur neu dros y ffôn gan llythrennol taflu gwybodaeth i ffwrdd. Ond GIF yn anhygoel ei fod yn gallu defnyddio darnau llai nag y gallai ddiofyn heb golli unrhyw wybodaeth. Ac yn ei hanfod yn gwneud hynny fel a ganlyn. Yn hytrach na storio mewn ffeil fel BMP byddai yn driphlyg RGB ar gyfer du, du, du, du, ddu, ddu, ddu, ddu, ddu, ddu, ddu, ddu ac yn y blaen, yn hytrach, y fformat GIF yn mynd i ddweud, "Black," ac yna, "Gwnewch hyn eto 100 gwaith," neu rywbeth fel 'na. "Black, ailadrodd y 100 gwaith, du, ailadrodd y 100 gwaith ..." "Melyn, ailadrodd y 100 o weithiau." Ac felly mae'n cofio, yn y bôn, mae'r picsel leftmost ac yna amgodio rhywsut y syniad o ailadrodd y picsel eto ac eto. Felly gall GIFs yna cywasgu eu hunain heb golli unrhyw wybodaeth. Ond os oedd gennych i ddyfalu, os mai dyna yw'r algorithm sy'n gifs defnyddio, pa un o'r baneri hyn, er eu bod yn edrych yn union o ran maint, yn mynd i fod yn llai pan arbed ar ddisg fel GIF? >> [Myfyrwyr] yr Almaen. Yr Almaen yn mynd i fod yn llai? Pam? [Myfyrwyr] Oherwydd eich bod yn ei ailadrodd llawer, lawer gwaith yn llorweddol ac yna i chi ailadrodd amser arall. >> Yn union. Oherwydd bod y bobl a ddyfeisiodd GIF unig fath o benderfynu fympwyol y bydd yr ailadrodd yn cael ei ysgogi llorweddol ac nid ochrol. Mae ailadrodd llawer mwy ochrol yma yn y faner yr Almaen nag yn y faner Ffrengig. Felly, os ydym mewn gwirionedd yn agor i fyny ffolder ar fy disg caled sydd y GIFs, alli 'n weithredol weld bod y faner yr Almaen yma yw 2 cilobeit ac mae'r un Ffrangeg yw 4 cilobeit. Mae'n digwydd i fod yn gyd-ddigwyddiad bod un ddwywaith y llall, ond mae'n mewn gwirionedd yr achos bod y faner Ffrengig yn llawer mwy. Hyd yn oed er ein bod yn sôn yma am graffeg, gall yr un syniadau yn berthnasol i Nid yw pethau fel baneri ond delweddau sydd yn ychydig yn fwy cymhleth. Os ydych yn cymryd llun o afal, yn sicr mae 'na lot o ddyblygu yno, er mwyn i ni rywsut gofio bod y cefndir rhagosodedig yn las ac nid, fel y llun ar y dde yn awgrymu, rhaid i chi gofio y lliw o bob picsel unigol yn y llun hwn. Felly gallwn daflu i ffwrdd darnau yno heb golli gwybodaeth. Yr afal yn dal i edrych yn union yr un fath. Yn yr enghraifft yma, efallai y byddwch yn gweld beth sy'n digwydd mewn ffilm. Mae'r rhain yn cynrychioli riliau ysgol ffilm hen lle yn y ddelwedd top mae gennych gyrru gwerth ardrethol heibio i dŷ a choeden. Ac fel y fan yn gyrru heibio o'r chwith i'r dde, yr hyn nad sy'n amlwg yn newid? Nid yw'r tŷ yn mynd i unrhyw le, ac nid yw'r goeden yn mynd yn unrhyw le. Yr unig beth sy'n symud yn y fan yn yr achos hwn. Felly, fel Cefndir Dim newid yn awgrymu, beth allwch chi ei wneud mewn ffilmiau yn yr un modd yn unig taflu i ffwrdd gwybodaeth nad yw'n newid rhwng fframiau. Gelwir hyn yn gyffredinol fel interframe cywasgu lle os yw hyn yn ffrâm yn edrych bron yn union yr un yma, gadewch i ni trafferthu storio ar ddisg unrhyw wybodaeth union yr un fath ar y fframiau canolradd, gadewch i ni ond yn defnyddio fframiau allweddol unwaith yn tra sydd mewn gwirionedd yn cadw y wybodaeth redundantly yn unig fel bwyll bach gwirio. Mewn cyferbyniad, ymagwedd arall fideo gywasgu sydd yn y ail enghraifft ac yn is yma, lle yn hytrach na storio 30 fframiau, pam na wnewch chi yn unig storio 15 fframiau ail yn lle hynny? Yn hytrach na'r math o ffilm llifo hardd, yn hollol, gallai fod yn edrych fel ei fod yn atal dweud ychydig bach, ysgol hen bach, ond bydd yr effaith net fydd defnyddio darnau llawer llai nag y gallai fel arall fod yn angenrheidiol. Felly, lle mae hyn yn wedyn yn gadael i ni? Yr oedd yn dipyn o neilltu ar ble arall y gallwch fynd â cywasgu. Am fwy o wybodaeth am hynny, gymryd dosbarth fel CS175 yma. Dyma enghraifft arall o fewn fideo. Os yw'r gwenyn yw'r unig beth sy'n symud, gallwch chi wir yn taflu i ffwrdd gwybodaeth yn y fframiau canol oherwydd nad oedd y blodau a'r awyr a dail yn newid. Ond gadewch i ni nawr ystyried 1 peth diwethaf. Yn y 5 munud nesaf rydym yn gadael y tu ôl i C am byth mewn darlith? Ydw. Nid yn y psets, er. Stori ddiwethaf am C ac yna rydym yn mynd i'r stwff iawn sexy cynnwys HTML a Gwe a woo-hw. Mae pob hawl. Yma rydym yn mynd. Dyna'r cymhelliant. Mae'n troi allan yr holl amser hwn pan fyddwn wedi bod yn ysgrifennu rhaglenni rydym yn cynnal Clang. Ac Clang, rydym wedi dweud ers yr wythnos gyntaf 'n bert lawer, yn cymryd cod ffynhonnell ac yn ei droi'n cod gwrthrych. Mae'n cymryd C ac yn ei droi'n 0s a 1s. Rydw i wedi fath o bod yn gorwedd i chi am ychydig wythnosau gan nad yw'n mor syml â hynny. Mae llawer mwy yn mynd ymlaen o dan y cwfl pan fyddwch yn rhedeg rhaglen fel Clang. Yn wir, gall y broses o lunio rhaglen mewn gwirionedd fod yn crynhoi, fel y byddech yn cofio o Rob fideo ar crynoadyddion, i mewn i'r 4 cam: cyn-prosesu, crynhoi ei hun, cydosod, a chysylltu. Ond rydym yn y dosbarth a rhan fwyaf o bobl yn y byd fel arfer yn crynhoi pob un o'r camau fel dim ond "llunio." Ond os ydym yn dechrau gyda cod ffynhonnell fel hyn, cofio efallai mai dyma raglen C symlaf rydym wedi ysgrifennu hyd yn hyn, yn cofio pan luniwyd yn dod i ben i fyny yn edrych fel hyn. Ond mae mewn gwirionedd yn gam canolradd, a'r rhai camau fel a ganlyn. Yn gyntaf, mae hyn yn beth ar frig o hyn ac mae'r rhan fwyaf o'n rhaglenni, # Cynnwys Beth mae # cynnwys yn i ni? Mae'n gopïau 'n bert lawer a pastau cynnwys stdio.h i mewn i fy ffeil fel bod pam? Pam ydw i'n poeni am gynnwys stdio.h? Beth sydd yn bod o ddiddordeb? Printf y datganiad, ei prototeip, fel bod y casglwr wedyn yn gwybod beth wyf yn ei olygu pan fyddaf yn sôn am y swyddogaeth hon printf. Felly gam 1 wrth lunio yn cyn-brosesu, lle mae rhaglen fel Clang neu ryw raglen cynorthwy-ydd sy'n Clang dod gyda darllen eich cod top i'r gwaelod, chwith i'r dde, ac unrhyw amser y mae'n gweld symbol # ddilyn gan allweddair fel cynnwys, mae'n perfformio gweithrediad hwnnw, copïo a gludo yn yr achos stdio.h i mewn i'ch ffeil. Dyna cam 1. Yna oes gennych ffeil C llawer mwy oherwydd y copi enfawr, swydd past sydd wedi digwydd yn unig. Cam 2 bellach yn llunio. Ond mae'n troi allan yn cymryd llunio cod ffynhonnell sy'n edrych fel hyn ac yn troi i mewn i rywbeth sy'n edrych fel hyn, sydd ar gyfer y rhai cyfarwydd yn cael ei alw? >> [Myfyrwyr] Cynulliad. Iaith y Cynulliad. >> Mae hyn mewn gwirionedd yn rhywbeth os ydych yn cymryd CS61 byddwch yn plymio i mewn i yn fwy manwl. Yw hyn yn ymwneud mor agos ag y gallwch fynd i ysgrifennu 0s a 1s eich hun ond yn ysgrifennu pethau yn y fath ffordd sy'n dal i wneud o leiaf ychydig o synnwyr. Mae'r rhain yn gyfarwyddiadau peiriant, ac os ydym yn sgroliwch i lawr at y prif swyddogaeth yma, sylwi bod y cyfarwyddyd hwn gwthio, yn symud cyfarwyddyd, tynnu cyfarwyddyd, ffoniwch cyfarwyddyd, ac yn y blaen. Pan fyddwch yn clywed bod eich cyfrifiadur wedi Intel tu mewn, gennych CPU Intel yn eich Mac neu PC, beth mae hynny'n ei olygu? Mae CPU daw adeiladwyd gan gwmnïau fel Intel deall cyfarwyddiadau penodol. Nid oes ganddynt unrhyw syniad pa swyddogaethau fel cyfnewid yn cael neu yn cael eu prif per se, ond maent yn gwybod beth yn isel iawn ar lefel cyfarwyddiadau fel adio, tynnu, gwthio, symud, ffoniwch, ac yn y blaen yn cael eu. Felly, pan fyddwch yn llunio C côd i mewn cynulliad iaith, eich defnyddiwr gyfeillgar iawn-edrych cod yn cael ei drawsnewid i mewn i rywbeth sy'n edrych fel hyn, sy'n llythrennol yn symud bytes neu 4 bytes o gwmpas mewn unedau bychain o'r fath mewn ac allan o'r CPU. Ond yn y diwedd, pan Clang yn barod i gymryd y gynrychiolaeth eich rhaglen i 0s a 1s, yna y cam a elwir yn cydosod yn digwydd, ac eto i gyd yn digwydd yn y Blink o llygad wrth redeg Clang. Rydym yn dechrau yma, mae'n allbynnu ffeil fel hyn, ac yna mae'n troi i'r hyn 0s a 1s. Ac os ydych chi am fynd yn ôl ar ryw adeg ac mewn gwirionedd yn gweld hyn yn gweithredu, os byddaf yn mynd i mewn i hello1.c--mae hyn yn un o'r rhaglenni cyntaf i ni edrych ar - Fel arfer, byddem yn llunio hyn gyda hello1.c Clang a byddai hyn yn rhoi i ni a.out. Os trwy cyferbyniad chi yn hytrach na rhoi y faner-S, beth y byddwch yn ei gael yw hello1.s a byddwch mewn gwirionedd yn gweld yr iaith yn y Cynulliad. Rwy'n gwneud hyn ar gyfer rhaglen byr iawn, ond os byddwch yn mynd yn ôl ar gyfer Scramble neu Adfer neu unrhyw raglen ydych wedi ysgrifenedig ac yn unig allan o chwilfrydedd am weld beth mewn gwirionedd mae'n edrych fel, yr hyn mewn gwirionedd yn cael eu bwydo i mewn i'r CPU, gallwch ddefnyddio y-S faner gyda Clang. Ond yna yn olaf, mae yn dal 1 Gotcha. Dyma'r 0au ac 1 sy'n cynrychioli fy gweithredu helo, byd. Ond yr wyf yn defnyddio rhywun arall swyddogaeth yn fy rhaglen. Felly, er bod y broses wedi bod yn cymryd yr wyf hello.c, mae'n cael ei llunio i mewn i cynulliad cod, ac yna mae'n cael ei gydosod i mewn i 0au ac 1, yr unig 0au ac 1 sy'n cael eu outputted ar hyn o bryd yw'r rhai sy'n deillio o fy cod. Ond y person a ysgrifennodd printf, maent yn llunio eu cod 20 mlynedd yn ôl ac mae wedi gosod bellach yn rhywle ar y peiriant, felly rydym rywsut rhaid iddynt gyfuno 0au ef neu hi ac 1 gyda fy 0s a 1s, a daw hynny â ni at y cam 4 a derfynol o gasglu, a elwir yn cysylltu. Felly, ar yr ochr chwith mae gennym yr un llun yn union fel o'r blaen: hello.c dod cynulliad cod yn dod yn 0s a 1s. Ond yn cofio fy mod yn defnyddio'r safon I / O llyfrgell yn fy cod, ac mae hynny'n golygu rhywle ar y cyfrifiadur mae ffeil o'r enw stdio.c neu o leiaf y fersiwn a luniwyd hynny oherwydd bod rhywun rai blynyddoedd yn ôl llunio stdio.c i mewn i cod cynulliad ac yna criw cyfan o 0s a 1s. Mae hyn yn beth a elwir yn statig neu lyfrgell deinamig. Mae'n rhai ffeil yn eistedd rhywle yn y peiriant. Ond yn olaf, rhaid i mi gymryd fy 0s a 1s, a bod y person 0s a 1s a rhywsut cysylltu â'i gilydd, yn llythrennol cyfuno rhai 0s a 1s mewn un ffeil o'r enw a.out neu hello1 neu beth bynnag y gelwais fy rhaglen fel bod y canlyniad terfynol yr holl o'r 1s 0s a ddylai gyfansoddi fy rhaglen. Felly, yr holl amser hwn y semester pan fyddwch wedi bod yn defnyddio Clang a hyd yn oed yn fwy diweddar yn rhedeg eu gwneud er mwyn rhedeg Clang, pob un o'r camau hyn wedi bod yn digwydd math o yn syth ond yn fwriadol. Ac felly os ydych yn parhau ar mewn gwyddoniaeth gyfrifiadurol, sef CS61, dyma'r haen y byddwch yn parhau i plicio ôl oddi yno sôn am effeithlonrwydd, goblygiadau diogelwch, ac yn y blaen o'r manylion hyn ar lefel is. Ond gyda hynny, rydym chi ar fin gadael C ar ôl. Gadewch i ni fynd yn ei flaen ac yn cymryd ein 5-munud egwyl yn awr, a phan fyddwn yn dod yn ôl: y Rhyngrwyd. Mae pob hawl. Rydym yn ôl. Nawr rydym yn dechrau ein golwg nid yn unig yn HTML oherwydd, fel y gwelwch, HTML ei hun mewn gwirionedd yn eithaf syml ond mewn gwirionedd yn rhaglennu ar y we yn fwy cyffredinol, rhwydweithio yn fwy cyffredinol, a sut y mae pob un o'r technolegau dod at ei gilydd i'n galluogi i greu rhaglenni llawer mwy soffistigedig ar ben y Rhyngrwyd na hyd yn hyn rydym wedi bod yn gallu yn y ffenestri du a gwyn. Yn wir, ar y pwynt hwn yn y semester, hyd yn oed er y bydd yn treulio amser yn gymharol llai ar PHP, HTML, CSS, JavaScript, SQL a mwy, rhan fwyaf o fyfyrwyr yn gwneud y pen draw yn gwneud prosiectau terfynol sy'n seiliedig ar y we oherwydd fel y gwelwch, y cefndir ydych yn awr o ran C yn fawr iawn berthnasol i'r ieithoedd hyn ar lefel uwch. Ac wrth i chi ddechrau meddwl am eich prosiect terfynol, sydd, yn debyg iawn Problem Set 0 lle rydych yn cael eu hannog i wneud unrhyw beth y rhan fwyaf o ddiddordeb i chi yn Scratch, y prosiect terfynol yw eich cyfle i gymryd eich gwybodaeth newfound a savvy gyda C neu PHP neu JavaScript neu debyg allan am dro ac yn creu eich darn eich hun o feddalwedd ar gyfer y byd ei weld. Ac i hadau chi gyda syniadau, yn gwybod eich bod yn gallu ben yma, projects.cs50.net. Bob blwyddyn rydym yn cymell syniadau gan cyfadran a staff a grwpiau o fyfyrwyr ar y campws dim ond i gyflwyno eu syniadau ar gyfer pethau diddorol y gellid eu datrys gan ddefnyddio cyfrifiaduron, defnyddio gwefannau, gan ddefnyddio meddalwedd. Felly, os ydych yn cael trafferth i ddod o hyd i syniad eich hun, ar bob cyfrif sgrolio drwy'r syniadau yno o eleni a'r llynedd. Mae'n berffaith iawn i fynd i'r afael â phrosiect sydd wedi ei afael o'r blaen. Rydym wedi gweld llawer o apps ar gyfer gweld y statws o golchi dillad ar y campws, apps llawer ar gyfer llywio y fwydlen bwyta neuadd, apps llawer o lywio drwy'r catalog cwrs ac yn y blaen. Ac yn wir, mewn darlith yn y dyfodol ac mewn seminarau yn y dyfodol, byddwn yn eich cyflwyno i rai APIs ar gael i'r cyhoedd, yn ar gael yn fasnachol yn ogystal ag yma ar gael o CS50 ar y campws er mwyn i chi gael mynediad at ddata a gall wedyn wneud pethau diddorol ag ef. Felly mwy o wybodaeth am brosiectau terfynol mewn ychydig ddyddiau pan fyddwn yn rhyddhau y fanyleb, ond ar hyn o bryd, yn gwybod y gallwch weithio unigol neu gydag 1 neu 2 ffrindiau ar y rhan fwyaf unrhyw brosiect o ddiddordeb i chi. Y Rhyngrwyd. Byddwch yn mynd yn ei flaen a thynnu allan eich gliniadur, byddwch yn mynd i facebook.com am y tro cyntaf, Nid yw wedi logio i mewn yn ddiweddar, a daro Chofnoda. Beth yn union sy'n digwydd? Pan fyddwch yn daro Nodwch ar eich cyfrifiadur, criw cyfan o gamau dechrau fath o hud a lledrith yn digwydd. Felly chi yma ar y chwith, weinydd y we fel Facebook yma ar y dde, a rhywsut ydych yn defnyddio yr iaith hon a elwir yn HTTP, Hypertext Drosglwyddo Protocol. Nid yw HTTP yn iaith raglennu. Mae'n fwy o protocol. Mae'n set o gonfensiynau bod porwyr gwe a gweinyddwyr gwe defnyddio wrth intercommunicating. A beth mae hyn yn golygu fel a ganlyn. Mae llawer yn hoffi yn y byd go iawn, mae gennym y confensiynau lle os byddwch yn cwrdd â rhai dynol am y tro cyntaf, os nad ydych yn meddwl humoring mi yma, Efallai y byddwn yn dod i fyny i chi, yn dweud, "Hi, fy enw i yw David." >> Hi, David. Fy enw i yw Sammy. "Hi, David. Fy enw i yw Sammy." Felly, nawr rydym wedi cymryd rhan yn unig yn y math hwn o protocol wirion dynol lle rwyf wedi cychwyn y protocol, Sammy wedi ymateb, rydym wedi ysgwyd dwylo, ac mae'r trafodiad yn gyflawn. HTTP yn debyg iawn o ran ysbryd. Pan fydd eich ceisiadau ar y we porwr www.facebook.com, beth yw eich porwr yn ei wneud mewn gwirionedd yn ymestyn ei law, fel petai, i'r gweinydd ac mae'n anfon neges. A dyna neges yn nodweddiadol yn cael rhywbeth fel - beth ydych chi eisiau ei gael? - mynd i mi y tudalen cartref sy'n cael ei dynodi fel arfer gan un slaes ar ddiwedd URL. Ac yn union fel eich bod yn gwybod pa iaith dwi'n siarad, yr wyf yn y porwr i'n mynd i ddweud wrthych fy mod yn siarad HTTP fersiwn 1.1, A hefyd ar gyfer mesur da dwi'n mynd i ddweud wrthych fod y llu fy mod am i'r dudalen gartref yn facebook.com. Yn nodweddiadol, a, porwr gwe unbeknownst i chi dynol, anfon y neges ar draws y Rhyngrwyd pan fyddwch yn syml deipio www.facebook.com, Mewnbynnu, i mewn i'ch porwr. A beth mae Facebook yn ymateb gyda? Mae'n ymateb gyda rhai manylion tebyg sy'n edrych cryptic, ond hefyd yn llawer mwy. Gadewch i mi fynd yn ei flaen i dudalen gartref Facebook yma. Dyma'r sgrîn sydd byth yn y rhan fwyaf ohonom yn ôl pob tebyg weld os ydych yn aros wedi logio i mewn drwy'r amser, ond mae hyn yn wir eu tudalen gartref. Os gwnawn hyn yn Chrome, yn sylwi eich bod yn gallu dynnu i fyny y bwydlenni cyd-destun bach. Gan ddefnyddio Chrome, boed ar Mac OS, Windows, Linux, neu bethau tebyg, os ydych Rheoli cliciwch neu cliciwch chwith, gallwch fel arfer dynnu i fyny bwydlen sy'n edrych fel hyn, lle mae ychydig o ddewisiadau yn disgwyl amdano, ac un ohonynt yw Ffynhonnell Page View. Gallwch hefyd fel arfer yn cyrraedd y pethau hyn drwy fynd i'r ddewislen View a procio o gwmpas. Er enghraifft, yma o dan View, Datblygwr yw'r un peth. Rydw i'n mynd i fynd yn ei flaen ac edrych ar Ffynhonnell Page View. Beth fyddwch chi'n ei weld yn y HTML bod Mark wedi ysgrifennu i gynrychioli facebook.com. Mae'n llanast llwyr yma, ond byddwn yn gweld bod hyn yn gwneud synnwyr ychydig yn fwy cyn bo hir. Ond mae rhai patrymau yma. Gadewch i mi sgrolio i lawr i bethau fel hyn. Mae hyn yn anodd i bobl i ddarllen, ond sylwi fod yna patrwm hwn o cromfachau ongl gyda geiriau allweddol fel opsiwn, geiriau allweddol fel gwerth, rhai llinynnau a ddyfynnwyd. Dyma lle pan fyddwch yn ymuno am y tro cyntaf a bennir beth yw eich blwyddyn geni yn. Bod gwymplen o flynyddoedd geni ei hamgodio rywsut yma yn yr iaith hon o'r enw HTML, HyperText Markup Language. Mewn geiriau eraill, pan fydd eich porwr yn gofyn am dudalen ar y we, mae'n siarad confensiwn hwn a elwir yn HTTP. Ond beth mae facebook.com ymateb i'r cais hwnnw gyda? Mae'n ymateb gyda rhai o'r negeseuon cryptig, fel y byddwn yn gweld mewn munud. Ond mae'r rhan fwyaf o'i hymateb yn y ffurf HTML, HyperText Markup Language. Dyna yr iaith gwirioneddol y mae tudalen ar y we yn cael ei ysgrifennu. A beth porwr gwe wir yn hynny yw, ar ôl derbyn rhywbeth sy'n edrych fel hyn, darllen yn top i'r gwaelod, o'r chwith i'r dde, ac unrhyw amser y mae'n gweld un o'r bracedi ongl ddilyn gan allweddair fel opsiwn, mae'n dangos bod iaith markup yn y ffordd briodol. Yn yr achos hwn, byddai'n dangos gwymplen o flynyddoedd. Ond unwaith eto, mae hwn yn llanast llwyr i edrych ar. Nid yw hyn oherwydd bod datblygwyr Facebook amlygu 0 ar gyfer 5 am arddull, er enghraifft. Mae hyn oherwydd bod y rhan fwyaf o'r cod eu bod yn ysgrifennu mewn gwirionedd yn ysgrifenedig hardd, Dywedodd yn dda, mewnoli 'n glws, ac ati, ond o beiriannau gwrs, cyfrifiaduron, porwyr ddim wir yn rhoi damn a yw eich cod yn styled dda. Ac yn wir, mae'n hollol wastraffus i gyrraedd yr allwedd tab holl adegau hynny ac i roi sylwadau trwy gydol eich cod ac i ddewis enwau amrywiol iawn disgrifiadol oherwydd os nad yw'r porwr yn poeni, y cyfan rydych chi'n ei wneud ar ddiwedd y dydd yn gwastraffu bytes. Felly, mae'n troi allan yr hyn y rhan fwyaf o wefannau wneud yw er bod y cod ffynhonnell ar gyfer facebook.com, gyfer cs50.net a phob un o'r gwefannau eraill ar y Rhyngrwyd yn nodweddiadol hysgrifennu'n dda ac yn dda sylwadau a mewnoli 'n glws ac yn y blaen, fel arfer cyn i'r wefan yn cael ei roi ar y Rhyngrwyd, caiff y cod ei minified, lle mae'r HTML a CSS - rhywbeth arall y byddwn yn fuan yn gweld - y cod JavaScript byddwn cyn hir yn gweld ei gywasgu lle enwau amrywiol hir yn digwydd yn X ac Y a Z, a hynny i gyd gofod sy'n gwneud popeth yn edrych mor ddarllenadwy yn cael ei daflu i gyd i ffwrdd, oherwydd os ydych yn meddwl am 'i hon ffordd, Facebook yn cael tudalen biliwn yn taro dydd - rhywbeth crazy fel 'na - felly beth os rhaglennydd dim ond i fod rhefrol taro'r 1 lle bar amser ychwanegol yn unig i indent rhywfaint o linell o god erioed gymaint yn fwy? Beth yw'r goblygiadau os bydd Facebook yn cadw y gofod ym mhob un o'r bytes maent yn ei anfon yn ôl i bobl ar y Rhyngrwyd? Cyrraedd y bar gofod pan fydd yn rhoi i chi beit ychwanegol yn eich ffeil. Ac os biliwn o bobl yn mynd ymlaen i lwytho i lawr y dudalen gartref y diwrnod hwnnw, faint mwy o ddata rydych chi wedi eu trosglwyddo dros y Rhyngrwyd? Mae gigabyte heb reswm da. Ac yn ganiataol, am lawer o wefannau nad yw hyn yn fater mor scalable, ond ar gyfer Facebook, ar gyfer Google, ar gyfer rhai o'r gwefannau mwyaf poblogaidd mae cymhelliant mawr yn ariannol i wneud eich cod yn edrych fel llanast fel eich bod yn ei ddefnyddio fel bytes lleied â phosibl yn ychwanegol at, yna cywasgu ei defnyddio rhywbeth fel zip, a elwir yn algorithm gzip bod y porwr yn gwneud i chi yn awtomatig. Ond mae hyn yn ofnadwy. Fyddwn ni byth yn dysgu dim am wefannau pobl eraill a sut i ddylunio gwe dudalennau os oes rhaid inni edrych arno fel hyn. Felly, yn ffodus, porwyr fel Chrome a IE a Firefox y dyddiau hyn dod yn nodweddiadol gydag offer datblygwr adeiladedig i mewn. Yn wir, os byddaf yn mynd i lawr yma i Archwilio Elfen neu os byddaf yn mynd i View, Datblygwr, a cer at Celfi Datblygwr yn benodol, ffenestr hon ar waelod fy sgrin erbyn hyn pops i fyny. Mae'n ychydig yn frawychus ar y dechrau oherwydd bod llawer o tabs anghyfarwydd yma, ond os byddaf yn cliciwch ar Elfennau yr holl ffordd ar y chwith gwaelod, Chrome yn amlwg yn eithaf smart. Mae'n gwybod sut i ddehongli pob cod hwn. Ac felly pa Chrome wneud yw ei glanhau i fyny holl Facebook HTML. Er nad oes gofod yno, nid oes bant yno, bellach yn sylwi y gallaf ddechrau i lywio y dudalen gwefan hon i gyd yn fwy hierarchaidd. Mae'n troi allan y dylai pob tudalen ar y we a ysgrifennwyd mewn iaith o'r enw HTML5 dechrau gyda hyn, datganiad hwn DOCTYPE, fel petai: Mae'n fath o olau a llwyd yno, ond dyna y llinell gyntaf o god yn y ffeil hon, ac mai dim ond dweud wrth y porwr, "Hey, dyma daw rhywfaint o HTML5. Yma hon tudalen ar y we." Mae'r braced agored cyntaf y tu hwnt sy'n digwydd bod yn y peth hyn, yn dag HTML braced agored, ac yna, os wyf yn plymio yn ddyfnach - mae'r saethau yn gwbl ddiystyr; eu bod yn unig ar gyfer cyflwyno mwyn, nid ydynt mewn gwirionedd yn y ffeil - sylwi bod tu mewn Facebook yn tag HTML, unrhyw beth sy'n dechrau gyda braced agored ac yna wedi gair a elwir yn tag. Felly, y tu mewn i'r tag HTML yn ymddangos yn tag pen a tag corff. Y tu mewn y tag pen nawr yn llanast gyfan ar gyfer Facebook oherwydd bod ganddynt lawer o metadata a phethau eraill ar gyfer marchnata a hysbysebu. Ond os ydym yn sgroliwch i lawr, i lawr, i lawr, i lawr, gadewch i ni weld lle y mae. Dyma hi. Mae hyn yn un o leiaf rywfaint yn gyfarwydd. Mae'r teitl y dudalen gartref Facebook, os ydych chi erioed wedi edrych yn y tab yn eich bar teitl, yn Croeso i Facebook - Mewngofnodi, Cofrestru neu Dysgu Mwy. Dyna beth fyddech yn ei weld yn y bar teitl Chrome, yn a dyna sut y mae'n cynrychioli mewn cod. Os byddwn yn anwybyddu'r popeth arall yn y pen, y rhan fwyaf o'r perfedd o dudalen we yn y corff, ac mae'n troi allan bod Facebook cod yn mynd i edrych yn fwy cymhleth na'r rhan fwyaf o bethau byddwn yn ysgrifennu i ddechrau dim ond oherwydd ei fod yn cael ei adeiladu i fyny dros y blynyddoedd, ond mae llawer gyfan o tagiau sgript, JavaScript cod, sy'n gwneud y wefan yn rhyngweithiol iawn: gweld diweddariadau statws yn syth gan ddefnyddio ieithoedd fel JavaScript. Mae rhywbeth a elwir yn div, sy'n adran o dudalen. Ond cyn i ni gyrraedd y manylion, gadewch i ni geisio chwyddo allan ac yn edrych ar fersiwn symlach o Facebook 1.0, felly, i siarad. Dyma'r helo, byd tudalennau gwe. Mae ganddo y datganiad hwnnw DOCTYPE ar frig sydd ychydig yn wahanol i bopeth arall. Nid oes unrhyw beth arall byddwn yn ysgrifennu mewn tudalen we yn mynd i ddechrau gyda gyfer beiddgar. Unwaith eto, y stori yr un fath: hello, coma, dechrau gwneud eofn hwn, yna y byd yn cael ei hargraffu mewn print trwm, ac mae hyn yn golygu rhoi'r gorau i argraffu hyn mewn print trwm. Gadewch i mi fynd yn ei flaen ac arbed fy ffeil, fynd yn ôl i Chrome, 'n annhymerus' chwyddo i mewn jyst fel y gallwn weld yn well, ac yn ail-lwytho, a byddwch yn gweld y byd hwnnw yn awr mewn print trwm. Mae'r We yn ymwneud â hypergysylltiadau, felly gadewch i ni fynd ymlaen a gwneud hyn: fy ngwefan hoff yw, gadewch i ni ddweud, youtube.com. Achub, ail-lwytho. Iawn. Mae yna broblemau pâr bellach ar wahân i'r hideousness y wefan. 1, rwy'n eithaf siwr fy mod yn taro Nodwch yma. Ac yr wyf yn ei wneud. Rwy'n nid yn unig yn taro Mewnbynnu, yr wyf hefyd yn mewnoli, ymarfer yr hyn rydym wedi bod yn pregethu am arddull, ond mae fy yn iawn nesaf i'r byd. Felly, pam mae hyn? Porwyr dim ond gwneud yr hyn rydych yn dweud iddynt ei wneud. Nid wyf wedi dweud wrth y porwr, "llinellau Break yma. Mewnosoder paragraff torri yma." Felly y porwr, nid yw o bwys os wyf yn taro Dychwelyd 30 o weithiau, mae'n dal yn mynd i roi fy dde nesaf at y byd. Beth Fi 'n sylweddol yn rhaid i wneud yma yn dweud rhywbeth fel
, mewnosod toriad llinell. Ac mewn gwirionedd, mae toriad llinell yn fath o beth rhyfedd oherwydd na allwch wir yn dechrau symud i un arall llinell, yna gwneud rhywbeth, ac yna stopio symud i linell newydd. Mae'n fath o lawdriniaeth atomig. Byddwch naill ai yn ei wneud neu os nad ydych yn ei wneud. Rydych yn taro'r Enter neu os nad ydych yn ei wneud. Felly br mae ychydig bach o tag wahanol, ac felly mae angen i ddatrys y ddau agor a chau ei i gyd ar unwaith. Mae'r gystrawen am hynny yw hyn. Yn dechnegol, gallech wneud rhywbeth fel hyn mewn rhai fersiynau o HTML, ond mae hyn yn unig dwp am nad oes rheswm i ddechrau a rhoi'r gorau i rywbeth os gallwch chi yn hytrach na gwneud popeth ar unwaith. Sylweddoli nad oes HTML5 llym angen y slaes, felly byddwch yn gweld werslyfrau ac adnoddau ar-lein nad yw gennych, ond ar gyfer mesur da gadewch i ni ymarfer y cymesuredd yr ydym wedi ei weld hyd yma. Mae hyn yn golygu bod y tag yn ddau yn agor ac yn cau. Felly nawr gadewch i mi arbed fy ffeil, ewch yn ôl yma. Iawn, felly mae'n dechrau edrych yn well, ac eithrio y We wyf yn gwybod yn fath o clickable, ac eto nid youtube yma yn ymddangos i arwain at unrhyw beth. Mae hynny oherwydd hyd yn oed er ei fod yn edrych fel cyswllt, nid yw'r porwr yn gwybod bod fel y cyfryw, felly rhaid i mi ddweud wrth y porwr bod hwn yn ddolen. Y ffordd i wneud hyn yw defnyddio tag angor: a gadewch i mi symud hyn i linell newydd yn unig felly mae'n ychydig yn fwy darllenadwy, a byddaf yn crebachu maint y ffont. Ydw i'n gwneud eto? Rhif Mae mynd i fod yn y ddeuoliaeth. Mae hyn yn tag, y tag angor, yn wir yn cymryd priodoledd, sy'n addasu ei ymddygiad, a gwerth y priodoledd yn ôl pob golwg YouTube URL. Ond yn sylwi ar y ddeuoliaeth yw mai dim ond oherwydd dyna'r URL ydych yn mynd i, nid yw hynny'n golygu rhaid i hynny fod y gair eich bod yn tanlinellu a gwneud cyswllt. Yn hytrach, gall hynny fod rhywbeth fel hyn. Felly, rhaid i mi ddweud roi'r gorau i wneud y gair hyperddolen drwy ddefnyddio'r tag angor agos. Hysbysiad Dydw i ddim yn gwneud hyn. 1, byddai hyn dim ond yn wastraff o amser pawb ac nid yw'n angenrheidiol. I gau tag, dim ond sôn am enw'r tag eto. Nid ydych yn sôn am unrhyw un o'r rhinweddau. Felly, gadewch i ni ac eithrio, ewch yn ôl. Iawn, voila, nawr mae'n glas a hypergysylltu. Os byddaf yn cliciwch arno, yr wyf mewn gwirionedd yn mynd i'r YouTube. Felly hyd yn oed er nad fy tudalen ar y we ar y Rhyngrwyd, mae o leiaf HTML, ac os ydym yn gadael i'r Rhyngrwyd dal i fyny, byddem mewn gwirionedd yn y pen draw yma yn youtube.com. A allaf fynd yn ôl a dyma fy nhudalen we. Ond sylwi ar hyn. Os ydych chi erioed wedi gotten spam neu yn rhwyd-dwyll, nawr eich bod yn cael y gallu ar ôl dim ond 5 munud i wneud yr un peth. Gallwn fynd yma ac yn gwneud rhywbeth fel www.badguy.com neu beth bynnag y wefan bras yw, ac yna gallwch ddweud wirio eich cyfrif PayPal. [Chwerthin] Ac yn awr mae hyn yn mynd i fynd i badguy.com, ac nid wyf ddim yn mynd i glicio ar am fod gen i ddim syniad lle sy'n arwain. [Chwerthin] Ond bellach mae gennym y gallu i mewn gwirionedd yn y pen draw yno. Felly, rydym yn wir yn unig dechrau crafu wyneb. Nid ydym yn rhaglennu fel y cyfryw, rydym yn ysgrifennu markup iaith. Ond cyn gynted ag y rownd ein geirfa yn HTML, byddwn yn cyflwyno PHP, iaith raglennu gwirioneddol fydd yn ein galluogi i gynhyrchu HTML yn awtomatig, cynhyrchu CSS yn awtomatig, fel y gallwn ddechrau ar ddydd Mercher i weithredu, dyweder, ein peiriant chwilio hunain ac yn fwy. Ond mwy am hynny mewn cwpl o ddyddiau. Gwelwn ni chi bryd hynny. [CS50.TV]