>> [MIZIK jwe]
>> ROB BOWDEN: Hi.
Mwen se Rob.
Li kite yo sa a solisyon deyò.
Se konsa, isit la nou ap ale nan aplike yon tab an jeneral.
Nou wè ke ne la konstri nan nou an tab ki pral gade tankou sa a.
Se konsa, li la pral fè yon mo Char etalaj de gwosè Ki Souvan + 1.
pa bliye + 1 a, depi kantite maksimòm la mo an nan diksyonè a se 45
karaktè.
Lè sa a, nou pral bezwen yon siplemantè N. pou zewo nan antislach.
>> Lè sa a, hashtable nou yo nan chak bokit ki pral estoke yon
lis lye nan nœuds.
Nou pa yo ap fè lineyè sonde isit la.
Se konsa, yo nan lòd yo genyen lyen pwochen an eleman nan bokit la, nou bezwen yon
konstri ne * kap vini an.
OK.
Se konsa, se sa ki yon ne sanble.
>> Koulye a, isit la se deklarasyon an nan hashtable nou an.
Li pral gen 16.834 bokit.
Men, nimewo sa a pa reyèlman gen pwoblèm.
E finalman, nou pral gen a mondyal varyab gwosè hashtable, ki
ki pral kòmanse desann kòm zewo.
Apre sa, li nan ale nan kenbe tras nan ki jan anpil mo yo nan diksyonè nou an.
>> Se konsa, kite a pran yon gade nan chaj.
Remake chaj, li retounen yon bouleen.
Ou retounen vre si li te avèk siksè chaje ak fo otreman.
Apre sa, li pran yon Char diksyonè CONST *, ki se diksyonè a
ke nou vle louvri.
Se konsa, sa a, se premye bagay la nou pral fè.
>> Nou pral fopen la diksyonè pou lekti.
Apre sa, nou pral gen fè asire w ke li plas.
Se konsa, si li tounen NULL, lè sa a nou pa t ' avèk siksè louvri diksyonè a.
Apre sa, nou bezwen retounen fo.
Men, an konsideran ke li te fè avèk siksè louvri, lè sa a nou vle li a
diksyonè.
Se konsa, kenbe loupin jiskaske nou jwenn kèk rezon ki fè yo kraze soti nan sa a bouk,
ki nou pral wè.
Se konsa, kenbe loupin.
>> Epi, koulye a nou pral malok yon ne sèl.
Ak nan kou nou bezwen nan lè tcheke ankò.
Se konsa, si mallocing pa t 'reyisi, Lè sa a, nou vle dechaje nenpòt ki ne ke nou
rive malok anvan, fèmen a diksyonè epi retounen bay manti.
Men, inyore ke, an konsideran nou nan plas, lè sa a nou vle sèvi ak fskanf
li yon mo yon sèl soti nan nou an diksyonè nan ne nou an.
Se konsa, sonje ke antre> mo a se Char la tanpon mo ki gen yon gwosè LENGHTH + 1
ke nou ap ale nan magazen pawòl Bondye a pous
>> Se konsa, fskanf ki pral retounen 1, osi lontan kòm li te kapab avèk siksè
li yon mo ki soti nan dosye a.
Si youn nan yon erè sa yo rive, oswa nou rive nan fen an nan dosye a, li
pa pral retounen 1.
Nan ka sa a li pa retounen 1, nou ap finalman ale nan kraze soti nan
sa a pandan y ap bouk.
Se konsa, nou wè ke yon fwa nou gen avèk siksè li yon mo nan
antre> mo, Lè sa a, nou pral ak sa yo ki mo lè l sèvi avèk fonksyon hash nou an.
>> Se pou nou pran yon gade nan fonksyon an hash.
Se konsa, ou pa reyèlman bezwen yo konprann sa a.
Apre sa, aktyèlman nou jis rale hash sa a fonksyone soti nan entènèt la.
Sèl bagay ou bezwen rekonèt se ke sa a pran yon mo CONST * Char.
Se konsa, li pran yon fisèl kòm opinyon, ak retounen yon Int siye kòm pwodiksyon.
Se konsa, ki nan tout yon fonksyon hash se, se li pran nan yon D 'ak ap ba ou yon
endèks nan hashtable la.
>> Remake nou ap moding pa NUM_BUCKETS, se konsa ke valè tounen
aktyèlman se yon endèks nan hashtable la ak fè sa ki pa endèks pi lwen pase a
limit nan etalaj la.
Se konsa, bay sa fonksyon, nou pral Hash pawòl Bondye a ke nou li a
diksyonè.
Lè sa a, nou pral sèvi ak ki hash insert la
antre nan hashtable la.
>> Koulye a, hashtable hash se aktyèl la lye lis nan tablo a.
Apre sa, li trè posib ke li nan jis NULL.
Nou vle insert antre nou an nan la kòmanse nan lis sa a lye.
Se konsa, nou pral gen kounye a nou pwen antre nan sa ki hashtable la
kounye a lonje dwèt yo.
Lè sa a, nou pral nan magazen, nan hashtable la nan la
hash, antre aktyèl la.
Se konsa, de liy sa yo avèk siksè insert antre nan nan kòmansman an nan la
lis lye nan ki endèks nan hashtable la.
>> Yon fwa nou ap fè ak sa, nou konnen ke nou jwenn yon lòt mo nan la
diksyonè, epi nou enkreman ankò.
Se konsa, nou kontinye ap fè sa jouk lè fskanf finalman tounen yon bagay ki pa 1 nan
ki pwen sonje ke nou bezwen libere antre.
Se konsa, moute isit la nou malloced yon antre.
Apre sa, nou te eseye li yon bagay soti nan diksyonè a.
Apre sa, nou pa t 'avèk siksè li yon bagay soti nan diksyonè a, nan
ka sa a nou bezwen libere antre nan ke nou pa janm aktyèlman mete nan la
hashtable, epi finalman kase.
>> Yon fwa nou kraze soti nou bezwen wè, byen, t 'nou kraze soti paske se la
te yon erè li nan dosye a?
Oswa t 'nou kraze soti paske nou rive nan fen an nan dosye a?
Si te gen yon erè, lè sa a nou vle tounen bay manti.
Paske chay pa t 'reyisi.
Apre sa, nan pwosesis la nou vle dechaje tout mo sa yo ke nou li nan, ak
fèmen dosye a diksyonè.
>> Si nou sipoze nou te reyisi, Lè sa a, nou jis toujou bezwen yo fèmen diksyonè a
pote, epi finalman retounen vre depi nou avèk siksè chaje diksyonè a.
Epi sa a, li pou chaj.
Se konsa, koulye tcheke, yo bay yon hashtable chaje, ki pral gade tankou sa a.
Se konsa, tcheke, li retounen yon bouleen, ki se ale nan endike si te pase nan
nan Char mo *, si wi ou non te pase nan nan fil se nan diksyonè nou an.
Se konsa, si li se an nan diksyonè a, si se nan hashtable nou an,
nou pral retounen vre.
Men, si li pa, nou pral retounen bay manti.
>> Bay sa a te pase nan mo, nou ap ale nan Hash mo a.
Koulye a, yon bagay enpòtan yo rekonèt se ke nan chaj nou te konnen ke tout la
mo nou pral pi ba ka.
Men, isit la nou pa te tèlman asire w.
Si nou pran yon gade nan fonksyon hash nou an, fonksyon hash nou an aktyèlman
se pi ba aman chak karaktè nan pawòl Bondye a.
Se konsa, kèlkeswa lèt majiskil la nan mo, fonksyon hash nou an, se retounen nan
endèks la menm pou tou sa la lèt majiskil se, menm jan li ta gen
tounen pou yon konplètman miniskil vèsyon an pawòl Bondye a.
Oke.
Sa a endèks nou an, se nan la hashtable pou sa a mo.
>> Koulye a, sa a pou bouk ki pral repňte sou lis la lye
sa ki te nan moman sa Konpayi paran yo.
Se konsa, remake nou ap inisyalizin antre nan pwen ak sa yo ki endèks.
Nou pral kontinye pandan y ap antre! = NULL.
Apre sa, sonje ke à konsèy la nan lis nou an antre lye = antre> kap vini an.
Se konsa, gen nou an pwen antre aktyèl yo bay atik nan pwochen nan lis la lye.
>> Se konsa, pou chak antre nan lis la lye, nou pral sèvi ak strcasecmp.
Li pa strcomp.
Paske yon lòt fwa ankò, nou vle fè bagay sa yo ka insensitively.
Se konsa, nou sèvi ak strcasecmp yo konpare a pawòl ki te pase nan sa a
fonksyon kont pawòl Bondye a se sa ki nan sa a antre.
Si li retounen zewo, sa vle di te gen yon match, nan ka sa nou vle
retounen vre.
Nou jwenn avèk siksè nan mo nan hashtable nou an.
>> Si pa t 'gen yon match, lè sa a nou ap ale nan bouk ankò, li gade nan la
pwochen antre.
Epitou, n ap kontinye loupin pandan y ap gen yo antre nan lis sa a lye.
Kisa k ap pase si nou kraze soti nan sa a pou bouk?
Sa vle di nou pa t 'jwenn yon antre ki matche mo sa a, nan ki ka
nou retounen fo ke yo endike ke nou hashtable pa t 'gen mo sa a.
Epi sa a, yon chèk.
>> Se konsa, kite a pran yon gade nan gwosè.
Gwosè Koulye a, a pwal trè senp.
Depi sonje nan chaj, pou chak mo nou te jwenn, nou enkremante yon mondyal
varyab hashtable gwosè.
Se konsa, fonksyon an gwosè se jis ale retounen varyab mondyal la.
Epi sa a, li.
>> Koulye a, finalman, nou bezwen dechaje la diksyonè yon fwa tout bagay nan fè.
Se konsa, kouman nou pral fè sa?
Dwa isit la nou ap loupin sou tout bokit nan tablo nou an.
Se konsa, gen NUM_BUCKETS bokit.
Epi pou chak lis lye nan nou an hashtable, nou ap ale nan bouk sou
antye nan lis la lye, libere chak eleman.
>> Koulye a, nou bezwen dwe fè atansyon.
Se konsa, isit la nou gen yon varyab pou yon ti tan ki nan estoke konsèy la pwochen an
eleman nan lis la lye.
Lè sa a, nou pral gratis eleman aktyèl la.
Nou bezwen asire w ke nou fè sa depi nou pa ka jis gratis eleman aktyèl la
ak Lè sa a, eseye jwenn aksè nan konsèy kap vini an, depi yon fwa nou te libere li,
memwa a vin valab.
>> Se konsa, nou bezwen kenbe otou yon konsèy eleman kap vini an, Lè sa a, nou ka libere nan
eleman kounye a, ak Lè sa a, nou ka mete eleman aktyèl nou yo lonje dwèt sou
eleman nan pwochen an.
Nou pral bouk pandan y ap gen eleman nan lis sa a lye.
Nou pral fè sa pou tout lye lis nan hashtable la.
Apre sa, yon fwa nou ap fè ak sa, nou te konplètman chaje hashtable la, ak
nou ap fè.
Se konsa, li enposib pou debake janm retounen bay manti.
Lè nou ap fè, nou jis retounen vre.
>> Se pou yo bay sa a solisyon yon eseye.
Se konsa, kite a pran yon gade nan sa ki nou konstri ne ap gade tankou.
Isit la nou wè nou pral gen yon bouleen mo ak yon ne konstri * timoun
bracket alfabè a.
Se konsa, premye bagay la ou ka mande, poukisa se ALPHABET
ed defini kòm 27?
Oke, sonje ke nou ap ale nan bezwen yo dwe manyen apostwòf la.
Se konsa, ki k ap pase yo dwe yon ti jan nan yon ka espesyal nan tout pwogram sa a.
>> Koulye a, sonje ki jan yon trye aktyèlman ap travay.
Se pou nou di nou ap Indexing pawòl Bondye a "Chat." Lè sa a, soti nan rasin lan nan trye,
nou pral gade nan timoun yo etalaj, e nou pral fè yon gade nan la
endèks ki koresponn ak lèt ​​la C. Se konsa, ke yo pral Catalogue 2.
Se konsa, bay sa, ki pral ban nou yon nouvo ne.
Lè sa a, nou pral travay nan ki ne.
>> Se konsa, bay yo ke ne, nou yon lòt fwa ankò ale nan gade nan etalaj la timoun yo.
Apre sa, nou pral gade nan endèks zewo koresponn ak yon an nan chat.
Se konsa, Lè sa a, nou pral pou yo ale nan ki ne, ak bay sa ne nou pral
fè yon gade nan fen a li nan yon korespondan T. Apre sa, deplase sou ak sa yo ki ne,
finalman, nou te konplètman gade nan pawòl Bondye nou an "chat." Epi, koulye a bouleen
se pawòl Bondye sipoze endike si mo sa a bay se aktyèlman yon mo.
>> Se konsa, poukisa nou bezwen ki ka espesyal?
Oke sa ki nan pawòl Bondye a "katastwòf" se nan diksyonè nou an, men nan
Mo "chat" se pa?
Se konsa, ak je l 'nan wè si pawòl Bondye a "chat" se nan diksyonè nou an, nou
ale nan avèk siksè gade nan endis yo C-A-T nan rejyon ne.
Men, sa a sèlman paske katastwòf te rive yo kreye nœuds sou wout la
soti nan C-A-T yo, tout wout ki mennen nan nan fen mo a.
Se konsa, bouleen mo itilize yo endike si kote sa a an patikilye
aktyèlman endike yon mo.
>> Tout dwa.
Se konsa, kounye a ke nou konnen ki sa li trye se ale nan gade tankou, se pou yo gade nan la
chaje fonksyon.
Se konsa, chay ki pral retounen yon bouleen pou si nou avèk siksè oswa
san siksè chaje diksyonè a.
Lè sa a a pwal diksyonè a ke nou vle chaje.
>> Se konsa, premye bagay nou ap fè se louvri sa ki diksyonè pou lekti.
Epi nou gen a asire w nou pa t 'febli.
Se konsa, si diksyonè a pa t ' avèk siksè louvri, li pral retounen
nil, nan ki ka nou ap ale nan retounen bay manti.
Men, an konsideran ke li avèk siksè louvri, lè sa a nou ka aktyèlman li
nan diksyonè a.
>> Se konsa, premye bagay nou pral vle fè se nou gen sa a
mondyal rasin varyab.
Koulye a, rasin a pwal yon ne *.
Li nan tèt la nan trye nou an ke nou ap yo pral iteration nan.
Se konsa, premye bagay la ke nou ap ale vle fè se asiyen
memwa pou rasin nou an.
Remake nou ap lè l sèvi avèk calloc la fonksyon, ki se fondamantalman menm bagay la tou
kòm fonksyon an malok, eksepte li a garanti yo retounen yon bagay ki
konplètman zero deyò.
Se konsa, si nou itilize malok, nou ta bezwen ale nan tout nan pwent yo nan nou an
ne, ak asire w ke yo ap tout nil.
Se konsa, calloc pral fè sa pou nou.
>> Koulye a, jis tankou malok, nou bezwen fè asire w ke alokasyon an te aktyèlman
siksè.
Si sa a tounen nil, lè sa a nou ap oblije fèmen pòt oswa diksyonè
ranpli epi retounen bay manti.
Se konsa, an konsideran alokasyon ki te siksè, nou pral sèvi ak yon ne *
kurseur repňte nan trye nou an.
Se konsa, rasin nou pa janm ale nan chanje, men nou ap ale nan sèvi ak kurseur
aktyèlman ale nan ne ne.
>> Se konsa, nan sa a pou bouk nou ap li nan dosye a diksyonè.
Apre sa, n ap lè l sèvi avèk fgetc.
Fgetc ki pral gen tan pwan yon sèl N. nan dosye a.
Nou pral kontinye arachman karaktè pandan ke nou pa rive nan
fen nan dosye a.
>> Gen de ka nou bezwen okipe.
Premye a, si karaktè a pa t 'yon liy nouvo.
Se konsa, nou konnen si se te yon liy nouvo, Lè sa a, nou ap sou pou avanse pou sou yon nouvo mo.
Men, an konsideran li pa t 'yon liy nouvo, Lè sa a, isit la nou vle konnen nan
endèks nou pral endèks nan nan etalaj la timoun ki
nou te etidye anvan.
>> Se konsa, tankou mwen te di anvan, nou bezwen ka espesyal apostwòf la.
Avi nou ap lè l sèvi avèk tèrsyèr la operatè isit la.
Se konsa, nou ap ale nan li sa a kòm, si karaktè a nou li nan te gen yon
apostwòf, lè sa a nou pral mete endèks = "ALPHABET" -1, ki pral
gen endèks la 26.
>> Lòt Bagay, si li pa t 'yon apostwòf, gen nou pral mete endèks la
egal a c - yon.
Se konsa, sonje tounen soti nan deja p-kouche, c - yon ki pral ban nou an
alfabetik pozisyon nan C. Se konsa, si C se lèt A a, sa a pral
ban nou endèks zewo.
Pou lèt la B, li pral ba nou endèks la 1, ak sou sa.
>> Se konsa, sa a ba nou endèks la nan la timoun etalaj ke nou vle.
Koulye a, si sa a endèks se kounye a nil nan timoun yo, sa vle di ke yon ne
pa ki egziste kounye a soti nan ki chemen.
Se konsa, nou bezwen asiyen yon ne pou sa chemen.
Sa a ki sa nou pral fè isit la.
>> Se konsa, nou ap ale nan ankò sèvi ak calloc la fonksyon, se konsa ke nou pa oblije
zewo soti tout endikasyon yo.
Epi nou ankò bezwen tcheke ki calloc pa t 'febli.
Si calloc t rate, lè sa a nou bezwen dechaje tout bagay, fèmen nou an
diksyonè, epi retounen bay manti.
Se konsa, an konsideran ke li pa t 'echwe, Lè sa a, sa a pral kreye yon timoun nouvo pou nou.
Lè sa a, nou pral ale nan ke pitit.
Kurseur nou yo ap repňte desann nan sa timoun nan.
>> Koulye a, si sa a pa t 'nil yo kòmanse avèk yo, Lè sa a, kurseur nan ka jis repňte
desann nan ke pitit san yo pa aktyèlman li te gen asiyen anyen.
Sa a se ka a kote nou te rive premye asiyen pawòl Bondye a "chat." Apre sa,
sa vle di lè nou ale nan asiyen "Katastwòf," nou pa bezwen yo kreye
nœuds pou C-A-T ankò.
Yo deja egziste.
>> Ki sa ki se sa a lòt moun?
Sa a se kondisyon an kote c te antislach n, kote c te yon liy nouvo.
Sa vle di ke nou gen avèk siksè ranpli yon mo.
Kounye a ki sa nou vle fè lè nou konplete avèk siksè yon mo?
Nou pral itilize sa a jaden mo andedan nan ne konstri nou an.
Nou vle mete ke yo vre.
Se konsa, ki endike ke ne sa a ki endike ke yon siksè
mo, yon mo vrè.
>> Koulye a, ke yo vre.
Nou vle Reyajiste kurseur nou an nan pwen nan konmansman an nan trye la ankò.
E finalman, enkreman diksyonè nou an gwosè, depi nou te jwenn yon lòt travay.
Se konsa, nou ap ale nan kontinye ap fè sa, lekti nan karaktè pa karaktè,
konstwi nouvo nœuds nan trye nou yo ak pou chak mo nan diksyonè a, jouk
nou finalman rive nan C! = èof, nan ki ka nou kraze soti nan dosye a.
>> Koulye a, gen de ka ki poko gen ki nou ka gen frape èof.
Premye a se si te gen yon erè li nan dosye a.
Se konsa, si te gen yon erè, nou bezwen fè tipik la.
Dechaje tout bagay, fèmen dosye a, retounen fo.
Si nou sipoze gen pa t 'yon erè, ki jis vle di nou aktyèlman frape nan fen
dosye a, nan ki ka, nou fèmen a ranpli epi retounen vre depi nou
diksyonè avèk siksè chaje nan trye nou an.
>> Se konsa, kounye a kite a tcheke deyò chèk la.
Gade nan fonksyon an chèk, nou wè ki chèk ki pral retounen yon bouleen.
Li retounen vre si mo sa a ke li nan ke yo te pase se nan trye nou an.
Li retounen fo otreman.
Se konsa, kouman ou menm ki detèmine si mo sa a se nan trye nou an?
>> Nou wè isit la ke, jis tankou anvan, nou pral sèvi ak kurseur repňte
nan trye nou an.
Koulye a, isit la nou ap ale nan repňte sou tout pawòl nou yo.
Se konsa, iteration sou pawòl Bondye a nou se sot pase yo, nou pral detèmine a
endèks nan etalaj la timoun ki koresponn ak mo bracket I. Se konsa, sa a
ki pral gade egzakteman tankou chaj, kote si mo [mwen]
se yon apostwòf, lè sa a nou vle yo sèvi ak endèks "ALPHABET" - 1.
Paske nou detèmine ke sa se kote nou pral nan magazen
apostrof.
>> Lòt Bagay nou pral sèvi ak de mo pi ba bracket I. Se konsa, sonje mo sa a kapab
gen abitrè lèt majiskil.
Se konsa, nou vle asire nou ke nou ap lè l sèvi avèk yon vèsyon miniskil de bagay sa yo.
Lè sa a, fè soustraksyon soti nan ke 'yon' yo yon fwa ankò ban nou alfabetik la
pozisyon nan ki karaktè.
Se konsa, ki k ap pase yo dwe endèks nou nan etalaj la timoun yo.
>> Epi, koulye a si sa endèks nan timoun yo etalaj se nil, sa vle di nou
pa kapab kontinye iteration desann trye nou an.
Si sa a, se ka a, mo sa a pa kapab petèt dwe nan trye nou an.
Depi si li te, ki ta vle di ta gen yon chemen
desann nan mo sa a.
Epi ou pa ta janm rankontre nil.
Se konsa, rankontre nil, nou retounen fo.
Pawòl Bondye a se pa an nan diksyonè a.
Si se pa t nil, lè sa a nou ap pral kontinye iteration.
>> Se konsa, nou pral soti la kurseur nan pwen ak sa yo ki an patikilye
ne nan ki Konpayi paran yo.
Nou kontinye ap fè sa nan tout pawòl Bondye a tout antye, an konsideran
nou pa janm frape nil.
Sa vle di nou te kapab jwenn nan pawòl Bondye a tout antye epi jwenn
yon ne nan eseye nou an.
Men, nou pa ap byen fè ankò.
>> Nou pa vle jis retounen vre.
Nou vle retounen kurseur> mo.
Depi sonje ankò, se "chat" se pa nan diksyonè nou an, ak "katastwòf"
se, Lè sa a, nou pral avèk siksè nou jwenn nan pawòl Bondye a "chat." Men, kurseur
mo yo pral fo ak pa vre.
Se konsa, nou retounen mo kurseur yo endike si wi ou non ne sa a se aktyèlman yon mo.
Epi sa a, li pou chèk la.
>> Se konsa, kite a tcheke deyò gwosè.
Se konsa, gwosè a pwal trè fasil depi, sonje nan chaj, nou
incrementing diksyonè gwosè pou chak mo ke nou rankontre.
Se konsa, gwosè se jis ale nan retounen diksyonè gwosè.
Epi sa a, li.
>> Se konsa, Finalman nou te dechaje.
Se konsa, dechaje, nou ap ale nan sèvi ak yon fonksyon repetitif ki aktyèlman fè tout
nan travay la pou nou.
Se konsa, fonksyon nou an, se ale nan y'a rele l 'sou decharjeur.
Ki sa ki decharjeur pral fè?
Nou wè isit la ke decharjeur ki pral repňte sou tout timoun yo nan
ne patikilye sa a.
Men, si ne nan pitit se pa nil, lè sa a nou pral
dechaje ne nan timoun.
>> Se konsa, sa a se ou recursive dechaje tout pitit nou yo.
Yon fwa nou ap asire w ke tout timoun nou yo yo te chaje, lè sa a nou
ka nou libere tèt nou, se konsa dechaje tèt nou.
Sa a pral travay recursive dechaje trye a tout antye.
Lè sa a, yon fwa ki nan fè, nou ka jis retounen vre.
Debake pa ka febli.
Nou jis ap libere bagay sa yo.
Se konsa, yon fwa nou ap fè libere tout bagay, retounen vre.
Epi sa a, li.
Non mwen se Rob.
Lè sa a te ortograf.
>> [MIZIK jwe]