>> રોબ બોડેન: હાય.
હું રોબ છું, અને ચાલો હેશ આ ઉપાય શોધી.
અહીં અમે અમલ રહ્યા છીએ એક સામાન્ય હેશ ટેબલ.
આપણે જોઈએ છીએ કે અમારા હેશ ના સ્ટ્રક્ટ નોડ કોષ્ટક આ જેમ દેખાય રહ્યું છે.
તેથી તે ચાર રચે શબ્દ હોય બનશે કદ લંબાઈ માટે વત્તા 1 એરે.
મહત્તમ થી 1 ભૂલી નથી શબ્દકોશમાંનાં શબ્દ 45 છે
અક્ષરો, અને પછી અમે જઈ રહ્યાં છો આ માટે એક વધારાની પાત્ર જરૂર
બેકસ્લેશ 0.
>> અને પછી દરેક અમારી હેશ કોષ્ટક ડોલ સંગ્રહ રહ્યું છે એક
ગાંઠો કડી થયેલ યાદી.
અમે અહીં ચકાસણી રેખીય કરી રહ્યા છીએ.
અને તેથી ક્રમમાં આગામી માટે લિંક ડોલમાં તત્વ, અમે જરૂર
સ્ટ્રક્ટ નોડ * આગામી.
જેથી નોડ શું લાગે છે.
હવે, અહીં જાહેરાત છે અમારા હેશ કોષ્ટક.
તે 16.384 ડોલથી હોય રહ્યા છે, પરંતુ કે જે નંબર ખરેખર તો કોઈ વાંધો નથી.
અને છેલ્લે, અમે હોય રહ્યા છીએ આ વૈશ્વિક ચલ hashtable_size, જે
0 તરીકે બોલ શરૂ થઈ રહ્યું છે, અને તે છે છે સાચવી રાખે રહ્યું કેટલા શબ્દો
અમારા શબ્દકોશ હતા.
અધિકાર છે.
>> તેથી આપણે લોડ પર એક નજર કરીએ.
જેથી લોડ નોટિસ, તે એક bool આપે છે.
તે સફળતાપૂર્વક તો તમે સાચું પરત અન્યથા લોડ અને ખોટા.
અને તે એક const ઘરનાં પરચૂરણ કામો * સ્ટાર છે શબ્દકોશમાંનાં છે શબ્દકોશ,
અમે ખોલવા માંગો છો.
જેથી પ્રથમ વાત છે અમે કરી રહ્યા છીએ.
અમે માટે શબ્દકોશમાં fopen રહ્યા છીએ વાંચન, અને અમે હોય રહ્યા છીએ
તે જો એમ હોય તો સફળ છે તેની ખાતરી કરવા તે NULL પરત, તો પછી અમે કર્યું
સફળતાપૂર્વક શબ્દકોશ ખોલો અને અમે ખોટા પરત કરવાની જરૂર છે.
>> પરંતુ તે સફળતાપૂર્વક કર્યું એમ ધારી રહ્યા છીએ ઓપન, તો પછી અમે પણ વાંચવી પાંચ
આપનું સ્વાગત છે.
અમે કેટલાક શોધવા સુધી તેથી રહ્યાં રાખવા આ બહાર ભંગ કારણ
અમે જોશો જે લૂપ.
તેથી રહ્યાં રાખવા, અને હવે અમે રહ્યા છીએ એક જ નોડ malloc છે.
અને અલબત્ત, અમે તપાસ ભૂલ જરૂર ફરીથી mallocing સફળ થઈ ન હતી, તેથી જો
અને અમે તે અમે કોઈ નોડ અનલોડ કરવા માંગો છો પહેલાં malloc માટે થયું, બંધ
શબ્દકોશ અને ખોટા આવો.
>> પરંતુ તે અવગણીને એમ ધારી રહ્યા છીએ અમે સફળ, તો પછી અમે fscanf ઉપયોગ કરવા માંગો છો
એક એક શબ્દ વાંચી અમારા અમારા નોડ શબ્દકોશ.
જેથી એન્ટ્રી> શબ્દ યાદ ઘરનાં પરચૂરણ કામો છે શબ્દ કદ લંબાઈ બફર વત્તા
અમે જઈ રહ્યાં છો કે જે એક સાઇન શબ્દ સંગ્રહ
તેથી fscanf 1 સુધી પાછા જઈ રહ્યું છે તે સફળતાપૂર્વક વાંચવામાં સક્ષમ હતી
ફાઇલમાંથી શબ્દ.
>> ભૂલ ક્યાં થાય છે અથવા અમે પહોંચી તો આ ફાઈલના અંતે, તે નહીં કરે
જો તેમ ન હોય તો કે જે કિસ્સામાં 1 પરત 1 પરત, અમે આખરે તોડી રહ્યા છીએ
આ વખતે લૂપ બહાર.
તેથી અમે જુઓ કે અમે સફળતાપૂર્વક છે એક વખત એક શબ્દ વાંચી
એન્ટ્રી> શબ્દ, તો પછી અમે હેશ રહ્યા છીએ અમારા હેશ વિધેય ઉપયોગ કરીને તે શબ્દ.
ખાતે એક નજર હેશ વિધેય.
>> તેથી જો તમે ખરેખર જરૂર નથી આ સમજવા માટે.
અને ખરેખર, અમે ફક્ત આ ખેંચાય ઇન્ટરનેટ પરથી કાર્ય હેશ.
તમે ઓળખી જરૂર આ જ વસ્તુ છે આ એક const ઘરનાં પરચૂરણ કામો * શબ્દ લે,
તેથી તે ઇનપુટ તરીકે શબ્દમાળા લેવા અને છે આઉટપુટ તરીકે પૂર્ણાંક સહી થયેલ નહિં પરત.
જેથી બધા હેશ વિધેય છે, તે છે ઇનપુટ લે છે, તો તે તમને એક આપે છે
હેશ કોષ્ટક માં ઇન્ડેક્સ.
અમે NUM_BUCKETS દ્વારા modding રહ્યાં છો નોંધ કરો કે જેથી હેશ કિંમત પરત
ખરેખર હેશ કોષ્ટક માં એક અનુક્રમણિકા છે અને કરે છે બહાર નથી અનુક્રમણિકા
એરે સીમાથી.
>> તેથી હેશ વિધેય, અમે જઈ રહ્યાં છો કે જે આપેલ એ જણાવે છે કે શબ્દ હેશ
શબ્દકોશમાં અને પછી અમે જઈ રહ્યાં છો કે વાપરવા માટે દાખલ કરવા માટે છે
હેશ કોષ્ટક પ્રવેશ.
હવે, hashtable હેશ વર્તમાન છે કડી હેશ કોષ્ટકમાં યાદી, અને
તે માત્ર NULL છે કે ખૂબ જ શક્ય છે.
અમે અમારા પ્રવેશ સામેલ કરવા માંગો છો આ યાદીની લિંક શરૂ, અને તેથી
અમે અમારી વર્તમાન પ્રવેશ હોય રહ્યા છીએ હાલમાં શું હેશ કોષ્ટક નિર્દેશ
પોઇન્ટ અને પછી અમે સ્ટોર રહ્યા છીએ હેશ પર હેશ કોષ્ટકમાં
વર્તમાન પ્રવેશ.
>> તેથી આ બે રેખાઓ સફળતાપૂર્વક દાખલ પાંચ શરૂઆતમાં પ્રવેશ
કે અનુક્રમણિકા પર કડી થયેલ યાદી હેશ કોષ્ટકમાં.
અમે તે પૂર્ણ કરી લીધું છે, એટલે હંમેશાં ખબર અમે અન્ય શબ્દ મળી કે
શબ્દકોશ અને અમે ફરી વધારો.
તેથી અમે કરી રાખવા કે fscanf સુધી આખરે પર બિન કંઈક 1 આપે છે
જે બિંદુએ અમે જરૂર યાદ રાખો કે મુક્ત પ્રવેશ, તેથી અહીં, અમે એક malloced
પ્રવેશ અને અમે કંઇક વાંચવા માટે પ્રયાસ કર્યો હતો શબ્દકોશમાં થી.
અને અમે સફળતાપૂર્વક વાંચી ન હતી શબ્દકોશમાં માંથી કંઈક જેમાં
કેસ અમે તે અમે પ્રવેશ મુક્ત કરવાની જરૂર છે વાસ્તવમાં હેશ ટેબલ મૂકવા ક્યારેય
અને છેલ્લે તૂટી જાય છે.
>> અમે ભંગ એકવાર, અમે, શું કરવાની જરૂર છે અમે કારણ કે ત્યાં ભંગ હતી
ભૂલ ફાઈલ માંથી વાંચવા, અથવા આવી હતી અમે પહોંચી કારણ કે અમે તોડી નહોતો
આ ફાઈલના અંતે?
કોઈ ભૂલ હતી, તો પછી અમે કરવા માંગો છો લોડ ન હતી કારણ કે ખોટા પરત
સફળ, અને આ પ્રક્રિયામાં, અમે કરવા માંગો છો એ જણાવે છે કે તમામ શબ્દો અનલોડ
અને સૌથી શબ્દકોશ ફાઈલ બંધ કરો.
અમે કરી ગઈ એમ ધારી રહ્યા છીએ, તો પછી અમે માત્ર હજુ શબ્દકોશમાં બંધ કરવાની જરૂર છે
ફાઇલ, અને છેલ્લે, કારણ સાચું પરત અમે સફળતાપૂર્વક લોડ કરેલા
આપનું સ્વાગત છે.
અને તે ભાર માટે છે.
>> તેથી હવે એક ભરેલી હેશ કોષ્ટક આપવામાં આવે છે, ચકાસણી, આ જેમ દેખાય રહ્યું છે.
તેથી, તે એક bool આપે છે, તપાસ જે સૂચવે છે કે શું રહ્યું છે
પસાર ઈન ઘરનાં પરચૂરણ કામો * શબ્દ, કે શું પસાર ઈન શબ્દમાળા અમારા શબ્દકોશ છે.
તે શબ્દકોશમાં છે તેથી, તે છે અમારા હેશ કોષ્ટકમાં, અમે આપશે
સાચું, અને જો તેમાં તે નથી, અમે ખોટા આપશે.
આ પસાર ઈન શબ્દ આપેલ છે, અમે છો શબ્દ હેશ રહ્યું.
>> હવે, ઓળખી એક મહત્વપૂર્ણ બાબત એ છે કે લોડ, અમે જાણતા હતા કે તે તમામ
શબ્દો નાના અક્ષરોમાં કરવા માટે જતાં હતા, પરંતુ અહીં, અમે જેથી ખાતરી નથી.
અમે અમારા હેશ વિધેય પર એક નજર તો ખરેખર અમારા હેશ વિધેય
દરેક અક્ષર lowercasing છે જો શબ્દના આ.
તેથી કે શું ના કેપિટલાઈઝેશનના શબ્દ અમારા હેશ વિધેય રહ્યું છે
ગમે તે માટે જ અનુક્રમણિકા પરત કેપિટલાઈઝેશન તે હશે છે
સંપૂર્ણપણે લોઅરકેસ માટે પરત જો શબ્દના આ આવૃત્તિ.
અધિકાર છે.
>> જેથી અમારી અનુક્રમણિકા છે.
આ શબ્દ માટે હેશ ટેબલ છે.
હવે, લૂપ માટે આ રહ્યું છે આ કડી થયેલ યાદી વધારે હતો,
કે કે અનુક્રમણિકા પર હતી.
તેથી અમે પ્રવેશ પ્રારંભ કરી રહ્યા છે નોટિસ કે ઇન્ડેક્સમાં નિર્દેશ.
અમે પ્રવેશ કરે છે, જ્યારે ચાલુ રહ્યા છીએ સમાન નલ, અને યાદ રાખો કે
અમારા સંલગ્ન યાદીમાં નિર્દેશક અપડેટ પ્રવેશ આગામી એન્ટ્રી> સમકક્ષ હોય છે, તેથી છે
આ માટે અમારી વર્તમાન પ્રવેશ બિંદુ કડી થયેલ યાદીમાં આગામી વસ્તુ.
અધિકાર છે.
>> તેથી કડી થયેલ યાદીમાં દરેક પ્રવેશ માટે, અમે strcasecmp ઉપયોગ જઈ રહ્યાં છો.
તે strcmp છે, કારણ કે એક વાર ફરી, અમે insensitively વસ્તુઓ કેસ કરવા માંગો છો.
તેથી અમે શબ્દ સરખાવવા strcasecmp ઉપયોગ કે આ કાર્ય માટે પસાર કરવામાં આવ્યો હતો
શબ્દ સામે કે આ પ્રવેશ છે.
તે 0 આપે છે, કે જે હતી અર્થ થાય છે અમે કરવા માંગો છો કે જે કિસ્સામાં એક મેચ,
સાચું આવો.
અમે સફળતાપૂર્વક મળી અમારા હેશ કોષ્ટકમાં શબ્દ.
>> એક મેળ ન હતી, તો પછી અમે છો ફરીથી લૂપ જવા અને જુઓ
આગામી પ્રવેશ.
અને અમે જ્યારે ત્યાં રહ્યાં ચાલુ રાખીશું આ કડી થયેલ યાદીમાં પ્રવેશો છે.
અમે તોડી તો શું થાય લૂપ માટે આ બહાર?
કે અમે પ્રવેશ મળ્યાં નથી અર્થ એ થાય કે જે કિસ્સામાં, આ શબ્દ સાથે મેળ ખાતી
અમે દર્શાવવા માટે ખોટા પરત કે અમારા હેશ કોષ્ટક આ શબ્દ છે ન હતી.
અને તે ચેક માટે છે.
અધિકાર છે.
>> તેથી આપણે માપ પર એક નજર કરીએ.
હવે, કદ ખૂબ સરળ હોઈ ચાલે છે કારણ કે દરેક શબ્દ માટે, ભાર યાદ
આપણે વૈશ્વિક વધે મળી ચલ hashtable_size.
તેથી માપ કાર્ય માત્ર છે કે વૈશ્વિક પરત ચાલી
ચલ, અને તે છે.
>> હવે છેલ્લે, અમે અનલોડ જરૂર શબ્દકોશ બધું થાય છે એક વાર.
તેથી અમે કેવી રીતે કે શું થઈ રહ્યું છે?
અહીં, અમે બધા પર રહ્યાં રહ્યાં છો અમારા હેશ ટેબલ buckets.
તેથી NUM_BUCKETS ડોલથી છે.
અને અમારા હેશ દરેક કડી થયેલ યાદી માટે ટેબલ, અમે પર લૂપ રહ્યા છીએ
આ યાદીની લિંક સમગ્ર દરેક તત્વ મુક્ત કરીને.
હવે, આપણે સાવચેત રહેવાની જરૂર છે, તેથી અહીં અમે કે કામચલાઉ ચલ છે
આગામી માટે નિર્દેશક સ્ટોર આ કડી થયેલ યાદીમાં તત્વ.
અને પછી અમે મુક્ત રહ્યા છીએ વર્તમાન ઘટક.
>> અમે આપણે થી આ કરવા માટે ખાતરી કરો કરવાની જરૂર છે માત્ર વર્તમાન તત્વ મુક્ત કરી શકો છો
અને પછી આગામી નિર્દેશક ઍક્સેસ કરવાનો પ્રયાસ કારણ કે એક વખત અમે તેને મુક્ત
મેમરી અમાન્ય બની જાય છે.
તેથી અમે માટે નિર્દેશક આસપાસ રાખવા જરૂર આગામી તત્વ, તો પછી અમે મુક્ત કરી શકો છો આ
વર્તમાન તત્વ, અને પછી અમે અપડેટ કરી શકો છો માટે નિર્દેશ અમારી વર્તમાન તત્વ
આગામી તત્વ.
>> અમે તત્વો લૂપ છે પડશે જ્યારે આ કડી થયેલ યાદી છે.
અમે તમામ કડી થયેલ યાદી છે કે કરીશ હેશ ટેબલ, અને અમે પૂર્ણ કરી એક વાર
કે સાથે, અમે સંપૂર્ણપણે લોડ કર્યું હેશ ટેબલ, અને અમે પૂર્ણ કરી લીધું.
તેથી તે અનલોડ માટે ક્યારેય અશક્ય છે ખોટા પાછા, અને અમે પૂર્ણ કરી લીધું છે, અમે
માત્ર સાચું આવો.