Роб BOWDEN: Здраво. Јас сум Роб, и хаш ајде ова решение надвор. Па еве ние ќе се спроведе општо хаш табелата. Можеме да видиме дека struct јазол на нашата хаш маса ќе изгледа вака. Па затоа се случува да имаат знак збор низа со должина од плус големина 1. Не заборавајте 1 од максималната збор во речникот е 45 знаци, а потоа ние ќе треба една дополнителна карактер за обратна коса црта 0. А потоа нашите хеш табелата во секоја кофа ќе се складира поврзана листа на јазли. Ние не правиме линеарни љубопитство тука. И така со цел да се поврзат со следниот елемент во кофа, потребен ни е struct јазол * следната. Значи тоа е она што еден јазол изгледа. Сега, тука е декларација на нашите хаш табелата. Тоа се случува да имаат 16.384 кофи, но дека бројот не е важно. И, конечно, ние ќе треба да имаат глобалната променлива hashtable_size, која се случува да започнете како 0, а тоа е ќе ги пратите на колку зборови беа во нашата речникот. Во ред е. Па ајде да ги разгледаме во товарот. Така забележите дека товарот, го враќа bool. Ќе се вратите точно ако тоа беше успешно натоварена и false. И е потребно const char * ѕвезда речник, кој е речник дека сакаме да се отвори. Па тоа е првото нешто ние ќе се направи. Ние ќе fopen речникот за читање, и ние ќе треба да имаат да бидете сигурни дека тоа успеа, па ако се врати NULL, тогаш ние не сме успешно да се отвори речникот и ние треба да се врати лажни. Но претпоставувајќи дека тоа го правеше успешно отвори, а потоа ние сакаме да го прочитате речникот. Значи имајте looping додека не се најде некој причина да се пробие на ова јамка која ќе видиме. Значи имајте looping, и сега ние ќе да Примерок еден јазол. И се разбира, ние треба да се грешка проверка повторно, па ако mallocing не успеа и ние сакаме да се исклучи било кој јазол дека ние се случи со Примерок пред, во близина на речник и да се врати лажни. Но игнорирањето тоа, претпоставувајќи дека успеа, тогаш сакаме да се користи fscanf да се прочита еден збор од нашиот речникот во нашите јазол. Па се сеќавам дека влез> збор е знак Зборот тампон должина големина плус оној што ние ќе треба да чување на зборот внатре Па fscanf се случува да се врати 1 онолку долго како што беше во состојба успешно да го прочита збор од датотека. Ако било грешка се случува или ќе стигнеме на крајот на датотеката, тоа нема да врати 1 во кој случај ако не е така врати 1, ние сме конечно ќе се скрши од ова додека јамка. Така можеме да видиме дека еднаш имаме успешно чита збор во влез-> зборот, тогаш ние ќе треба да хаш тој збор за користење на нашата хеш функција. Ајде да ги разгледаме во хаш функција. Така да навистина не треба да се разбере ова. А всушност, ние едноставно се повлече овој хаш функција од интернет. Единственото нешто што треба да се признае е дека ова се const char * зборот, па тоа е преземање на низа како влез и враќање на непотпишана int како излез. Па тоа е сите хеш функција е, тоа е зема во влез, тоа ви дава на индекс во хеш табелата. Забележете дека ние сме modding од NUM_BUCKETS па се врати на hash вредност всушност е индекс во хеш табелата и не индекс надвор од границите на низата. Па со оглед дека хаш функција, ние ќе да хаш зборот што читаме од речникот и тогаш ние ќе да ја користат таа има да го вметнете влегувањето во хеш табелата. Сега, hashtable хаш е моменталниот поврзани листата во хеш табелата, и тоа е многу можно дека е само NULL. Ние сакаме да го внесете нашиот влез на почетокот на овој поврзана листа, и така ние ќе имаме тековната влез укажуваат на она што хеш табелата во моментов поени да се, а потоа ние ќе се сместат во хеш табелата на хаш тековната влез. Значи овие две линии успешно вметнете влез на почетокот на поврзана листа на тој индекс во хеш табелата. Откако ќе завршиш со тоа, знаеме кои ние откривме друг збор во речник и ние прираст повторно. Па ние го задржи тоа го прават додека fscanf конечно се враќа нешто не 1 на која точка да се запамети дека ние треба да се слободен влез, па до тука, ние malloced на влез и се обидовме да прочитате нешто од речникот. И ние не успешно го прочитате нешто од речник во кој случај ние треба да се ослободи влезот дека ние всушност никогаш не се стави во хеш табелата и конечно се скрши. Откако ќе се пробие, ние треба да се види, добро, не ни се пробие затоа што има Се појави грешка при читањето од датотеката, или не ни се пробие затоа стигнавме на крајот на датотеката? Ако има грешка, тогаш ние сакаме да враќање false, бидејќи товарот не го успее, и во процесот, ние сакаме да бриши сите зборови, што го читаме во и во близина на речникот. Претпоставувајќи ние не успее, тогаш ние само уште треба да се затвори речникот датотека, и конечно се врати точно затоа ние сме успешно вчитан на речникот. И тоа е тоа за товарот. Па сега провери, со оглед натоварени хаш табелата, ќе изгледа вака. Па провери, го враќа bool, која ќе покаже дали помина во знак * збор, дали помина во низа е во наши речникот. Значи, ако тоа е во речникот, ако тоа е во нашата хаш табелата, ние ќе се врати вистина, и ако тоа не е, ние ќе се врати лажни. Имајќи го предвид ова помина во збор, ние сме ќе хаш на зборот. Сега, важна работа да се признае е дека во товарот, знаевме дека сите зборовите се случува да бидат пониски случај, но овде, ние не сме толку сигурни. Доколку ги разгледаме во нашата хеш функција, нашите хаш функција, всушност, е lowercasing секој карактер на зборот. Значи без оглед на капитализација на збор, нашата хаш функција ќе се врати на истиот индекс за без оглед на капитализација е тоа што ќе имаат врати за сосема мали верзија на зборот. Во ред е. Па тоа е нашиот индекс. Тоа е хеш табелата за овој збор. Сега, ова за телефонска линија ќе да над поврзаните листа кој беше во тој индекс. Така забележите ние сме иницијализацијата влез да се укаже на тој индекс. Ние ќе продолжиме додека влез не не се еднакви NULL, и се сеќавам дека ажурирање на покажувачот во нашата поврзана листа влез еднаква на влегување-> следната, така што имаат нашите сегашни влезна точка за Следната точка во поврзана листа. Во ред е. Значи за секој влез во поврзана листа, ние ќе го користите strcasecmp. Тоа не е StrCmp бидејќи уште еднаш, ние сакате да ги правите нештата случај буквите. Па ние ги користиме strcasecmp да се споредуваат зборот што беше донесен на оваа функција против зборот што во овој запис. Ако го враќа 0, тоа значи дека имало еден натпревар, во кој случај ние сакаме да врати вистина. Ние успешно се најде на збор во нашите хаш табелата. Ако не беше еден натпревар, тогаш ние сме ќе јамка повторно и се погледне на Следниот влез. И ние ќе продолжиме looping додека постојат се записи во оваа поврзани листа. Што се случува ако ние се скрши надвор од овој за телефонска линија? Тоа значи дека ние не најде запис дека одговараше овој збор, во кој случај ние се врати лажни за да се покаже дека нашите хеш табелата не содржи овој збор. И тоа е тоа за чек. Во ред е. Па ајде да ги разгледаме во големина. Сега, големината ќе биде прилично едноставна бидејќи се сеќавам во оптоварување, за секој збор најдовме ние зголемува глобалната променлива hashtable_size. Па големината функција е само ќе се вратат дека глобалното променлива, и тоа е тоа. Сега, конечно, ние треба да се вчита на речник еднаш сè е направено. Па, како ќе се дојде да го направите тоа? Токму тука, ние сме looping над сите кофи со нашите хаш табелата. Па така постојат NUM_BUCKETS кофи. И за секоја поврзана листа во нашата хаш маса, ние ќе јамка во текот на интегритет на поврзаните листа ослободување секој елемент. Сега, ние треба да се биде внимателен, па еве ние имаат привремена променлива тоа е чување на покажувачот на следната елемент во поврзана листа. А потоа ние ќе слободен тековниот елемент. Ние треба да бидеме сигурни дека ние го правиме ова, бидејќи ние не може само слободен тековниот елемент а потоа се обиде да пристапи на следната покажувачот бидејќи еднаш ние го ослободи меморија станува неважечка. Значи ние треба да се задржи околу покажувачот на следниот елемент, тогаш можеме да го ослободи тековниот елемент, а потоа можеме да се ажурира нашите сегашни елемент да се укаже на следниот елемент. Ќе јамка додека постојат елементи во овој поврзана листа. Ние ќе го направи тоа за сите поврзани листи во хеш табелата, и кога ќе завршиш со тоа, ние сме целосно истовари хеш табелата, и ние сме направиле. Така што е невозможно за истоварува да некогаш враќање false, и кога ќе завршиш, ние само врати вистина.