[Powered by Google Translate] [Walkthrough - 6 Set Problem]
[Zamyla Chan - Harvard University]
[Mae hyn yn CS50. - CS50.TV]
>> Helo bawb, a chroeso i Walkthrough 6: Huff'n pwff.
Yn Huff'n pwff hyn yr ydym yn ei wneud yn mynd i fod yn delio gyda ffeil cywasgedig Huffman
ac yna puffing yn ôl i fyny, felly mae'n ddatgywasgu,
fel y gallwn gyfieithu o'r 0s a 1s bod y defnyddiwr yn anfon
ac addasu yn ôl yn y testun gwreiddiol.
Pset 6 yn mynd i fod yn 'n bert oera oherwydd eich bod yn mynd i weld rhai o'r offer
a ddefnyddiwyd gennych yn pset 4 a 5 a pset math o cyfuno i 1 cysyniad yn eithaf taclus
pan fyddwch yn dod i feddwl am y peth.
>> Hefyd, gellid dadlau, roedd pset 4 a 5 y psets mwyaf heriol a oedd gennym i gynnig.
Felly o hyn, rydym yn cael y pset 1 yn fwy yn y C,
ac yna ar ôl ein bod ar i raglenni ar y we.
Felly llongyfarch eich hunain i gael dros y twmpath anoddaf yn CS50.
>> Symud ymlaen i Huff'n pwff, mae ein pecyn cymorth ar gyfer y pset yn mynd i fod yn goed Huffman,
felly deall nid yn unig sut y coed gwaith deuaidd ond hefyd yn benodol coed Huffman,
sut y maent yn adeiladu.
Ac yna rydym yn mynd i gael llawer o god dosbarthu yn y pset,
a byddwn yn dod i weld bod mewn gwirionedd yn rhai o'r cod
Efallai na fyddwn yn gallu deall yn llawn eto,
ac felly bydd y rheini ar y. ffeiliau c, ond yna eu cyd-fynd. h ffeiliau
fydd yn rhoi i ni ddigon o ddealltwriaeth bod angen er mwyn bod yn gwybod sut y swyddogaethau hynny yn gweithio
neu o leiaf yr hyn y maent i fod i'w wneud - mae eu mewnbynnau ac allbynnau -
hyd yn oed os nad ydym yn gwybod beth sy'n digwydd yn y blwch du
neu nad ydynt yn deall beth sy'n digwydd yn y blwch du mewn.
Ac yna yn olaf, fel arfer, yr ydym yn delio â strwythurau data newydd,
mathau penodol o nodau sy'n cyfeirio at bethau penodol,
ac felly dyma cael pin a phapur, nid yn unig ar gyfer y broses ddylunio
a phan fyddwch yn ceisio at chyfrif i maes sut y dylai eich pset weithio
ond hefyd yn ystod debugging.
Gallwch gael GDB ochr yn ochr â'ch pen a phapur wrth i chi fynd i lawr yr hyn y mae'r gwerthoedd yn,
lle mae eich saethau yn pwyntio, a phethau fel 'na.
>> Yn gyntaf gadewch i ni edrych ar goed Huffman.
Coed Huffman yn goed deuaidd, sy'n golygu bod gan bob nod yn unig y mae 2 o blant.
Mewn coed Huffman y nodwedd yw bod y gwerthoedd mwyaf cyffredin
yn cael eu cynrychioli gan y darnau lleiaf.
Gwelsom enghreifftiau mewn darlith y côd Morse, pa fath o cyfunol rhai llythrennau.
Os ydych yn ceisio i gyfieithu A neu E, er enghraifft,
rydych chi'n cyfieithu yn aml, felly yn hytrach na gorfod defnyddio'r set lawn o ddarnau
ddyrannu ar gyfer y math hwnnw data arferol, byddwch yn cywasgu i lawr i lai,
ac yna y llythyrau hynny sy'n cael eu cynrychioli yn llai aml yn cael eu cynrychioli gyda darnau hirach
oherwydd gallwch fforddio bod pan fyddwch yn pwyso a mesur y amleddau bod y llythyrau yn ymddangos.
Mae gennym yr un syniad yma mewn coed Huffman
ble rydym yn gwneud cadwyn, math o lwybr i gyrraedd y cymeriadau penodol.
Ac yna y cymeriadau sydd â'r amledd y rhan fwyaf o
yn mynd i gael ei gynrychioli gyda'r darnau lleiaf.
>> Mae'r ffordd yr ydych yn adeiladu coeden Huffman
yw drwy osod yr holl gymeriadau sy'n ymddangos yn y testun
a chyfrifo eu hamlder, pa mor aml y maent yn ymddangos.
Gallai hyn naill ai fod yn gyfrif o faint o weithiau y llythyrau hynny yn ymddangos
neu efallai canran o blith yr holl gymeriadau faint o bob un yn ymddangos.
Ac felly yr hyn yr ydych ei wneud yw unwaith y byddwch wedi hynny i gyd allan mapio,
yna rydych yn chwilio am y 2 amleddau isaf ac yna ymuno â hwy fel brodyr a chwiorydd
lle yna mae'r nod rhiant amledd sef y swm ei 2 o blant.
Ac yna chi gan gonfensiwn dweud bod y nod chwith,
eich bod yn dilyn hynny drwy ddilyn y gangen 0,
ac yna y nod rightmost yw cangen 1.
Fel y gwelsom mewn côd Morse, roedd y Gotcha un sydd os ydych yn unig a gafodd Canu a'r Canu
roedd yn amwys.
Gallai fod yn naill ai 1 llythyr neu gallai fod yn ddilyniant o 2 lythyr.
Ac felly pa Huffman coed yn ei wneud yw oherwydd yn ôl natur y cymeriadau
neu ein cymeriadau go iawn terfynol yn y nodau olaf ar y gangen -
rydym yn cyfeirio at y rhai fel dail - yn rhinwedd na ellir cael unrhyw amwysedd
o ran pa lythyren ydych yn ceisio amgodio â chyfres o ddarnau
gan nad oes unman ar hyd y darnau sy'n cynrychioli 1 llythyr
byddwch yn dod ar draws llythyr arall cyfan, ac ni fydd yna unrhyw ddryswch yno.
Ond byddwn yn mynd i mewn i enghreifftiau y gallwch guys mewn gwirionedd yn gweld bod
hytrach na ni jyst dweud wrthych fod hynny'n wir.
>> Gadewch i ni edrych ar enghraifft syml o goeden Huffman.
Mae gen i llinyn yma yw 12 nod o hyd.
Mae gen i 4 Fel, 6 B, C a 2.
Byddai fy cam cyntaf fydd cyfrif.
Faint o weithiau y bydd A yn ymddangos? Mae'n ymddangos 4 gwaith yn y llinyn.
B yn ymddangos 6 gwaith, a C yn ymddangos 2 waith.
Yn naturiol, yr wyf i'n mynd i ddweud fy mod i'n defnyddio B gan amlaf,
felly yr wyf am i gynrychioli B gyda'r nifer lleiaf o ddarnau, y nifer lleiaf o 0au ac 1.
Ac yna Rwyf hefyd yn mynd i ddisgwyl C i'w gwneud yn ofynnol y swm mwyaf o 0s a 1s yn ogystal.
Yn gyntaf beth wnes i yma yn yr wyf yn eu gosod mewn trefn esgynnol o ran amlder.
Rydym yn gweld bod y C a'r A, dyna o'n 2 amleddau isaf.
Rydym yn creu nod rhiant, ac nad yw nod rhiant yn cael llythyr sy'n gysylltiedig ag ef,
ond mae ganddo amledd, sef y swm.
Mae'r swm yn 2 + 4, sydd 6.
Yna rydym yn dilyn y gangen chwith.
Pe baem ar y nod 6, yna byddem yn dilyn 0 i ddod i C
ac yna 1 i fynd i A.
Felly, nawr rydym yn cael 2 nodau.
Mae gennym y gwerth 6 ac yna rydym hefyd wedi arall nod gyda'r gwerth 6.
Ac felly y rhai 2 yn nid yn unig y 2 isaf ond hefyd dim ond y 2 sydd yn cael eu gadael,
felly byddwn yn ymuno rhai gan riant arall, gyda'r swm yn 12.
Felly dyma ni wedi ein Huffman coed
ble i fynd i B, byddai hynny yn unig fod y darn 1
ac yna i fynd i A byddai gennym 01 a wedyn C yn cael 00.
Felly, yma rydym yn gweld bod y bôn rydym yn cynrychioli'r chars gyda naill ai 1 neu 2 ddarnau
lle y B, fel y rhagwelwyd, y lleiaf.
Ac yna rydym wedi disgwyl C i gael y mwyaf, ond gan ei fod yn gymaint o goeden Huffman bach,
yna yr A yn cael ei gynrychioli hefyd gan 2 darnau yn hytrach na rywle yn y canol.
>> Dim ond i fynd dros enghraifft arall syml y goeden Huffman,
ddweud eich bod yn cael y llinyn "Helo."
Beth ydych yn ei wneud yn gyntaf y byddech yn dweud faint o weithiau y bydd H yn ymddangos yn hyn?
H ymddangos unwaith ac yna e yn ymddangos unwaith ac yna mae gennym l ymddangos ddwywaith
ac o ymddangos unwaith.
Ac felly, rydym yn disgwyl y llythyr i gael ei gynrychioli gan y nifer lleiaf o ddarnau?
[Myfyrwyr] l. >> L. Yeah. l yn iawn.
Rydym yn disgwyl l i gael ei gynrychioli gan y nifer lleiaf o ddarnau
oherwydd l yn cael ei ddefnyddio fwyaf yn y llinyn "Helo."
Yr hyn yr wyf i'n mynd i wneud yn awr yw tynnu allan y nodau.
Mae gen i 1, sef H, ac yna un arall 1, sy'n e, ac yna 1, sef o -
ar hyn o bryd rwy'n eu rhoi mewn trefn - ac yna 2, sydd yn l.
Yna mi ddweud y ffordd yr wyf yn adeiladu coeden Huffman yw dod o hyd y 2 nodau â'r amlderau lleiaf
a'u gwneud yn frodyr a chwiorydd drwy greu nod rhiant.
Yma, mae gennym 3 nodau gyda'r amlder isaf. Maen nhw i gyd 1.
Felly, yma rydym yn dewis pa un yr ydym yn mynd i gysylltu yn gyntaf.
Lets 'ddeud i'n dewis y H a e.
Mae swm o 1 + 1 yn 2, ond nid yw hyn nôd yn cael llythyr sy'n gysylltiedig ag ef.
'I jyst yn dal y gwerth.
Nawr rydym yn edrych ar y 2 nesaf amleddau isaf.
Dyna 2 a 1. Gallai hynny fod naill neu'r llall o'r 2, ond rwy'n mynd i ddewis yr un.
Mae'r swm yn 3.
Ac yna yn olaf, dim ond yn cael 2 chwith, fel yna mae hynny'n dod yn 5.
Yna dyma, yn ôl y disgwyl, os wyf yn llenwi'r amgodio ar gyfer hynny,
1s bob amser yn y gangen iawn ac 0s yw'r un sydd ar ôl.
Yna, mae gennym l cynrychioli gan ddim ond 1 ychydig ac yna y o gan 2
ac yna yr e gan 2 ac yna yn disgyn i lawr H i 3 ddarnau.
Felly gallwch drosglwyddo neges hon "Helo" yn hytrach na mewn gwirionedd yn defnyddio'r cymeriadau
gan ychydig 0s a 1s.
Fodd bynnag, cofiwch bod mewn sawl achos roedd gennym gysylltiadau gyda'n amlder.
Gallem fod wedi ymuno naill ai H a 1 o efallai.
Neu wedyn yn nes ymlaen pan gawsom y l a gynrychiolir gan 2
yn ogystal â'r ymuno ag un a gynrychiolir gan 2, gallem fod wedi cysylltu naill ai un.
>> Ac felly pan fyddwch yn anfon y 0s a 1s, nad yw mewn gwirionedd yn gwarantu
y gall y derbynnydd yn llawn yn darllen eich neges dde oddi ar y ystlumod
oherwydd efallai na fyddant yn gwybod pa benderfyniad a wnaed gennych.
Felly, pan fyddwn yn delio â Huffman cywasgu,
rhywsut mae'n rhaid i ni ddweud wrth y derbynnydd ein neges Sut y gwnaethom benderfynu -
Mae angen iddynt wybod rhyw fath o wybodaeth ychwanegol
yn ychwanegol at y neges cywasgedig.
Mae angen iddynt ddeall yr hyn y goeden mewn gwirionedd yn edrych fel,
sut yr ydym mewn gwirionedd yn gwneud y penderfyniadau hynny.
>> Dyma yr oeddem yn ei wneud enghreifftiau yn seiliedig ar y cyfrif ei hunan,
ond weithiau gallwch hefyd gael coeden Huffman
yn seiliedig ar pa mor aml y llythyrau yn ymddangos, ac mae'n yr un broses yn union.
Dyma dwi'n ei fynegi yn nhermau canrannau neu ffracsiwn,
ac felly dyma yr un peth yn union.
Rwy'n dod o hyd y 2 isaf, crynhoi nhw, y 2 isaf nesaf, crynhoi nhw,
hyd nes i mi gael coeden llawn.
Hyd yn oed er y gallai rydym yn ei wneud naill ffordd neu'r llall, pan fyddwn ni'n delio gyda chanrannau,
sy'n golygu ein bod yn rhannu pethau a delio â degolion neu yn hytrach arnofio
os ydym yn meddwl am strwythurau data pennaeth.
Beth ydyn ni'n ei wybod am arnofion?
Beth yw problem gyffredin pan fyddwn ni'n delio gyda fflotiau?
[Myfyrwyr] rhifyddeg amwys. >> Yeah. Anfanyldeb.
Oherwydd anfanyldeb pwynt arnawf, ar gyfer y pset fel ein bod yn gwneud yn siwr
nad ydym yn colli unrhyw werthoedd, yna rydym yn wir yn mynd i fod yn delio gyda'r cyfrif.
Felly, os ydych yn meddwl am nod Huffman, os edrychwch yn ôl at y strwythur yma,
os ydych yn edrych ar y rhai gwyrdd mae ganddo amledd sy'n gysylltiedig ag ef
yn ogystal gan ei fod yn cyfeirio at y nod at ei chwith yn ogystal â nod at ei dde.
Ac yna y rhai coch hefyd yn meddu ar gymeriad sy'n gysylltiedig â hwy.
Nid ydym yn mynd i wneud rhai ar wahân ar gyfer y rhieni ac yna y nodau terfynol,
yr ydym yn cyfeirio ato fel dail, ond yn hytrach bydd rhai dim ond yn cael gwerthoedd null.
Am bob nod bydd gennym cymeriad, y symbol bod y nod yn cynrychioli,
yna amledd yn ogystal â pwyntydd i'w plentyn chwith yn ogystal â'i blentyn i'r dde.
Byddai'r dail, sydd ar y gwaelod un, hefyd yn cael awgrymiadau nod
i'w chwith ac i'w hawl, ond gan nad yw'r gwerthoedd yn cael eu cyfeirio at nodau gwirioneddol,
beth fyddai eu gwerth fod? >> [Myfyrwyr] NULL. >> NULL. Yn union.
Dyma enghraifft o sut y gallech chi cynrychioli'r amlder yn arnofio,
ond rydym yn mynd i fod yn delio ag ef gyda chyfanrifau,
felly wnes i gyd yn newid y math data yno.
>> Gadewch i ni fynd ymlaen i ychydig yn fwy am enghraifft cymhleth.
Ond yn awr ein bod wedi gwneud y rhai syml, dim ond un broses.
Gallwch ddod o hyd y 2 amleddau isaf, crynhoi yr amleddau
a dyna pa mor aml newydd eich nod rhiant,
sydd wedyn yn tynnu sylw at ei chwith gyda changen 0 a hawl gyda changen 1.
Os oes gennym y llinyn "Mae hwn yn cs50," yna yr ydym yn cyfrif faint o weithiau yn cael ei grybwyll T,
h grybwyllwyd, i, s, c, 5, 0.
Yna beth wnes i yma yw gyda nodau coch Fi jyst plannu,
Dywedais fy mod i'n mynd i gael y cymeriadau yn y pen draw ar waelod fy nghoeden.
Mae'r rhai yn mynd i fod yr holl ddail.
Yna beth wnes i yw fy mod ddatrys iddynt gan amlder yn nhrefn esgynnol,
ac mae hyn mewn gwirionedd yn y ffordd y mae'r cod pset mae'n
a yw'n fath iddo gan amlder ac yna yn nhrefn yr wyddor.
Felly, mae wedi y niferoedd yn gyntaf ac yna yn nhrefn yr wyddor gan amlder.
Yna beth fyddwn i'n ei wneud yw byddwn yn dod o hyd i'r isaf 2. Dyna 0 a 5.
Byddwn yn disgrifio'r nhw, a dyna 2. Yna byddwn yn parhau, dod o hyd i'r nesaf 2 isaf.
Dyna'r 1s dau, ac yna dod yn rhai 2 yn ogystal.
Nawr rwy'n gwybod bod fy cam nesaf yn mynd i fod yn ymuno â'r nifer isaf,
sef y T, 1, ac yna dewis un o'r nodau sydd wedi 2 fel pa mor aml.
Felly yma mae gennym 3 opsiwn.
Yr hyn yr wyf i'n mynd i wneud am y sleid yn unig weledol ail-drefnu ar eich cyfer
fel y gallwch weld sut rwy'n adeiladu i fyny.
Beth fyddai'r cod a'ch cod dosbarthu yn mynd i wneud yn cael ei ymuno yr un T
gyda'r nod 0 a 5.
Felly, yna y symiau i 3, ac yna rydym yn parhau â'r broses.
Mae'r 2 a 2 yn awr yn yr isaf, felly, yna rhai sy'n swm i 4.
Mae pawb yn dilyn hyd yn hyn? Iawn.
Yna, ar ôl bod gennym y 3 a'r 3 y mae angen eu hadio at ei gilydd,
hynny eto Im 'jyst yn newid' i fel y gallwch weld ei olwg fel nad yw'n mynd yn rhy anniben.
Yna, mae gennym 6, ac yna mae ein cam olaf yw yn awr ein bod dim ond 2 nodau
rydym yn crynhoi rhai i wneud y wraidd ein coeden, sef 10.
Ac mae'r rhif 10 yn gwneud synnwyr oherwydd bod gan bob nod cynrychioli,
eu gwerth, eu rhif amlder, roedd faint o weithiau y maent yn ymddangos yn y llinyn,
ac yna mae gennym 5 nod yn ein llinyn, er mwyn gwneud synnwyr.
Os byddwn yn edrych i fyny ar sut y byddem yn ei amgodio mewn gwirionedd,
yn ôl y disgwyl, mae'r ia s, sy'n ymddangos y mwyaf yn aml
yn cael eu cynrychioli gan y nifer lleiaf o ddarnau.
>> Byddwch yn ofalus yma.
Mewn coed Huffman yr achos wirioneddol bwysig.
Mae S priflythyren yn wahanol na s llythrennau bach.
Pe bai gennym "Mae hwn yn CS50" gyda phriflythrennau, yna byddai'r s llythrennau bach yn unig yn ymddangos ddwywaith,
byddai'n nod gyda 2 fel ei werth, ac yna byddai priflythyren S dim ond unwaith.
Felly, yna byddai eich coeden yn newid strwythurau oherwydd eich bod mewn gwirionedd yn cael ddeilen ychwanegol yma.
Ond byddai'r swm yn dal i fod yn 10.
Dyna beth rydym yn wir yn mynd i gael ei galw y prawfswm,
ychwanegu pob un o'r cyfrif.
>> Nawr ein bod wedi cynnwys coed Huffman, gallwn plymio i mewn i Huff'n pwff, y pset.
Rydym yn mynd i ddechrau ag adran o gwestiynau,
ac mae hyn yn mynd i fynd â chi yn gyfarwydd â choed deuaidd a sut i weithredu o gwmpas y canlynol:
nodau lluniadu, creu eich strwythur eich hun typedef ar gyfer nod,
a gweld sut y byddwch yn mewnosod i mewn i goeden ddeuaidd, un sydd wedi'i didoli,
tramwyo, a phethau fel 'na.
Bod gwybodaeth yn bendant yn mynd i helpu chi pan fyddwch yn deifio i'r rhan pwff Huff'n
y pset.
Yn y rhifyn safon y pset, eich tasg yw i weithredu pwff,
ac yn y fersiwn haciwr eich tasg yw i weithredu Huff.
Beth Huff wneud yw testun y mae'n ei gymryd ac yna mae'n trosi i mewn i'r 0s a 1s,
felly mae'r broses a wnaethom uchod lle rydym yn cyfrif y amleddau
ac yna gwneud y goeden ac yna dywedodd, "Sut ydw i'n cael T?"
T ei chynrychioli gan 100, pethau fel 'na,
ac yna byddai Huff cymryd y testun ac yna allbwn sy'n deuaidd.
Ond hefyd oherwydd gwyddom ein bod yn awyddus i ganiatáu i'n sawl sy'n derbyn y neges
i ail-greu yr un goeden union, mae hefyd yn cynnwys gwybodaeth am y cyfrifon amlder.
Yna, gyda pwff rydym yn cael ffeil ddeuaidd o 0au ac 1
a hefyd yn cael y wybodaeth am y amleddau.
Rydym yn cyfieithu pob un o'r rheiny yn ôl 0au ac 1 yn y neges wreiddiol a oedd,
felly rydym ni'n ddatgywasgu hynny.
Os ydych chi'n gwneud y rhifyn safonol, nid oes angen i weithredu Huff,
felly, yna gallwch ddefnyddio'r gweithrediad staff y Huff.
Mae cyfarwyddiadau yn y fanyleb ar sut i wneud hynny.
Gallwch redeg gweithredu staff Huff ar ffeil testun penodol
ac yna ddefnyddio'r cynnyrch fel eich mewnbwn i pwff.
>> Fel y soniais o'r blaen, mae gennym lawer o god dosbarthu ar gyfer yr un yma.
Rydw i'n mynd i ddechrau mynd drwyddo.
Rydw i'n mynd i dreulio'r rhan fwyaf o'r amser ar yr. Ffeiliau h
oherwydd yn y. ffeiliau c, gan fod gennym y h.
a bod yn rhoi i ni y prototeipiau o swyddogaethau,
Nid ydym yn llwyr angen i ni ddeall yn union -
Os nad ydych yn deall beth sy'n mynd ymlaen yn y. Ffeiliau c, yna peidiwch â phoeni gormod,
ond yn bendant yn ceisio cymryd golwg oherwydd gallai roi rhywfaint o awgrymiadau
ac mae'n ddefnyddiol i ddod i arfer â ddarllen cod pobl eraill.
>> Gan edrych ar huffile.h, yn y sylwadau y mae'n datgan haen o echdynnu ar gyfer Huffman-codio ffeiliau.
Os ydym yn mynd i lawr, gwelwn fod yna uchafswm o 256 o symbolau y gallai fod angen codau ar gyfer.
Mae hyn yn cynnwys yr holl lythrennau'r wyddor - priflythyren a llythrennau bach -
ac yna symbolau a rhifau, ac ati
Yna dyma gennym nifer hud adnabod ffeil Huffman-godio.
O fewn cod Huffman maen nhw'n mynd i gael nifer penodol hud
gysylltiedig â'r pennawd.
Gallai hyn edrych fel dim ond rhif hud ar hap,
ond os ydych mewn gwirionedd yn ei gyfieithu i'r ASCII, yna mewn gwirionedd mae'n nodi'n huff.
Yma mae gennym strwythur ar gyfer ffeil Huffman-encoded.
Mae pob un o'r nodweddion hyn yn gysylltiedig â ffeil Huff.
Yna i lawr yma mae gennym y pennawd am ffeil Huff, felly rydym yn galw ei Huffeader
yn hytrach na ychwanegu'r h ychwanegol oherwydd ei fod yn swnio yr un fath beth bynnag.
'N giwt.
Mae gennym nifer hud sy'n gysylltiedig ag ef.
Os yw'n ffeil Huff go iawn, mae'n mynd i fod y rhif i fyny uchod, mae hyn yn un hudol.
Ac yna bydd yn cael amrywiaeth.
Felly, ar gyfer pob symbol, ac y mae 256,
mae'n mynd i restru'r hyn y gallai amlder y symbolau o fewn y ffeil Huff.
Ac yna yn olaf, mae gennym checksum gyfer yr amleddau,
a ddylai fod yn y swm o hynny amleddau.
Felly, dyna beth mae Huffeader yn.
Yna, mae gennym rai swyddogaethau sy'n dychwelyd y darn nesaf yn y ffeil Huff
yn ogystal ag ysgrifennu ychydig at y ffeil Huff, ac yna roedd y swyddogaeth yma, hfclose,
sydd mewn gwirionedd yn cau y ffeil Huff.
Cyn hynny, roeddem yn delio â syth yn unig mmap,
ond pan fydd gennych ffeil Huff, yn hytrach na fclosing ei
yr hyn rydych chi mewn gwirionedd yn mynd i wneud yw hfclose a hfopen hynny.
Mae'r rhain yn swyddogaethau penodol i'r ffeiliau Huff ein bod yn mynd i fod yn delio â hwy.
Yna dyma rydym yn darllen yn y pennawd ac yna ysgrifennu y pennawd.
>> Dim ond drwy ddarllen y. Ffeil h gallwn fath o gael synnwyr o'r hyn y gallai fod yn ffeil Huff,
pa nodweddion sydd ganddo, heb mewn gwirionedd yn mynd i mewn i'r huffile.c,
a fydd, os ydym yn plymio i mewn, yn mynd i fod ychydig yn fwy cymhleth.
Mae wedi holl o'r ffeil I / O yma ymdrin â awgrymiadau.
Yma rydym yn gweld bod pan fyddwn yn galw hfread, er enghraifft, mae'n dal i ddelio â'r fread.
Nid ydym yn cael gwared o'r swyddogaethau hynny yn gyfan gwbl, ond rydym yn anfon y rhai sydd i'w cymryd gofal
y tu mewn i'r ffeil Huff yn hytrach na gwneud yr holl waith ein hunain.
Gallwch deimlo'n rhydd i sganio drwy hyn os ydych yn chwilfrydig
ac yn mynd a phlicio yr haen yn ôl ychydig bach.
>> Mae'r ffeil nesaf ein bod ni'n mynd i edrych arno yw tree.h.
O'r blaen yn y Walkthrough sleidiau rydym yn dweud ein bod yn disgwyl nod Huffman
ac rydym wedi gwneud nod strwythur typedef.
Rydym yn disgwyl iddo gael symbol, amledd, ac yna 2 sêr nod.
Yn yr achos hwn yr hyn rydym yn ei wneud yn hyn yn ei hanfod yr un fath
ac eithrio yn hytrach na nod rydym yn mynd i alw eu coed.
Mae gennym swyddogaeth pan fyddwch yn ffonio wneud goeden yn dychwelyd i chi bwyntydd coeden.
Back i Speller, pan fyddwch yn gwneud nod newydd
i chi ddweud nod * gair newydd = malloc (sizeof) a phethau fel 'na.
Yn y bôn, mktree yn mynd i fod yn delio â hynny i chi.
Yn yr un modd, pan fyddwch am i dynnu coeden,
fel bod ei hanfod yn rhyddhau y goeden pan fyddwch chi'n ei wneud ag ef,
yn hytrach na galw yn benodol am ddim ar hynny, rydych chi mewn gwirionedd ond yn mynd i ddefnyddio'r swyddogaeth rmtree
lle byddwch yn mynd heibio yn y pwyntydd i'r goeden ac yna bydd dir.c yn gofalu am hynny i chi.
>> Rydym yn edrych i mewn i tree.c.
Rydym yn disgwyl i'r un swyddogaethau ac eithrio i weld gweithredu yn ogystal.
Fel yr oeddem yn disgwyl, pan fyddwch yn ffonio mktree mae'n mallocs faint o goeden i mewn i pwyntydd,
initializes yr holl werthoedd i'r gwerth NULL, felly 0au neu NULLs,
ac yna dychwelyd y pwyntydd i'r goeden eich bod wedi malloc'd yn unig i chi.
Yma pan fyddwch yn ffonio gwared goeden yn gyntaf yn gwneud yn siwr nad ydych chi'n dwbl rhyddhau.
Mae'n gwneud yn siŵr eich bod mewn gwirionedd yn cael coeden eich bod am ddileu'r.
Yma oherwydd coeden hefyd yn cynnwys ei phlant,
beth yw hyn yn ei recursively galw gwared coeden ar y nôd chwith y goeden
yn ogystal â'r nod cywir.
Cyn rhyddhau'r rhiant, mae angen i ryddhau plant yn ogystal.
Rhieni hefyd yn ymgyfnewidiol gyda gwreiddiau.
Y rhiant cyntaf erioed, felly fel y gor-or-or-or-daid
neu goeden nain, yn gyntaf mae'n rhaid i ni ryddhau i lawr y lefelau cyntaf.
Felly croesi i'r gwaelod, rhad ac am ddim rheini, ac yna dod yn ôl i fyny, rhad ac am ddim rheini, ac ati
Felly dyna goeden.
>> Nawr rydym yn edrych ar goedwig.
Coedwig yw pan fyddwch yn rhoi eich holl goed Huffman.
Mae'n dweud ein bod ni'n mynd i gael rhywbeth a elwir yn llain
sy'n cynnwys pwyntydd i goeden yn ogystal â pwyntydd i blot o'r enw nesaf.
Pa strwythur y mae hyn yn fath o edrych fel?
Mae'n fath o yn dweud ei fod dros yno.
Hawl dros yma.
Mae rhestr cysylltiedig.
Rydym yn gweld bod pan fydd gennym plot mae fel rhestr gysylltiedig o leiniau.
Mae coedwig yn cael ei ddiffinio fel rhestr gysylltiedig o leiniau,
ac felly mae'r strwythur goedwig yw ein bod yn jyst yn mynd i gael pwyntydd at ein plot 1
a bod plot mae coeden o'i mewn neu yn hytrach yn cyfeirio at goeden
ac yna cyfeirio at y plot nesaf, yn y blaen ac yn y blaen.
I wneud coedwig rydym yn galw mkforest.
Yna, mae gennym rai swyddogaethau eithaf defnyddiol yma.
Rydym wedi dewis lle byddwch yn mynd heibio mewn coedwig, ac yna dychwelyd y gwerth yn * Coed,
pwyntydd i goeden.
Beth fydd dewis ei wneud yw y bydd yn mynd i mewn i'r goedwig eich bod yn cyfeirio at
yna tynnwch coeden gydag amlder isaf o'r goedwig
ac yna rhoi i chi y pwyntydd i'r goeden.
Unwaith y byddwch yn ffonio ddewis, ni fydd y goeden yn bodoli yn y goedwig anymore,
ond mae gwerth dychwelyd yn y pwyntydd i'r goeden.
Yna byddwch wedi planhigyn.
Ar yr amod eich bod yn llwyddo mewn pwyntydd i goeden sydd â amlder nad yw'n-0,
beth fydd planhigion yn ei wneud yw y bydd yn ei gymryd i'r goedwig, yn cymryd y goeden, a phlanhigion y tu mewn coed o'r goedwig.
Yma, mae gennym rmforest.
Yn debyg i dynnu coeden, sydd yn y bôn rhyddhau ein holl goed i ni,
gwared goedwig yn popeth am ddim a geir yn y goedwig.
>> Os byddwn yn edrych i mewn i forest.c, byddwn yn disgwyl gweld o leiaf 1 gorchymyn rmtree i mewn 'na,
oherwydd i gof am ddim yn y goedwig os coedwig o goed ynddo,
yn y pen draw ydych chi'n mynd i gael i symud y coed hefyd.
Os byddwn yn edrych i mewn forest.c, rydym wedi ein mkforest, sydd fel yr ydym yn ei ddisgwyl.
Rydym yn malloc pethau.
Rydym yn ymgychwyn y plot cyntaf yn y goedwig fel NULL oherwydd ei fod yn wag i ddechrau,
yna rydym yn gweld ddewis, sy'n peri i'r goeden gyda'r pwysau isaf, pa mor aml isaf,
ac yna yn cael gwared ar y nod benodol sy'n pwyntio at y goeden a'r un nesaf,
felly mae'n cymryd bod allan o'r rhestr gysylltiedig y goedwig.
Ac yna dyma ni wedi planhigyn, sy'n mewnosod goeden i mewn i'r rhestr cysylltiedig.
Pa goedwig yn ei wneud yw ei 'n glws yn cadw ei datrys i ni.
Ac yna yn olaf, mae gennym rmforest ac, yn ôl y disgwyl, mae gennym rmtree enw yno.
>> O edrych ar y cod dosbarthu hyd yn hyn, huffile.c yn ôl pob tebyg o bell ffordd anoddaf i'w ddeall,
tra bod y ffeiliau eraill eu hunain yn eithaf syml i'w dilyn.
Gyda ein gwybodaeth am awgrymiadau a rhestrau cysylltiedig ac o'r fath,
roeddem yn gallu dilyn yn eithaf da.
Ond yr holl mae angen i ni wir wneud yn siŵr ein bod yn llwyr ddeall yw'r. H ffeiliau
oherwydd mae angen i chi gael eu galw swyddogaethau hynny, delio â'r rhai gwerthoedd dychwelyd,
felly gwnewch yn siŵr eich bod yn deall pa gamau fydd yn cael ei berfformio
pryd bynnag fyddwch yn ffonio un o'r swyddogaethau hynny.
Ond mewn gwirionedd yn deall y tu mewn ohono yn eithaf angenrheidiol oherwydd hynny gennym. Ffeiliau h.
Mae gennym 2 yn fwy ffeiliau ar ôl yn ein cod dosbarthu.
>> Gadewch i ni edrych ar domen.
Tomen gan ei sylwadau yma yn cymryd ffeil Huffman-cywasgedig
ac yna yn cyfieithu a gollwng ei holl gynnwys y tu allan.
Yma rydym yn gweld ei fod yn galw hfopen.
Mae hyn yn fath o drychu i ffeilio * mewnbwn = fopen,
ac yna byddwch yn mynd heibio yn y wybodaeth.
Mae bron yn unfath ar wahân yn hytrach na * ffeil rydych chi'n pasio mewn Huffile;
yn hytrach na fopen ydych yn pasio yn hfopen.
Yma, rydym yn darllen yn y pennawd cyntaf, sy'n fath o debyg i sut yr ydym yn darllen yn y pennawd
am ffeil bitmap.
Yr hyn yr ydym ni'n ei wneud yma yn gwirio i weld a yw'r wybodaeth pennawd
cynnwys y nifer hud iawn sy'n dangos ei fod yn ffeil Huff go iawn,
yna pob un o'r gwiriadau i wneud yn siŵr bod y ffeil yr ydym yn agored hon ar ffurf ffeil huffed gwirioneddol neu beidio.
Beth yw hyn yn ei allbynnau amlder yr holl symbolau y gallwn weld
mewn terfynfa i mewn i dabl graffigol.
Mae'r rhan hon yn mynd i fod yn ddefnyddiol.
Mae ganddo ychydig ac yn darllen fesul tipyn yn y bit amrywiol ac yna yn argraffu allan.
Felly, pe bawn yn galw daflu i lawr ar hth.bin, sef y canlyniad chwythu ffeil
ddefnyddio'r datrysiad staff, byddwn yn cael hyn.
Mae'n outputting yr holl nodau hyn ac yna rhoi pa mor aml y maent yn ymddangos.
Os ydym yn edrych, mae'r rhan fwyaf ohonynt yn 0au ac eithrio ar gyfer hyn: H, sy'n ymddangos ddwywaith,
ac yna T, sy'n ymddangos unwaith.
Ac yna dyma gennym y neges gwirioneddol mewn 0s a 1s.
Os ydym yn edrych ar hth.txt, sydd yn ôl pob tebyg y neges gwreiddiol a huffed,
rydym yn disgwyl gweld rhai HS a Ts i mewn 'na.
Yn benodol, rydym yn disgwyl gweld dim ond 1 T a 2 HS.
Dyma ni yn hth.txt. Mae yn wir wedi HTH.
Yn gynwysedig yn yno, er na allwn ei weld, yn gymeriad Newline.
Mae'r hth.bin ffeil Huff hefyd yn amgodio cymeriad Newline yn ogystal.
Yma oherwydd ein bod yn gwybod bod y gorchymyn yn HTH ac yna Newline,
gallwn weld bod fwy na thebyg H yn cael ei gynrychioli gan ychydig o 1 sengl
ac yna y T yn ôl pob tebyg 01 a yna'r H nesaf yw 1 yn ogystal
ac yna mae gennym Newline nodwyd gan ddau 0au.
Cool.
>> Ac yna yn olaf, oherwydd ein bod yn delio â lluosog. C a. Ffeiliau h,
rydym yn mynd i gael dadl gymhleth eithaf i'r compiler,
ac felly dyma gennym Makefile sy'n gwneud tomen i chi.
Ond mewn gwirionedd, mae'n rhaid i chi fynd ati i wneud eich ffeil eich hun puff.c.
Mae'r Makefile mewn gwirionedd yn ymdrin â gwneud puff.c i chi.
Rydym yn gadael y fyny i chi i olygu'r Makefile.
Pan fyddwch yn mynd i mewn i gorchymyn fel gwneud gwbl, er enghraifft, bydd yn gwneud pob un ohonynt i chi.
Teimlwch yn rhydd i edrych ar yr enghreifftiau o Makefile o'r pset gorffennol
yn ogystal â mynd oddi ar hwn i weld sut y gallech chi fod yn gallu gwneud eich ffeil pwff
drwy olygu y Makefile.
Dyna am y peth am ein cod dosbarthu.
>> Unwaith y byddwn wedi gotten drwy hynny, yna dyma dim ond atgof arall
o sut yr ydym yn mynd i fod yn delio â'r nodau Huffman.
Nid ydym yn mynd i gael ei galw yn eu nodau anymore, rydym yn mynd i gael eu galw nhw coed
lle'r ydym yn mynd i fod yn cynrychioli eu symbol gyda golosg,
eu hamlder, y nifer o ddigwyddiadau, gyda cyfanrif.
Rydym yn ei ddefnyddio oherwydd ei fod yn fwy manwl gywir na arnofio.
Ac yna rydym wedi arall pwyntydd i'r plentyn chwith yn ogystal ag i'r plentyn iawn.
Mae coedwig, fel y gwelsom, yn unig yw rhestr gysylltiedig o goed.
Yn y pen draw, pan fyddwn yn adeiladu i fyny ein Huff ffeil,
rydym am i'n goedwig i gynnwys dim ond 1 goeden -
1 goeden, 1 wreiddyn â phlant lluosog.
Yn gynharach pan oeddem yn unig yn gwneud ein coed Huffman,
gennym ar y cychwyn trwy osod pob un o'r nodau ar ein sgrin
a dweud rydym yn mynd i gael y nodau,
yn y pen draw maen nhw'n mynd i fod yn y dail, ac mae hyn yn eu symbol, mae hyn yn eu hamlder.
Yn ein coedwig os ydym yn unig wedi 3 llythyr, sy'n goedwig o 3 coeden.
Ac yna wrth i ni fynd ymlaen, pan fyddwn yn ychwanegu y rhiant cyntaf,
gwnaethom coedwig o 2 goeden.
Rydym yn dileu 2 o'r plant hynny o'n goedwig ac yna yn ei le yn nod rhiant
oedd y 2 nodau fel plant.
Ac yna yn olaf, ein cam diwethaf gyda gwneud ein enghraifft gyda'r Fel, B, ac C
fyddai gwneud y rhiant terfynol,
ac felly yna byddai hynny'n dod â ein cyfrif gyfanswm y coed yn y goedwig i 1.
Ydy pawb yn gweld sut y byddwch yn dechrau allan gyda choed lluosog yn eich coedwig
a darfod i fyny ag 1? Iawn. Cool.
>> Beth sydd angen i ni ei wneud ar gyfer pwff?
Beth sydd angen i chi ei wneud yw sicrhau, fel bob amser, maent yn rhoi i ni y math cywir o fewnbwn
fel y gallwn mewn gwirionedd yn rhedeg y rhaglen.
Yn yr achos hwn maen nhw'n mynd i gael ei rhoi i ni ar ôl eu cyntaf gorchymyn-lein ddadl
2 yn fwy: y ffeil yr ydym am ei datgywasgu'r ac allbwn y ffeil dad-gywasgu.
Ond unwaith i ni wneud yn siŵr eu bod yn pasio heibio i ni yn y swm cywir o werthoedd,
ydym am sicrhau bod y mewnbwn yn ffeil Huff neu beidio.
Ac yna unwaith rydym yn gwarantu ei fod yn ffeil Huff, yna rydym eisiau adeiladu ein coeden,
adeiladu y goeden fel ei fod yn cyfateb i'r goeden fod y person a anfonodd y neges hadeiladu.
Yna, ar ôl i ni yn adeiladu y goeden, yna gallwn ddelio â'r, 0s a 1s eu bod wedi pasio mewn
dilyn y rhai ar hyd ein coeden am ei fod yn union yr un fath,
ac yna ysgrifennwch y neges honno allan, dehongli y darnau yn ôl i chars.
Ac yna ar y diwedd oherwydd ein bod yn delio â awgrymiadau yma,
rydym am wneud yn siŵr nad oes gennym unrhyw ollyngiadau cof
a'n bod yn popeth am ddim.
>> Sicrhau defnydd priodol yn hen het i ni erbyn hyn.
Rydym yn cymryd mewn mewnbwn, sydd yn mynd i fod yn enw'r ffeil i'w pwff,
ac yna rydym yn pennu allbwn,
felly enw'r ffeil ar gyfer yr allbwn ymchwyddo, a fydd yn y ffeil testun.
Dyna defnydd. Ac yn awr rydym yn awyddus i sicrhau bod y mewnbwn yn huffed neu beidio.
Gan feddwl yn ôl, a oedd unrhyw beth yn y cod dosbarthu a allai ein helpu i
gyda dealltwriaeth a yw ffeil yn cael ei huffed ai peidio?
Roedd gwybodaeth yn huffile.c am y Huffeader.
Rydym yn gwybod bod pob ffeil Huff Mae Huffeader sy'n gysylltiedig ag ef gyda nifer hud
yn ogystal ag amrywiaeth o amleddau ar gyfer pob symbol
yn ogystal â checksum.
Rydym yn gwybod hynny, ond rydym hefyd yn cymryd cipolwg ar dump.c,
yr oedd yn darllen i mewn i ffeil Huff.
Ac felly i wneud hynny, bu'n rhaid iddo sicrhau ei fod mewn gwirionedd oedd huffed neu beidio.
Felly, efallai y gallem ddefnyddio dump.c fel strwythur ar gyfer ein puff.c.
Yn ôl i pset 4 pan gawsom y copy.c ffeil gopïo yn treblu'r RGB
ac rydym yn dehongli ar gyfer Whodunit a Newid maint,
yn yr un modd, yr hyn y gallech ei wneud yn cael ei redeg dim ond y gorchymyn fel cp dump.c puff.c
ac yn defnyddio rhai o'r cod yno.
Fodd bynnag, nid yw'n mynd i fod mor syml o broses
ar gyfer cyfieithu eich dump.c i mewn i puff.c,
ond o leiaf mae'n rhoi rhywle i chi ddechrau
ar sut i sicrhau bod y mewnbwn yn huffed mewn gwirionedd neu beidio
yn ogystal ag ychydig o bethau eraill.
Rydym wedi sicrhau defnydd priodol a sicrhau bod y mewnbwn yn cael ei huffed.
Bob tro yr ydym wedi gwneud ein bod wedi gwneud ein gwirio gwall priodol,
felly dychwelyd a rhoi'r gorau iddi swyddogaeth os oes rhai methiant yn digwydd, os oes problem.
>> Nawr beth rydym am ei wneud yw adeiladu y goeden ei hun.
Os ydym yn edrych yn Forest, mae 2 prif swyddogaethau
ein bod ni'n mynd i eisiau i ddod yn gyfarwydd iawn ag ef.
Mae swyddogaeth y planhigyn Boole bod yn plannu coeden amlder nad yw'n-0 y tu mewn i'n goedwig.
Ac felly dyna chi basio mewn pwyntydd i goedwig a pwyntydd i goeden.
Cwestiwn cyflym: Faint o goedwigoedd sydd gennych pan fyddwch yn adeiladu coeden Huffman?
Mae ein goedwig fel ein gynfas, dde?
Felly, rydym yn unig yn mynd i gael 1 goedwig, ond rydym yn mynd i gael coed lluosog.
Felly, cyn i chi ffonio planhigion, rydych yn ôl pob tebyg yn mynd i eisiau i wneud eich goedwig.
Mae gorchymyn ar gyfer os ydych yn edrych i mewn i forest.h ar sut y gallwch wneud goedwig.
Gallwch blannu coeden. Rydym yn gwybod sut i wneud hynny.
Ac yna gallwch hefyd ddewis coeden o'r goedwig,
tynnu coed gyda'r pwysau isaf ac yn rhoi i chi y pwyntydd i hynny.
Wrth feddwl yn ôl i'r adeg pan oeddem yn gwneud yr enghreifftiau ein hunain,
pan oeddem yn tynnu allan, rydym dim ond dim ond ychwanegodd y cysylltiadau.
Ond yma yn hytrach na dim ond ychwanegu cysylltiadau,
feddwl am y peth yn fwy fel eich bod yn cael gwared 2 o'r rheiny nodau ac yna yn ei le gan un arall.
I fynegi hynny o ran casglu a phlannu,
eich bod yn casglu 2 goeden ac yna plannu coeden arall
sydd yn cael y rheini'n 2 goeden eich bod wedi cyfeirio fel plant.
Er mwyn adeiladu Huffman yn goeden, gallwch ddarllen yn y symbolau ac amleddau er mwyn
oherwydd bod y Huffeader yn rhoi hynny i chi,
yn rhoi i chi amrywiaeth o amleddau.
Felly, gallwch fynd yn ei flaen a dim ond anwybyddu unrhyw beth gyda'r 0 wedi'i ynddo
oherwydd nid ydym am 256 dail ar y diwedd.
Rydym yn unig am y nifer o dail sy'n cymeriadau
sy'n cael eu defnyddio mewn gwirionedd yn y ffeil.
Gallwch ddarllen yn y symbolau, a phob un o'r rhai symbolau sy'n cael nad ydynt yn-0 amlderau,
y rhai yn mynd i fod yn goed.
Beth allwch chi ei wneud yw bob tro y byddwch yn darllen mewn amlder nad yw'n symbol-0,
gallwch blannu y goeden yn y goedwig.
Unwaith y byddwch yn plannu coed yn y goedwig, gallwch ymuno â rhai coed fel brodyr a chwiorydd,
felly yn mynd yn ôl i blannu a dewis lle rydych yn dewis 2 ac yna planhigion 1,
lle bod 1 eich bod yn blanhigyn yw rhiant y 2 o blant eich bod wedi cyfeirio.
Felly, yna bydd eich canlyniad terfynol yn mynd i fod yn un goeden yn eich goedwig.
Dyna sut yr ydych yn adeiladu eich coeden.
>> Mae nifer o bethau a allai fynd o'i le yma
oherwydd ein bod yn delio â gwneud coed newydd a delio â awgrymiadau a phethau fel 'na.
Cyn pan oeddem yn delio â awgrymiadau,
pryd bynnag y byddwn malloc'd roeddem am wneud yn siŵr nad oedd yn dychwelyd i ni gwerth pwyntydd NULL.
Felly, ar nifer o gamau o fewn y broses mae yn mynd i fod sawl achos
lle y gallai eich rhaglen yn methu.
Beth ydych eisiau ei wneud yw eich bod am wneud yn siŵr eich bod yn trin y camgymeriadau hynny,
ac yn y fanyleb yn dweud eu trin yn osgeiddig,
felly hoffwn argraffu neges i'r defnyddiwr ddweud wrthynt pam y rhaglen i roi'r gorau iddi
ac yna rhoi'r gorau iddi yn brydlon hynny.
Er mwyn gwneud hyn trin gwall, cofiwch eich bod am wirio
bob tro y gallai fod yn fethiant.
Bob tro sengl yr ydych chi'n gwneud pwyntydd newydd
chi eisiau gwneud yn siŵr bod hynny'n llwyddiannus.
Cyn hyn yr arferem ei wneud yw gwneud pwyntydd newydd a malloc hynny,
ac yna byddem yn gwirio a yw'r pwyntydd yn null.
Felly, mae mynd i fod rhai achosion lle dim ond gallwch wneud hynny,
ond weithiau rydych chi mewn gwirionedd yn galw swyddogaeth
ac o fewn y swyddogaeth honno, dyna yr un sydd wedi gwneud y mallocing.
Yn yr achos hwnnw, os ydym yn edrych yn ôl at rai o'r swyddogaethau o fewn y cod,
rhai ohonynt yn swyddogaethau Boolean.
Yn yr achos haniaethol os oes gennym swyddogaeth Boolean o'r enw foo,
yn y bôn, gallwn dybio, yn ychwanegol i wneud beth bynnag foo yn ei wneud,
gan ei fod yn swyddogaeth Boole, mae'n dychwelyd wir neu ffug -
wir os yw'n llwyddiannus, ffug os nad ydyw.
Felly, rydym am i weld a yw'r gwerth dychwelyd foo yn wir neu'n anwir.
Os yw'n anwir, mae hynny'n golygu ein bod ni'n mynd i eisiau argraffu rhyw fath o neges
ac yna gadael y rhaglen.
Yr hyn yr ydym eisiau ei wneud yw gwirio gwerth dychwelyd foo.
Os foo yn dychwelyd ffug, yna rydym yn gwybod ein bod yn dod ar draws rhyw fath o wall
ac mae angen i ni roi'r gorau ein rhaglen.
Un ffordd o wneud hyn yw os oes gennych gyflwr lle mae'r swyddogaeth ei hun yw eich cyflwr.
Dweud foo yn cymryd yn x.
Gallwn gael fel amod os (foo (x)).
Yn y bôn, mae hynny'n golygu os, ar ddiwedd weithredu foo mae'n dychwelyd wir,
yna gallwn wneud hyn gan fod y swyddogaeth wedi i werthuso foo
er mwyn gwerthuso cyflwr cyfan.
Felly, yna dyna sut y gallwch wneud rhywbeth os yw'r swyddogaeth yn dychwelyd yn wir ac yn llwyddiannus.
Ond pan fyddwch yn gwirio gwallau, dim ond am roi'r gorau iddi os yw eich swyddogaeth yn dychwelyd ffug.
Beth allech chi ei wneud yw unig ychwanegu == ffug neu ddim ond ychwanegu bang o'i flaen
ac yna mae gennych os (! foo).
O fewn y corff hwnnw amod hwnnw byddai gennych yr holl trin gwall,
felly fel, "Methu creu y goeden hon" ac yna dychwelyd 1 neu rywbeth fel 'na.
Beth yw hynny, fodd bynnag, yw bod hyd yn oed er foo dychwelyd ffug -
Dweud foo yn dychwelyd wir.
Yna nid oes rhaid i chi alw foo eto. Dyna gamsyniad cyffredin.
Gan ei fod yn eich cyflwr, mae'n gwerthuso eisoes,
er mwyn i chi eisoes yn cael y canlyniad os ydych yn defnyddio yn gwneud coeden neu rywbeth fel 'na
neu offer neu ddewis neu rywbeth.
Mae eisoes yn ei werth. Mae'n gweithredu yn barod.
Felly mae'n ddefnyddiol i ddefnyddio swyddogaethau Boolean yn y cyflwr
oherwydd p'un ai a ydych mewn gwirionedd yn gweithredu y corff y ddolen,
wneir ganddo swyddogaeth beth bynnag.
>> Mae ein ail gam olaf yn ysgrifennu neges at y ffeil.
Unwaith y byddwn yn adeiladu y goeden Huffman, yna ysgrifennu neges at y ffeil yn eithaf syml.
Mae'n eithaf syml yn awr i dilynwch y 0s a 1s.
Ac felly gan gonfensiwn rydym yn gwybod bod mewn coeden Huffman y 0au ddatgan eu gadael
a'r 1s yn dangos iawn.
Felly, yna os ydych yn darllen yn fesul tipyn, bob tro eich bod yn cael o 0
byddwch yn dilyn y gangen chwith, ac yna bob tro y byddwch yn darllen 1
rydych yn mynd i ddilyn y gangen cywir.
Ac yna rydych chi'n mynd i barhau hyd nes y byddwch yn taro deilen
oherwydd bod y dail yn mynd i fod ar ddiwedd y canghennau.
Sut allwn ni ddweud a ydym wedi taro ddeilen neu beidio?
Rydym yn dweud hyn o'r blaen.
[Myfyrwyr] Os yw'r arwyddion yn null. >> Yeah.
Gallwn ddweud os ydym wedi taro deilen os yw'r awgrymiadau i goed y chwith a'r dde yn null.
Perfect.
Rydym yn gwybod ein bod yn dymuno darllen fesul tipyn i mewn i'n Huff ffeil.
Fel y gwelsom o'r blaen yn dump.c, yr hyn a wnaethant yn eu darllen fesul tipyn i mewn i'r ffeil Huff
a'i argraffu yn unig allan beth oedd y darnau oedd.
Nid ydym yn mynd i fod yn gwneud hynny. Rydym yn mynd i fod yn gwneud rhywbeth sydd ychydig yn fwy cymhleth.
Ond yr hyn y gallwn ei wneud yw y gallwn gymryd ychydig o god sy'n darllen i mewn i'r bit.
Yma, mae gennym y darn cyfanrif cynrychioli y rhan ar hyn o bryd yr ydym yn bod ar.
Mae hyn yn gofalu am ailadrodd yr holl ddarnau yn y ffeil hyd nes i chi gyrraedd diwedd y ffeil.
Yn seiliedig ar hynny, yna rydych chi'n mynd i eisiau cael rhyw fath o iterator
i groesi eich coeden.
Ac yn seiliedig wedyn ar p'un a yw'r darn yn 0 neu 1,
ydych yn mynd i eisiau i naill ai symud y iterator i'r chwith neu ei symud i'r dde
yr holl ffordd hyd nes y byddwch yn taro deilen, felly mae'r holl ffordd hyd y nod eich bod ar
nid yw'n cyfeirio at unrhyw nodau mwy.
Gall Pam rydym yn gwneud hyn gyda ffeil Huffman ond nid côd Morse?
Oherwydd mewn côd Morse mae ychydig o amwysedd.
Gallem fod yn debyg, oh aros, rydym wedi taro llythyr ar hyd y ffordd, felly efallai fod hyn yn ein llythyr,
ond os ydym yn parhau dim ond ychydig yn hirach, yna byddem wedi taro llythyr arall.
Ond nid yw hynny'n mynd i ddigwydd yn Huffman amgodio,
fel y gallwn fod yn sicr mai'r unig ffordd ein bod ni'n mynd i daro gymeriad
yw os yw plant y nod yn y chwith a dde yn null.
>> Yn olaf, rydym am i ryddhau ein holl cof.
Rydym am yn agos y ffeil Huff ein bod ni wedi bod yn delio â
yn ogystal â dileu pob un o'r coed yn ein goedwig.
Yn seiliedig ar eich gweithredu, mae'n debyg eich bod yn mynd i eisiau i alw gwared goedwig
hytrach na mewn gwirionedd yn mynd drwy bob un o'r coed eich hun.
Ond os ydych wedi gwneud unrhyw goed dros dro, youll 'angen at ryddhau hynny.
Rydych yn gwybod eich cod orau, fel eich bod yn gwybod ble rydych chi'n dyrannu cof.
Ac felly os ydych yn mynd i mewn, dechreuwch gan hyd yn oed Rheoli f'ing gyfer malloc,
gweld pan fyddwch yn malloc a gwneud yn siwr eich bod yn rhyddhau hynny i gyd
ond yna dim ond yn mynd drwy eich cod,
deall lle y gallech fod wedi dyrannu cof.
Fel arfer, efallai y byddwch yn dweud, "Ar ddiwedd y ffeil Im 'jyst yn mynd i gael gwared ar fy coedwig coedwig,"
felly yn y bôn yn glir bod y cof, rhad ac am ddim, yn
"Ac yna Rwyf hefyd yn mynd i gau ffeil ac yna fy rhaglen yn mynd i roi'r gorau iddi."
Ond yw bod yr amser yn unig bod eich rhaglen ymddiswyddo?
Na, oherwydd weithiau efallai y bu gwall a ddigwyddodd.
Efallai na allem agor ffeil neu nid oeddem yn gallu gwneud coeden arall
neu ryw fath o wall yn digwydd yn y dyraniad cof broses ac felly mae'n dychwelyd null.
Mae gwall wedi digwydd ac yna aethom yn ôl a rhoi'r gorau iddi.
Felly, yna rydych eisiau gwneud yn siŵr bod unrhyw adeg bosibl y gall eich rhaglen rhoi'r gorau iddi,
ydych am i ryddhau eich holl cof yno.
Nid dim ond yn mynd i fod ar y ddiwedd y brif swyddogaeth yr ydych yn rhoi'r gorau iddi eich cod.
Byddwch am edrych yn ôl i bob achos bod eich cod gallai o bosibl dychwelyd gynamserol
ac yna rhad ac am ddim beth bynnag cof yn gwneud synnwyr.
Dywedwch eich bod wedi galw wneud goedwig ac a ddychwelodd ffug.
Yna byddwch yn debyg na fydd angen i dynnu eich coedwig
oherwydd nad oes gennych goedwig eto.
Ond ar bob pwynt yn y cod lle efallai y byddwch yn dychwelyd gynamserol
ydych am wneud yn siŵr eich bod yn rhyddhau unrhyw cof posibl.
>> Felly, pan fyddwn yn delio â rhyddhau cof a chael gollyngiadau posibl,
rydym am i nid yn unig yn defnyddio ein barn a'n rhesymeg
ond hefyd yn defnyddio Valgrind i benderfynu a ydym wedi rhyddhau ein holl cof yn iawn neu beidio.
Gallwch un ai redeg Valgrind ar pwff ac yna rhaid i chi hefyd basio
y nifer cywir o gorchymyn-lein dadleuon i Valgrind.
Gallwch redeg hynny, ond bydd y canlyniadau ychydig yn cryptig.
Rydym wedi gotten ychydig i arfer ag ef gyda Speller, ond rydym yn dal angen help ychydig yn fwy,
felly, yna ei redeg gyda baneri ychydig mwy fel y gollyngiad-wirio = llawn,
a fydd yn ôl pob tebyg yn rhoi i ni rhywfaint o allbwn yn fwy defnyddiol ar Valgrind.
>> Yna arall tip ddefnyddiol pan fyddwch yn debugging yw'r gorchymyn diff.
Gallwch gael mynediad weithrediad y staff o Huff, yn rhedeg hynny ar ffeil destun,
ac yna allbwn i ffeil ddeuaidd, ffeil ddeuaidd Huff, i fod yn benodol.
Yna, os ydych yn rhedeg eich pwff hun ar y ffeil ddeuaidd,
yna yn ddelfrydol, eich ffeil testun outputted yn mynd i fod yn union yr un fath
i'r un gwreiddiol yr ydych yn pasio i mewn
Dyma Im 'yn arfer hth.txt fel enghraifft, a dyna'r neb yn siarad amdanynt yn eich fanyleb.
Dyna llythrennol dim ond HTH ac yna Newline.
Ond yn bendant yn teimlo am ddim ac fe'ch anogir bendant i ddefnyddio enghreifftiau hirach
ar gyfer eich ffeil testun.
>> Gallwch hyd yn oed gymryd ergyd yn efallai cywasgu ac yna ddatgywasgu
rhai o'r ffeiliau yr ydych yn ei ddefnyddio mewn Speller fel Rhyfel a Heddwch
neu Jane Austen neu rywbeth fel 'na - byddai hynny'n fath o oer - neu Pwerau Austin,
math o ddelio gyda ffeiliau mawr oherwydd ni fyddem yn dod i lawr iddo
os ydym yn defnyddio'r offeryn nesaf yma, ls-l.
Rydym yn eu defnyddio i ls, sydd yn y bôn yn rhestru'r holl gynnwys yn ein cyfeirlyfr ar hyn o bryd.
Pasio yn y faner-l mewn gwirionedd yn dangos maint y ffeiliau.
Os byddwch yn mynd trwy'r fanyleb pset, mewn gwirionedd mae'n cerdded chi drwy greu'r ffeil ddeuaidd,
o chwythu, ac yr ydych yn gweld bod ar gyfer ffeiliau bach iawn
cost gofod o gywasgu ac yn cyfieithu holl wybodaeth honno
o'r holl amleddau a phethau fel 'na yn drech na'r budd gwirioneddol
o gywasgu'r ffeil yn y lle cyntaf.
Ond os ydych yn rhedeg ar rai ffeiliau testun hirach, yna efallai y byddwch yn gweld eich bod yn dechrau cael rhywfaint o fudd
wrth gywasgu ffeiliau hynny.
>> Ac yna yn olaf, rydym wedi ein GDB pal oed, sy'n cael ei bendant yn mynd i ddod i mewn 'n hylaw hefyd.
>> A oes gennym unrhyw gwestiynau ar goed Huff neu'r broses efallai o wneud y coed
neu unrhyw gwestiynau eraill ar Huff'n pwff?
Iawn. 'N annhymerus' aros o gwmpas am ychydig.
>> Diolch, bawb. Roedd hyn yn Walkthrough 6. A phob lwc.
>> [CS50.TV]