[MUSIC PLAYING] Rob Bowden: Hi. Mən Rob deyiləm. Və bu həll bildirin. Belə ki, burada biz həyata olacaq ümumi masa. Biz görürük ki, bizim bu struct node masa bu kimi baxmaq edir. Belə ki, bir char söz var olacaq Ölçülər Uzunluğu + 1 array. Ki, + 1 unutmayın ildən maksimum Lüğətə söz 45 simvol. Və sonra biz bir əlavə lazım olacaq backslash sıfır üçün character. Və sonra hər bizim hashtable bucket saxlamaq üçün gedir bir qovşaqlarının bağlı siyahı. Biz burada probing xətti məşğul deyil. Və sifariş növbəti keçid bucket element, biz lazımdır struct node * Növbəti. OK. Belə ki, bir node kimi görünür nə. İndi burada elan edir Bizim hashtable edir. Bu 16.834 buketler var olacaq. Amma ki sayı həqiqətən etməz. Və nəhayət, biz olacaq qlobal dəyişən hashtable ölçüsü olan sıfır kimi başlamaq niyyətindədir. Və necə takip olacaq çox söz bizim lüğət var. Belə ki, yük bir nəzər salaq. Ki, yük edək, bir bool qaytarır. Uğurla, əgər doğru qayıtmaq dolu və saxta başqa. Və bu, bir const char * lüğət edir lüğət olan açmaq istəyirəm. Belə ki, ilk şey biz nə olacaq. Biz fopen olacaq oxumaq üçün lüğət. Və biz etmək olacaq Bu nail əmin olun. Bu NULL geri Belə ki, əgər, sonra biz etmədik uğurla lüğət açmaq. Və biz saxta qayıtmaq lazımdır. Amma bu uğurla etdi ki, fərz açıq, sonra biz oxumaq istəyirəm lüğət. Biz bəzi tapmaq qədər loop saxlamaq Bu loop çıxmaq üçün səbəb, biz görəcəksiniz olan. Belə ki, loop saxlamaq. İndi biz olacaq bir node malloc. Və əlbəttə biz lazım hava yenidən yoxlamaq. Belə ki, mallocing müvəffəqiyyətli ola bilmədi, onda biz ki, biz hər hansı bir node boşaltmaq istəyirəm əvvəl malloc nə oldu da, yaxın lüğət və saxta qayıtmaq. Amma məhəl fərz biz nail, sonra biz fscanf istifadə etmək istədiyiniz bir tək söz oxumaq bizim bizim node daxil lüğət. Belə ki, giriş> sözü xatırlayıram char + 1 size LENGHTH söz bufer biz daxil söz saxlamaq olacaq ki, Belə ki, fscanf kimi uzun, 1 qayıtmaq üçün gedir Bu edə uğurla idi faylı bir sözü oxumaq. Bir səhv və ya olur, ya biz fayl sonuna çatmaq, bu 1 qayıtmaq olmaz. Bu, 1 qayıtmaq deyil halda biz nəhayət çıxmaq olacaq bu isə loop. Beləliklə, biz görürük ki, biz uğurla dəfə bir sözü oxumaq entry> söz, sonra biz olacaq bizim hash funksiyası istifadə edərək, söz. Nin bir nəzər salaq hash funksiyası. Beləliklə, siz həqiqətən ehtiyac yoxdur Bu anlamaq üçün. Və həqiqətən biz yalnız bu hash çıxardı internet fəaliyyət göstərir. Siz tanımaq lazımdır yalnız şey bu bir const char * söz edir ki,. Belə ki, daxil bir simli alaraq, və oldu çıxış kimi bir imzasız int qaytarılması. Belə ki, bütün bir hash funksiyası olunur, bu bir giriş edir və bir verir Bu hashtable daxil index. Biz NUM_BUCKETS tərəfindən moding edirik ki, görürsünüz, ki, dəyəri döndü əslində hashtable daxil index edir və nə kənarda deyil index serialın həddi. Belə ki funksiyası, biz gedirik verilir biz oxumaq söz hash üçün lüğət. Və sonra biz istifadə etmək olacaq daxil olan Hash Bu hashtable daxil giriş. İndi hashtable hash, cari Cədvəldə siyahısını əlaqəli. Və bu çox mümkün yalnız NULL ki. Biz bizim giriş əlavə etmək istəyirsiniz Bu bağlı siyahı başlayan. Və belə ki, biz cari olacaq nə hashtable giriş nöqtəsi Hal-hazırda göstərir. Və sonra biz, saxlamaq olacaq Bu da hashtable da hash, cari giriş. Belə ki, bu iki xətləri uğurla daxil nın başında giriş ki, index at bağlı siyahı Bu hashtable da. Biz ilə tamamlayın sonra, biz bilirik biz başqa söz aşkar ki, lüğət, və biz yenə arttırmayı. Beləliklə, biz bunu saxlamaq fscanf qədər nəhayət qeyri-1 bir şey döndü olan point unutmayın ki biz giriş azad etmək lazımdır. Belə ki, burada biz bir giriş malloced. Və biz bir şey oxumaq üçün cəhd lüğət. Və biz uğurla oxumaq etməyib in lüğət bir şey, biz giriş azad etmək lazımdır, bu halda biz, həqiqətən, istismara heç vaxt hashtable, və nəhayət qırmaq. Biz çıxmaq bir dəfə biz görmək lazımdır, yaxşı, çünki orada çıxmaq etməyib bir səhv faylı oxuyur? Yoxsa biz çıxmaq idi, çünki biz fayl sona gəlindi? Bir səhv sonra, var idi biz saxta qayıtmaq istəyirəm. Yük müvəffəqiyyətli ola bilmədi, çünki. Və prosesdə biz boşaltmaq istəyirəm bütün biz oxumaq sözlər, və lüğət fayl bağlayın. Biz nail ola bildimi etsək, onda biz yalnız hələ lüğət bağlamaq lazımdır fayl, və nəhayət doğru geri bəri biz uğurla lüğət yükləndi. Və yük üçün var. Belə ki, indi bir dolu hashtable verilmiş, yoxlamaq bu kimi baxmaq edir. Belə olan bir bool qaytarır, yoxlamaq keçdi olub-olmadığını göstərin gedir char * sözlə, olub keçdi simli bizim lüğət edir. , Lüğətdə Yəni əgər bu, bizim hashtable olduğu halda, biz doğru qayıdacaq. Bu deyil, əgər, biz yalan qayıdacaqlar. Bu söz keçdi nəzərə alaraq, biz istəyirik sözü hash gedir. İndi tanımaq üçün əhəmiyyətli bir şeydir yük biz bilirdik ki, ki, bütün biz aşağı halda olacaq sözləri. Lakin burada biz belə əmin deyilik. Biz hash funksiyası nəzər varsa, həqiqətən, bizim hash funksiyası lower casing hər bir xarakter deyil Sözün. Belə ki, asılı olmayaraq Kapitallaşma söz, bizim hash funksiyası geri Bu nə üçün eyni index kapitalizasiyası var ki kimi, tamamilə kiçik qayıtdı Sözün versiyası. Alright. Yəni bizim index daxil edir Bu söz hashtable. İndi loop üçün gedir bağlı siyahı üzərində təkrarlamaq ki, index idi. Beləliklə, biz giriş başlatılıyor fark ki, index qeyd etmək. Biz davam edirik giriş! = NULL isə. Və xatırlayıram ki, bu göstərici yenilənməsi növbəti bizim bağlı siyahısı giriş = entry>. Belə ki, bizim cari giriş nöqtəsi var bağlı siyahıda növbəti maddə. Belə ki bağlı siyahı hər giriş üçün, biz strcasecmp istifadə etmək olacaq. Bu strcomp deyil. Bir daha, biz istəyirik, çünki insensitively şey işi yoxdur. Beləliklə, biz müqayisə etmək strcasecmp istifadə Bu vasitəsilə köçürdü söz sözünə qarşı funksiyası Bu giriş edir. Sıfır qaytarır ki, var idi deməkdir biz istədiyiniz halda bir matç, doğru geri. Biz uğurla tapıldı Bizim hashtable söz. Bir matç yox idi, onda biz istəyirik yenidən loop gedən və baxmaq növbəti giriş. Və biz isə orada loop davam edəcəyik bu bağlı siyahısında entries var. Biz qırmaq əgər nə olur loop üçün bu həyata? Yəni biz bir giriş tapmadı deməkdir ki, olan halda, bu söz eşleşen biz göstərir yalan qayıtmaq ki, bizim hashtable bu söz yox idi. Və bir çek var. Belə ki, ölçüsü bir nəzər salaq. İndi ölçüsü olduqca sadə olacaq. Ci ildən hər bir söz üçün, yük xatırlayıram biz qlobal artırılacağını tapıldı dəyişən hashtable ölçüsü. Belə ki, ölçüsü funksiyası yalnız gedir qlobal dəyişən qayıtmaq üçün. Və bu. İndi, nəhayət, biz boşaltmaq lazımdır lüğət hər şey həyata bir dəfə. Belə ki, necə biz bunu edəcəyik? Burada biz üzərində loop edirik bizim masa bütün buketler. Belə ki, NUM_BUCKETS buketler var. Və hər bağlıdır siyahısı üçün bizim hashtable, biz artıq loop olacaq bağlı siyahı bütövlükdə, hər element azad. İndi biz diqqətli olmaq lazımdır. Belə ki, burada biz bir müvəqqəti dəyişən var ki, növbəti göstərici saxlanılması oldu bağlı siyahısında element. Və sonra biz pulsuz olacaq cari element. Biz bəri bunu əmin olmaq lazımdır yalnız cari element azad edə bilməz və sonra növbəti pointer daxil olmaq üçün cəhd edin, bir dəfə bəri biz azad etdik, yaddaş etibarsız olur. Beləliklə, biz bir pointer ətrafında saxlamaq lazımdır növbəti element, sonra biz azad edə bilər cari element, sonra biz təkmilləşdirə bilər qeyd etmək bizim cari element növbəti element. Biz elementləri loop var lazımdır isə bu bağlı siyahısında. Biz bütün bağlı ki edəcəyik Bu hashtable siyahıları. Biz ilə tamamlayın Və bir dəfə biz etdik tamamilə hashtable boşaldılır və biz tamamlayın. Belə ki, boşaltmaq üçün mümkün deyil Heç yalan qayıtmaq. Və biz tamamlayın zaman, biz yalnız doğru qayıdın. Bu həll keçir edək. Belə ki, nə bizim nəzər salaq struct node kimi görünür. Burada biz bir bool olacaq bax söz və struct node * uşaqlar bracket ALPHABET. Siz ola bilər, belə ki, ilk şey merak, niyə ALPHABET edir ed 27 kimi müəyyən? Yaxşı, biz lazım olacaq ki, xatırlayıram apostrof idarə edilə. Belə ki, bir qədər bir olacaq Bu proqram ərzində xüsusi halda. İndi xatırlayıram necə bir trie həqiqətən işləyir. Biz söz indeksasiyası etdiyiniz deyirlər "Cats." Sonra trie kökündən, biz uşaqlar baxmaq olacaq array, və biz baxmaq olacaq Məktubda uyğun index 2 dizine olacaq C. Belə ki. Belə verilmiş ki, ki, iradə bizə yeni node verir. Və sonra biz node işləmək lazımdır. Belə ki node verilmiş, biz bir daha istəyirik uşaqlar array baxmaq üçün gedir. Və biz index sıfır baxmaq olacaq pişik A uyğun. Beləliklə biz ki node getmək olacaq, ki, node verilmiş gedirik sonunda baxmaq üçün bir qarşılıq var T. Və node hərəkət üçün nəhayət, biz tamamilə baxdı vasitəsilə söz "pişik". İndi bool söz olub-olmadığını göstərir ehtimal edilir Bu söz əslində bir söz. Belə ki, niyə biz xüsusi halda lazımdır? Yaxşı nə sözü "fəlakət" bizim lüğət, lakin sözü "pişik" deyil? Belə ki, görmək üçün axtarır əgər sözü "pişik" bizim lüğət, biz etdiyiniz uğurla vasitəsilə baxmaq üçün gedir region node indeksləri C-A-T. Amma ki, yalnız, çünki fəlakət yolda qovşaqlarının yaratmaq oldu C-A-T, bütün yol Sözün sonu. Belə ki, bool sözü olub-olmadığını göstərir üçün istifadə olunur bu yer həqiqətən bir söz göstərir. Bütün hüquqlar. Belə ki, indi biz trie nə bilirik ki, kimi baxmaq niyyətində, ən baxaq funksiyası yük. Belə ki, yük bir bool qayıtmaq üçün gedir olub biz uğurla və ya uğursuz lüğət yükləndi. Və bu lüğət olacaq biz yüklemek üçün istəyirəm ki,. Biz nə istəyirik Belə ki, ilk şey açıqdır oxu üçün lüğət up. Və biz əmin etmək lazımdır biz uğursuz olmadı. Lüğət deyil əgər uğurla açıldı, o qayıdacaq null olan halda biz istəyirik yalan qayıtmaq olacaq. Amma hərfinin uğurla açdı, sonra biz, həqiqətən oxuya bilərsiniz Lüğət vasitəsilə. Biz olacaq Belə ki, ilk şey etmək istəyirəm ki, biz bu var qlobal dəyişən kök. İndi root * bir node olacaq. Biz istəyirik ki, bizim trie üst var vasitəsilə iterating olacaq. Gedirik ki, ilk şey etmək istəyirəm ayrılması deyil bizim kök üçün yaddaş. Biz calloc istifadə edirik ki, görürsünüz əsasən eyni olan funksiyası, Bu malloc funksiyası kimi, başqa bu ki, bir şey geri zəmanət tamamilə həyata zeroed. Biz malloc istifadə əgər Belə ki, biz lazımdır olan göstəricilər bütün vasitəsilə getmək bizim node, və əmin olun onlar bütün null istəyirik. Belə ki, calloc bizim üçün bunu edəcək. İndi yalnız malloc kimi, biz etmək lazımdır ayrılması həqiqətən idi ki, əmin müvəffəqiyyətli. Bu null döndü, onda biz yaxın və ya lüğət lazımdır fayl və saxta qayıtmaq. Belə ki ayrılmasını fərz uğurlu, biz * bir node istifadə etmək olacaq bizim trie vasitəsilə təkrarlamaq üçün kursor. Belə ki, bizim kökləri dəyişdirmək üçün gedir heç vaxt, lakin biz kursor istifadə etmək olacaq həqiqətən node node getmək. Belə ki, bu loop üçün biz oxu lüğət faylı vasitəsilə. Və biz fgetc istifadə edirik. Fgetc bir qamarlamaq üçün gedir fayl character. Biz qənimətçilik davam edirik simvol biz çata bilməyən isə fayl sonu. Biz idarə etmək üçün lazım olan iki hallarda var. Ilk, əgər karakter yeni bir xətt idi. Belə ki, biz sonra yeni bir xətt idi əgər bilmək biz yeni bir söz üçün hərəkət etmək üzrəyik. Amma sonra, yeni bir xətt idi fərz burada biz anlamaq istəyirəm index biz daxil index olacaq uşaqlar array ki, biz əvvəl baxdı. Belə ki, əvvəl dediyim kimi, biz lazım xüsusi halda apostrof. Biz üç komponentli istifadə etdiyiniz bildiriş burada operator. Belə ki, əgər biz, bu oxumaq olacaq biz oxumaq xarakter idi apostrof, sonra biz müəyyən olacaq index = "ALPHABET" -1 edəcək olan indeksi 26 ola bilər. Başqa, bu apostrof deyil, əgər biz index müəyyən olacaq c bərabər - a. Belə ki, geri əvvəllər p-dəsti xatırlayıram, c - bizə vermək niyyətindədir C. əlifba mövqeyi Belə ki C bu iradə, məktub A bizə index sıfır verir. Hərfi B üçün, verəcək belə bizə indeksi 1, və. Belə ki, bu bizə indeksi verir biz istəyirik ki, uşaqlar array. İndi bu göstərici hazırda null əgər uşaqlar, o deməkdir ki, bir node Hal-hazırda yoxdur ki, yolundan. Beləliklə, biz ayırmaq lazımdır ki, yol üçün bir node. Yəni biz burada nə olacaq nə. Yəni biz yenidən calloc istifadə etmək olacaq funksiyası, biz yoxdur ki, bütün göstəricilərinə həyata sıfıra. Və biz yenidən yoxlamaq lazımdır ki calloc uğursuz olmadı. Calloc uğursuz oldu, onda biz lazım hər şeyi boşaltmaq, yaxın bizim lüğət və saxta qayıtmaq. Belə ki, sonra, bilmirlər ki, fərz Bu, bizim üçün yeni bir uşaq yaradacaq. Və sonra biz uşaq gedəcək. Bizim kursor təkrarlamaq edəcək ki, uşaq aşağı. İndi bu ilə başlamaq null deyil, əgər, sonra kursor yalnız təkrarlamaq olar həqiqətən olmadan uşaq aşağı bir şey ayırmaq üçün olan. Bu, bizim ilk baş belədir sözü ayrılması "pişik". Və biz ayrılması getmək zaman o deməkdir ki, "Fəlakət," biz yaratmaq lazım deyil yenə C-A-T qovşaqlarının. Onlar artıq mövcuddur. Başqa, bu nədir? Bu c olduğu şərtdir c a yeni xətt olduğu backslash n. Bu biz uğurla o deməkdir ki, bir söz başa. İndi biz nə istəyirsiniz zaman uğurla bir söz başa? Biz bu söz sahəsində istifadə etmək olacaq Bizim struct node daxilində. Biz doğru ki, qurmaq istəyirik. Belə ki, göstərir ki, bu node uğurlu göstərir söz, faktiki söz. İndi doğru üçün seçin. Biz nöqtəyə kursor yenidən istəyirəm yenidən trie əvvəlinə. Və nəhayət, bizim lüğət arttırmayı ölçüsü, biz başqa iş tapdı ildən. Belə ki, bunu saxlamaq olacaq, , xarakteri ilə xarakter oxu bizim trie yeni qovşaqlarının tikintisi və lüğət, qədər hər bir söz üçün biz nəhayət C çatmaq! = EOF olan halda biz fayl çıxmaq. İndi iki hallarda altında var biz EOF hit ola biləcək. Bir səhv var idi, əgər ilk fayl oxu. Bir səhv var idi əgər, biz tipik etmək lazımdır. Yaxın, hər şeyi boşaltmaq fayl, yalan qaytarın. , Bir səhv var idi hərfinin yalnız biz həqiqətən sonunda hit deməkdir fayl olan halda, biz yaxın fayl və doğru qayıtmaq bəri biz uğurla yüklü lüğət bizim trie daxil. Belə ki, indi çek yoxlamaq edək. Çek funksiyası baxaraq, biz görürük çek bir bool geri gedir. Bu söz ki, əgər doğru qayıdır keçib bizim trie edir. Bu başqa yalan qaytarır. Belə ki, necə olub-olmadığını müəyyən olunur Bu söz bizim trie edir? Biz burada görürük ki, əvvəl kimi, biz təkrarlamaq kursor istifadə etmək olacaq bizim trie vasitəsilə. İndi burada biz təkrarlamaq olacaq bizim bütün söz üzərində. Belə ki, biz keçmiş söz üzərində iterating biz müəyyən olacaq index uşaqlar array daxil söz bracket I. uyğundur Belə ki, bu tam kimi baxmaq üçün gedir yük, Ü söz [i] bir apostrof, sonra biz istəyirik index "Əlifba" istifadə - 1. Biz müəyyən Çünki ki, biz saxlamaq niyyətində olduğunuz edir apostrophes. Else biz iki alt söz istifadə etmək olacaq bracket I. Belə ki, söz xatırlayıram bilər ixtiyari kapitallaşma var. Və belə ki, biz istəyirik ki, əmin etmək istəyirəm şeyi bir kiçik versiyasını istifadə edərək. Və sonra 'bir' bir dəfə-dən çıxmaq yenə bizə Əlifba vermək xarakterli mövqeyi. Belə ki, bizim index olacaq uşaqlar massivinə. İndi əgər uşaqlar daxil index array null ki, we deməkdir artıq iterating davam edə bilər bizim trie aşağı. Ki, işi varsa, bu söz ola bilməz bəlkə bizim trie ola bilər. Bu idi ki, əgər ki ildən bir yol olacaq demək ki, söz aşağı. Və null qarşılaşa heç vaxt. Belə null qarşılaşmadan, biz yalan. Söz lüğətdə yoxdur. Bu null deyil, onda biz istəyirik Iterating davam. Belə ki, biz orada kursor çıxırıq xüsusi qeyd etmək ki, index at node. Biz ərzində bunu saxlamaq bütün söz, fərz biz null hit heç vaxt. Yəni biz vasitəsilə almaq edə deməkdir bütün söz və tapmaq Bizim cəhd bir node. Amma biz olduqca hələ həyata deyilik. Biz yalnız doğru qayıtmaq istəmirəm. Biz kursor> söz qayıtmaq istəyirəm. Yenidən xatırlayıram ildən, "pişik" deyil bizim lüğət və "fəlakət" , sonra biz uğurla biz almaq olacaq vasitəsilə söz "pişik". Amma kursor söz yalan və doğru olacaq. Beləliklə, biz göstərir kursor söz qayıtmaq olmadığını, bu node həqiqətən bir söz. Və yoxlamaq üçün bu. Belə ki, ölçüsü kontrol imkan. Beləliklə ölçüsü olduqca asan olacaq ildən, yük xatırlayıram, biz istəyirik üçün lüğət ölçüsü incrementing Biz qarşılaşırıq ki, hər bir söz. Belə ki, ölçüsü yalnız gedir lüğət ölçüsü qayıtmaq. Və bu. Belə ki, nəhayət, biz boşaltmaq var. Belə ki, boşaltmaq, biz istifadə etmək olacaq bir əslində bütün etmək üçün recursive funksiyası bizim üçün iş. Belə ki, bizim funksiyası gedir azad etməyə çağırıb. Nə azad etməyə nə gedir? Biz azad etməyə gedir burada bax uşaqların bütün təkrarlamaq bu node. Və uşaq node deyilsə null, sonra biz olacaq uşaq node boşaltmaq. Belə ki, bu recursively boşaltmaq deyil bizim uşaqlar bütün. Biz əmin deyilik dəfə bizim uşaqlar bütün boşaldılır olub, sonra biz özümüzü azad, belə edə bilərsiniz özümüzü boşaltmaq. Bu recursively işləyəcək bütün trie boşaltmaq. Və sonra həyata bir dəfə, biz yalnız doğru ola bilər. Boşaltmaq uğursuz bilməz. Biz yalnız şeyi azad edirik. Belə ki, bir dəfə biz azad tamamlayın hər şey, doğru geri. Və bu. My name Rob edir. Və bu speller idi. [MUSIC PLAYING]