>> SPEAKER 1: Да дадем Този разтвор се пробвам.
Така че нека да разгледаме какво ни Struct възел ще изглежда така.
Ето, ние виждаме, че ще има Bool Word и възел звезда Struct
Деца скоба азбука.
Така че първото нещо, което може би се чудите, защо е азбука хеш определя като 27?
Е, не забравяйте, че ние ще трябва да се борави с апостроф, така
че ще бъде малко на специален При цялата тази програма.
>> Добре, сега, си спомням как един Trie действително работи.
Да кажем, че ние сме индексиране думата котки, после от корена на нашата Trie,
ние ще разгледаме в Детския масив, и ние отиваме да погледнем в
индекс, който отговаря на буквата C. Така че би било индекс две.
Така че, имайки предвид, че това ще ни даде нов възел, и след това ще
работа от този възел.
>> Така че, имайки предвид, че възел, ние сме отново ще разгледаме масива деца,
и ние отиваме да погледнем индекса нула да съответства на А в котка.
Така че след това ние ще отидем до този възел, и предвид това, че възел, отиваме
да погледнете индекса, който съответства Т. и да преминат към този възел,
Най-накрая, ние сме напълно погледна чрез нашата дума Cat, а сега Bool
Word е трябвало да посочи дали дадената дума всъщност е дума.
>> Така че, защо имаме нужда от този специален случай?
Е, какво ще стане ако катастрофа думата е в нашия речник, но
думата котката не е?
Така че в търсенето, за да видите, ако думата е котката в нашия речник, ние ще
успешно гледам през индексите C-A-T и да достигне един възел, но това е
само заради катастрофа се случи с създаде възли по пътя от C-A-T всички
чак до края на думата.
Така Bool Word се използва да посочи дали това определено място, всъщност
показва една дума.
>> Добре, така че сега, че ние знаем какво е Trie ще изглежда така, нека да разгледаме
на функцията Load.
Така Load ще се върне Bool за това дали ние успешно или
безуспешно се зарежда речник и това ще бъде речника
че искаме да се зареди.
Така че първото нещо, което ще направим е отворен нагоре, че речник за четене.
Ние трябва да сме сигурни, че не се провали, така че ако речника не беше
успешно отворен, той ще се върне Не, в този случай ние ще
върне False.
Но ако приемем, че тя успешно отвори, тогава ние действително могат да четат
чрез речника.
>> Така че първото нещо, което започваш да искате да направите, е да имаме тази
променлива корен глобален.
Сега, корен ще бъде звезда възел.
Тя е на върха на нашата Trie, че сме ще бъде итерации чрез.
Така че първото нещо, което ще искате да направите, е заделена памет за нашия корен.
>> Забележете, че ние сме с помощта на Calloc функция, която е по същество същата
тъй като функцията за изчистване, освен това е гарантирано да се върне нещо, което е
напълно на нула.
Така че, ако ние използвахме изчистване, ние ще трябва да мине през всички насоки в нашата
възел и се уверете, че всички те са нула.
Така Calloc ще направи това за нас.
>> Сега, точно като изчистване, ние трябва да се направи уверите, че разпределението е всъщност
успешно.
Ако това се връща нула, тогава можем Трябва да затворите нашия речник
подаде и да се върне False.
Така че, ако приемем, че разпределението е успешно, ние ще използваме един възел
звездни Cursor да превъртите чрез нашия Trie.
Така че нашият корен никога няма да се промени, но ние ще използваме Cursor да
действително отиде от възел до възел.
>> Добре, така че в този за линия, ние сме четене чрез файла на речника,
и ние сме с помощта на fgetc.
Така fgetc ще вземете една-единствена символ от файла.
Отиваме да продължи вземете символи, докато ние не достигат
края на файла, така че има два случая, които трябва да се справя.
Първият, ако характер не е нов ред, за да сме сигурни дали това е нова
линия, тогава ние сме на път да се премине към нова дума.
Но ако приемем, че не е на нов ред, а след това тук, ние искаме да разбера
индекс отиваме да индекс в в масива деца, които
разгледахме преди.
>> Така че, както казах и преди, ние трябва да специален случай апостроф.
Забележете, ние сме с помощта на третичния оператор тук, така че отиваме да се чете
това сякаш характера четем в е апостроф, след това отиваме да
определен индекс, равен на азбука минус 1, който ще бъде индекс 26.
Иначе, ако не беше апостроф, След това отиваме да зададете индекс
равна на с минус.
Така че не забравяйте обратно от предишна т. комплекти, в минус ще ни даде на
азбучен ред на С, така че ако C е буквата А, това ще
ни даде индекс нула.
За буквата Б, тя ще даде ни индекс 1, и така нататък.
>> Така че това ни дава индекса в Деца масив, който ние искаме.
Сега, ако този показател в момента е нула в масива деца, това означава, че
възел в момента не съществува от този път, така че ние трябва да се разпредели
възел за този път.
Това е, което правим тук.
Така че ние отиваме да, отново, използвайте Calloc функция, така че ние нямаме
до нула, за всички указатели, както и ние, отново, трябва да се провери, че Calloc
не се провали.
Ако Calloc се провали, тогава ние трябва да се разтоварят всичко, затворете ни
речник, и да се върне False.
>> Така че, ако се приеме, че той не се провали, след това това ще създаде ново дете за нас,
и след това ние ще отидем на това дете.
Нашата курсора ще обхождане свежда до това дете.
Сега, ако това не е нула, за да започнем с това, след курсора може просто да превъртите
свежда до това дете, без всъщност да се налага да заделят нищо.
Това е случаят, когато за първи път се е случило да се разпредели дума котката, и
това означава, че когато отидем да се разпределят катастрофа, ние не трябва да се създаде
възли за C-A-T отново.
Те вече съществува.
>> ОК, така че какво е това друго?
Това е състояние, при което е в наклонена черта н, където С е на нов ред.
Това означава, че ние имаме успешно завършен дума.
Сега, това, което искаме да правим, когато успешно завършено дума?
Ние ще използваме тази дума поле във вътрешността на нашата Struct възел.
>> Ние искаме да се създаде, че да True, така че показва, че този възел показва
Успешното дума действително дума.
Сега, задайте, че за да е истина.
Искаме да изчисти нашия курсора до точка в началото на TRIE отново.
И най-накрая, нарастване нашия речник размер, тъй като ние открихме друга дума.
>> Добре, така че ние ще продължим да правим че, четейки по характер от
характер, изграждане на нови възли в нашата Trie и за всяка дума в
речник, докато най-накрая достигне в се равнява на EOF, като в този случай, ние се прекъсне
от файла.
Сега, има два случая, при които бихме могли да са хит EOF.
Първият е, ако е имало грешка четене от файла, така че ако е имало
грешка, ние трябва да направим характерния разтоварят всичко, затворете файла,
върне False.
Ако приемем, че не е грешка, че просто означава, че ние всъщност се удари в края на
файла, като в този случай, ние затворете подаде и да се върнете вярно, тъй като ние
успешно зареден речника в нашата Trie.
>> Добре, сега нека проверите Проверка.
С поглед към Проверка на функцията, ще видим, Тази проверка ще се върне Bool.
Тя връща True, ако тази дума, че това е да се прехвърлят в наш Trie.
Тя връща False друго.
>> Така че как ще се определи дали тази дума е в нашата Trie?
Виждаме, че тук, точно както и преди, отиваме да използвате курсора, за да превъртате
чрез нашия Trie.
Сега, тук, ние отиваме да превъртите над цялата ни дума.
Така итерации върху думата ние сме преминал, отиваме да се определи
индекс в масива деца, които съответства на дума скоба аз.
Така че това ще изглежда точно като Load, където, ако думата скоба и е
апостроф, тогава искаме да използваме индекса азбука минус един, защото ние определихме
това е мястото, където отиваме да съхранява апострофи.
>> Иначе ние ще използваме tolower Думата скоба аз.
Така че не забравяйте, че думата може да има произволна капитализация, и така ние
искате да се уверите, че ние използваме с малки букви версия на нещата.
И след това се изважда от тази с малки букви а да, още веднъж, дай ни
азбучен ред от този характер.
Така че това ще бъде нашият форум в масива деца.
>> И сега, ако този индекс в Детския масив е нула, това означава, че ние
вече не може да продължи итерации надолу нашия Trie.
Ако това е така, тази дума не може да евентуално да бъде в нашия Trie, тъй като, ако го
са, това би означавало, че ще има път до тази дума, и бихте
никога не се сблъскате нищожна.
Така че се натъкват на нула, ние се върне False.
Думата не е в речника.
Ако не беше нула, след това отиваме да продължи итерации, така че ще
да актуализираме нашата курсора да посочи, че специално възел в този индекс.
>> Така че ние продължаваме да правим, че през цялата дума.
Ако приемем, че ние никога не удари нула, това означава, ние бяхме в състояние да пробият през целия
свят и да намерят възел в нашия Trie, но ние не сме съвсем свършила още.
Ние не искаме просто да се върне True.
Ние искаме да се върне курсора грешка дума тъй като, не забравяйте отново, ако котка не е
в нашия речник и е катастрофа, тогава ние успешно ще получите чрез
думата котката, но думата курсора ще бъде False и не е вярно.
Така че ние се върнете курсора дума за обозначаване дали този възел всъщност е дума,
и че това е за проверка.
>> Така че нека да се провери Size.
Така Size ще бъде доста лесно тъй като, не забравяйте, в Load, ние сме
увеличаване размера на речник за всяка дума, която се сблъскваме.
Така Size е просто ще се върне речник размер, и това е всичко.
>> Добре, така че накрая, имаме разтоварване.
Така разтоварване, отиваме да се използва рекурсивна функция действително да направим всичко
на работата за нас, така че нашата функция ще се нарича за разтоварване.
Какво е за разтоварване смяташ да правиш?
Виждаме тук, че за разтоварване ще се обхождане на всички деца в
този възел, и ако детето възел не е нула, а след това ние ще
разтоварят дете възел.
>> Така че това ще рекурсивно разтоварят всички наши деца.
След като ние сме сигурни, че всички наши деца са били разтоварени, тогава ние
да се освободим, така разтоварят бъдем себе си.
Така че това рекурсивно ще разтоварим Цялата Trie, а след това веднъж, че е
направено, ние можем просто да се върне True.
Разтоварете не може да се провали, ние сме просто освобождава неща.
Така че след като сме готови освобождавайки всичко, върнете True.
И това е всичко.
Моето име е Роб, и това е [недоловим].