[Powered by Google Translate] [Walkthrough - પ્રોબ્લેમ 5 સમૂહ]
[Zamyla ચાન - હાર્વર્ડ યુનિવર્સિટી]
[આ CS50 છે. - CS50.TV]
>> અધિકાર છે. હેલો, દરેકને, અને 5 Walkthrough સ્વાગત છે.
>> Pset5 ખોટી જોડણી છે, જેમાં અમે જોડણી-પરીક્ષક બનાવવા આવશે.
સ્પેલ-ચેકર્સ અત્યંત મહત્વપૂર્ણ છે.
આ ક્યારેય તમે શું થયું?
તમે ખૂબ જ કામ કરે છે, ખૂબ સંઘર્ષ માટે એક કાગળ પર સંગ્રહ કરવો
અને પછી હજુ પણ અંત એક ડી અથવા ડી = જેમ ખૂબ ગ્લો rade મેળવવામાં
અને કારણ કે તમે વ્હેલ વ્યાપક શબ્દ માં liverwurst સ્પોઇલર છે બધા.
હા, તમારા મરી proofreading આ બાબત, તે અત્યંત કમજોરી છે.
આ એક સમસ્યા છે કે મેનલી, મેનલી વિદ્યાર્થીઓ અસર કરે છે.
હું એક વખત મારા sith ગ્રેડ અત્યાચાર દ્વારા કહેવામાં આવ્યું કે હું એક સારા સાથી માં ક્યારેય વિચાર કરશે.
અને તે તમામ હું ક્યારેય માગતા હતા, કે કોઇ પણ તમામ બાળક મારી ઉંમર અંતે માંગે છે,
ફક્ત એક સારી સહ - કાર્યકર પ્રવેશ મેળવવા માટે.
અને માત્ર કોઇ સહ - કાર્યકર નથી. નંબર મેં એક આઇવરી કાનૂની સાથી પર જાઓ માગતા હતા.
તેથી જો હું સુધાર ન હતી, ગઇ હાર્વર્ડ જવા મારા સપના હશે,
Jale, અથવા જેલ - તમે જાણતા જેલ માં, ન્યૂ જર્સી.
તેથી હું મારી જાતને જોડણી-ચેકર મળ્યું.
કે મારા એક પ્રિય બોલાતી શબ્દ કલાકારો, ટેલર માલી પાસેથી થોડી ટૂંકસાર છે.
શું છે, તેઓ કહે છે, એક જોડણી-પરીક્ષક કર્યા મહત્વ ખૂબ જ મહત્વપૂર્ણ છે.
>> તેથી 5 Walkthrough સ્વાગત છે, જેમાં અમે pset5 વિશે વાત કરવામાં આવશે: ખોટી જોડણી,
જેમાં અમે અમારી પોતાની જોડણી-પરીક્ષક બનાવવા આવશે.
આ સપ્તાહ માટે શોધો, વિતરણ કોડ માટે મહત્વપૂર્ણ બનવા માટે જોવા રહ્યું છે
માત્ર વિવિધ કાર્યો કે જે તમારી શબ્દકોશ હોય રહ્યું છે તે સમજવા માટે.
અમે ખરેખર ઘણી. કેચ ફાઈલો છે કે જે એકસાથે અમારા pset બનાવવા કરવામાં જઈ રહ્યાં છો.
અને તેથી વિવિધ પાસાઓ દ્વારા શોધી, તેમ છતાં અમે ખરેખર નથી સંપાદિત કરી રહ્યા છો
ફાઈલોની, એક speller.c, એ જાણીને તેને કેવી રીતે dictionary.c સંબંધમાં સાથે કામ કરે છે,
જે અમે લખી હશે, માટે ખૂબ મહત્વપૂર્ણ પ્રયત્ન રહ્યું છે.
આ pset સ્પેક પણ ઉપયોગી ઘણી માહિતી સમાવે છે
વસ્તુઓ શરતો છે કે જે તમને ધારણ કરી શકે છે, તે જેવા નિયમો અને વસ્તુઓ,
તેથી ટીપ્સ માટે pset સ્પેક ધ્યાનથી વાંચો ખાતરી કરો.
અને જ્યારે કે નિયમ કંઈક ની શંકા હોય, તો પછી હંમેશા pset સ્પેક નો સંદર્ભ લો
ચર્ચા કરો અથવા.
આ pset માટે પોઇન્ટર પર ભારે આધાર રાખે રહ્યું છે,
તેથી અમે ખાતરી કરવા માટે કે અમે ઉમેરીને તારાઓ વચ્ચે તફાવત સમજી બનાવવા માંગો છો
આ નિર્દેશક નામ અને ampersands, કેવી રીતે તેને મુક્ત કરવા માટે, વગેરે સામે
તેથી પોઇંટરો એક મુખ્ય હોવાથી આ સમસ્યા સેટ ખૂબ મદદરૂપ થઈ રહ્યું છે.
અમે સંલગ્ન યાદીઓ એક બીટ વધુ જોવા જઈ રહ્યાં છો,
જ્યાં અમે તત્વો હોય છે કે અમે નોડ કે જે બંને તેમજ નિર્દેશક કિંમત હોય કૉલ
બીજા ગાંઠ છે, અને તેથી અનિવાર્યપણે જુદા જુદા તત્વો એક અન્ય બાદ જોડે છે.
તમારા વાસ્તવિક શબ્દકોશ અમલમાં થોડા અલગ વિકલ્પો છે.
અમે બે મુખ્ય પદ્ધતિઓ છે, કે જે હેશ કોષ્ટકો છે અને પછી પ્રયાસ કરે છે તપાસ જઈ રહ્યાં છો.
તે બંને માં, તેમણે એક કડી થયેલ યાદી ખ્યાલ અમુક પ્રકારના સમાવેશ થાય છે
જ્યાં તમે તત્વો એક બીજા સાથે કડી થયેલ છે.
અને તેથી અમે જોશે કે તમે કેવી રીતે કડી થયેલ છે યાદીઓ આસપાસ કામ કરવાનો હોઇ શકે જઈ રહ્યાં છો,
તેમને બનાવવા, કેવી રીતે દ્રષ્ટિએ નેવિગેટ કરો, ઉદાહરણ તરીકે, એક નોડ સામેલ
અથવા મફત તેમજ ગાંઠો હોય.
મુક્ત ગાંઠો દ્રષ્ટિએ, તે ખરેખર મહત્વનું છે
કે જ્યારેપણ અમે malloc મેમરી, પછીથી અમે તેને મુક્ત.
તેથી અમે ખાતરી કરો કે કોઈ નિર્દેશક unfreed જાય બનાવવા માંગો છો, કે જે આપણે કોઇ મેમરી લીક્સ નથી.
અમે Valgrind કહેવાય સાધન છે કે જે તમારા કાર્યક્રમ ચાલે દાખલ જઈ રહ્યાં છો
અને બધી મેમરીનો કે તમે ફાળવવામાં કે શું ચકાસે પછી મુક્ત છે.
તમારા pset ત્યારે જ કાર્ય કરે છે તે પૂર્ણ થાય છે અને તે પૂર્ણ કાર્યક્ષમતા ધરાવે છે,
પણ, Valgrind તમને કહે છે કે તમે કોઈપણ મેમરી લીક્સ મળ્યા નથી.
છેલ્લે, આ pset માટે, હું ખરેખર ભાર માંગો છો -
હું તેનો અર્થ, હંમેશની જેમ, હું નિશ્ચિતપણે તમારી સમસ્યા સમૂહો માટે પેન અને કાગળ મદદથી એક ટેકેદાર છું,
પરંતુ આ એક છે, મને લાગે છે કે પેન અને કાગળ માટે ખાસ કરીને મહત્વનું છે રહ્યું છે
જ્યારે તમે તીર વસ્તુઓ માટે ચિત્રકામ કરી અને સમજવા કેવી રીતે વસ્તુઓ કામ કરવા માંગો છો.
તેથી નિશ્ચિતપણે પેન અને કાગળ વાપરવા માટે વસ્તુઓ દોરવા બહાર તે પહેલાં તમે કોડિંગ મળશે પ્રયાસ
કારણ કે તે એક બીટ અવ્યવસ્થિત વિચાર કરી શકે છે.
>> પ્રથમ, ચાલો સંલગ્ન યાદીઓ એક બીટ જાઓ.
લિંક કરેલા યાદીઓ ગાંઠો, જ્યાં દરેક નોડ તેની સાથે સંકળાયેલ મૂલ્ય છે સમાવે છે,
તેમજ તે પછી બીજા ગાંઠ પર એક નિર્દેશક.
લિંક કરેલા યાદીઓ સાથે મહત્વની બાબતો એક દંપતી છે કે અમે યાદ કરવાની જરૂર છે
જ્યાં અમારી પ્રથમ નોડ છે, અને પછી એક વાર અમે જાણીએ છીએ કે જ્યાં પ્રથમ નોડ છે,
કે રીતે આપણે નોડ ઍક્સેસ કરી શકો છો કે જે પ્રથમ નોડ પોઇન્ટ
અને પછી તે પછી એક અને તે પછી એક.
અને પછી તમારી સાથે લિંક યાદી છેલ્લા તત્વ કે નોડ નિર્દેશક છે
છે હંમેશા માટે નલ નિર્દેશ જઈ રહી છે.
જ્યારે નોડ પોઇન્ટ નલ, પછી તમે જાણો છો કે તમે યાદીમાંથી ઓવરને પહોંચી ગયા છો,
કે જે નોડ છેલ્લા એક છે, કે એ પછી કશું જ નથી.
આ યોજનાકીય અહીં, તમે જુઓ કે તીર પોઇન્ટર છે,
અને વાદળી વિભાગમાં જ્યાં કિંમત સંગ્રહિત છે,
અને પછી તે નિર્દેશક સાથે લાલ બોક્સ જે નોડ નિર્દેશક છે
તેના પછી બીજા ગાંઠ તરફ સંકેત આપતા.
અને તમે અહીં જુઓ, જેથી ડી નોડ માટે નલ નિર્દેશ કારણ કે તે યાદી છેલ્લા તત્વ આવે છે.
>> ચાલો અમે કેવી રીતે નોડ માટે સ્ટ્રક્ટ વ્યાખ્યાયિત કરી શકે છે જુઓ.
અને ત્યારથી અમે ઘણા નોડો માંગો છો,
આ એક typedef સ્ટ્રક્ટ બની રહ્યું છે
જેમાં અમે ગાંઠો અનેક જુદા જુદા ઘટકોને હોય રહ્યા છીએ.
અને તેથી અમે તેને નવા દશાંશ માહિતી પ્રકાર તરીકે વ્યાખ્યાયિત કરે છે.
અહીં, અમે typedef સ્ટ્રક્ટ નોડ છે.
આ ઉદાહરણમાં, અમે પૂર્ણાંક ગાંઠો સાથે કામ કરીએ છીએ,
તેથી અમે પૂર્ણાંક કિંમત નામ આપવામાં આવ્યું હોય છે અને તે પછી અમે અન્ય નિર્દેશક હોય છે,
અને આ કિસ્સામાં, તે નોડ માટે નિર્દેશક છે, તેથી અમે એક સ્ટ્રક્ટ નોડ * આગામી કહેવાય છે.
અને પછી અમે આ સમગ્ર બાબત નોડ કૉલ કરી રહ્યાં છો.
ખાતરી કરો કે તમે આ વાક્યરચના પાલન કરો.
નોટિસ નોડ વાસ્તવમાં ઉપર છે અપ તરીકે તરીકે સર્પાકાર કૌંસ બરાબર નીચે સંદર્ભ છે.
પછી ટ્રેક રાખવા માટે જ્યાં મારી પ્રથમ નોડ આ સંલગ્ન યાદીમાં છે,
પછી હું નોડ વડા તરીકે ઓળખાય નિર્દેશક હોય છે, અને મને એક નોડ માપ માટે malloc પૂરતી જગ્યા.
સૂચના, તેમ છતાં, વડા ખરેખર નોડ નિર્દેશક તરીકે વાસ્તવિક નોડ પોતે વિરોધ છે.
તેથી વડા ખરેખર કોઇ કિંમત નથી,
તે માત્ર જે મારી સાથે લિંક યાદીમાં પ્રથમ નોડ છે નિર્દેશ કરે છે.
>> સાથે કડી યાદીઓ સારી સૂઝ મેળવવા માટે, કારણ કે તે ખૂબ જ મહત્વપૂર્ણ છે
ખાતરી કરવા માટે કે જે તમે સાંકળ જાળવી બનાવવા ટ્રેક રાખવા માટે,
હું તેને લાગે છે માંગતા તરીકે રેખા લોકો હાથ હોલ્ડિંગ,
દરેક વ્યક્તિ આગામી એક સાથે હાથ જ્યાં હોલ્ડિંગ છે.
તમે આ ચિત્ર જોઈ, પરંતુ મૂળભૂત રીતે તેઓ આગામી વ્યક્તિ તરફ ઇશારો કરી શકો છો
કે તેમના સાંકળ છે.
અને તેથી જો તમે સંલગ્ન યાદી જ્યાં આ લોકો પસાર કરવા માંગો છો -
તે બધા લોકોને કલ્પના તેમની સાથે સંકળાયેલ કિંમતો છે
અને પણ લીટી માં આગામી વ્યક્તિ માટે નિર્દેશ -
જો તમે સંલગ્ન યાદી પસાર કરવા માંગો છો, ઉદાહરણ માટે, ક્યાં કિંમતો ફેરફાર કરવા માટે
અથવા જેમ કિંમત કંઈક માટે શોધ અથવા,
પછી તમે ચોક્કસ વ્યક્તિ માટે નિર્દેશક માંગો છો પડશે.
તેથી અમે એ માહિતી પ્રકાર નોડ નિર્દેશક હોય રહ્યા છીએ.
આ ઉદાહરણ તરીકે, ચાલો તે કર્સર કૉલ કરો.
અન્ય સામાન્ય આ નામ રીતે iterator અથવા તે કંઈક હશે
કારણ કે તે ઉપર વારો છે અને વાસ્તવમાં ખસેડવાની નોડ કે જે તેને તરફ ઇશારો કરે છે.
આ અહીં અમારા કર્સર હશે.
અમારા કર્સર પ્રથમ અમારી યાદીમાં પ્રથમ તત્વ માટે નિર્દેશ કરશે.
અને તેથી અમે કરવા માંગો છો શું છે અમે મૂળભૂત કર્સર ચાલુ રાખવામાં આવે છે,
તે બાજુ માંથી બાજુ ખસેડી.
આ કિસ્સામાં, અમે તેને યાદીમાં આગામી તત્વ ખસેડવા માંગો છો.
સંગ્રહ સાથે, અમે શું થશે શું છે અમે કહી અમે 1 દ્વારા ઇન્ડેક્સ વધારો કરશે.
આ કિસ્સામાં, અમે જરૂર પડે છે ખરેખર શું શોધી છે જે વ્યક્તિ આ વર્તમાન વ્યક્તિ તરફ ઇશારો છે,
અને તે માટે આગામી કિંમત જ હશે.
તેથી જો કર્સર માત્ર એક નોડ નિર્દેશક હોય, તો પછી આપણે શું કરવા માંગો છો
અમે કિંમત મેળવવા કે કર્સર પોઇન્ટ છે કરવા માંગો છો.
અમે તે નોડ મેળવવા અને પછી, એક વખત અમે તે નોડ પર છો, શોધો જ્યાં તે પોઇન્ટ છે કરવા માંગો છો.
માટે વાસ્તવિક નોડ કે જે કર્સર પોઇન્ટ છે વિચાર,
સામાન્ય રીતે અમે તેને દ્વારા (* કર્સર) દર્શાવે છે.
કે તમે વાસ્તવિક નોડ કે જે કર્સર પોઇન્ટ છે આપતા.
અને પછી તે પછી, અમે કરવા માંગો છો શું છે અમે ઍક્સેસ કરવા માંગો છો
ગમે કે નોડ આગામી કિંમત છે.
આમ કરવા માટે કે, સ્ટ્રક્ટ ની અંદર કિંમતો ઍક્સેસ કરવા માટે, અમે કોઈ ઓપરેટર છે.
તેથી પછી તે (* કર્સર) હોઇ આગામી. કરશે.
પરંતુ આ * કર્સર આસપાસ કૌંસ કર્યા દ્રષ્ટિએ થોડી અવ્યવસ્થિત હોય છે,
અને તેથી અમે કર્સર-> સાથે આ સમગ્ર નિવેદન બદલો.
આ એક છે અને પછી એક કરતા વધારે સાઇન આડંબર છે, તેથી એક તીર બનાવે છે.
કર્સર-> આગામી.
કે ખરેખર તમે નોડ મળશે કે કર્સર નિર્દેશ કરે છે. કિંમત છે કે આગામી એક છે.
તેથી બદલે તારો અને કોઈ રહી, તમે એક તીર સાથે બદલી રહ્યાં છો.
ખૂબ ખાતરી કરો કે તમે આ વાક્યરચના વાપરે પ્રયાસ કરો ખૂબ કાળજી રાખો.
>> હવે અમે અમારા કર્સર હોય, જો અમે કિંમત ઍક્સેસ કરવા માંગો છો,
પહેલાં, અમે કર્સર-> આગામી હતી,
પરંતુ ગાંઠ પર મૂલ્ય કે કર્સર પોઇન્ટ છે ઍક્સેસ કરવા માટે, અમે ફક્ત કહેવું
નોડ-> મૂલ્ય.
ત્યાંથી, તે માહિતી પ્રકારની છે ગમે અમે કિંમતો અને પ્રયત્ન ગાંઠો વ્યાખ્યાયિત કર્યું છે.
જો તે પૂર્ણાંક નોડ છે, પછી કર્સર-> કિંમત માત્ર પૂર્ણાંક હોવો રહ્યું છે.
તેથી અમે તે પર કામગીરી કરી શકે છે, equalities તપાસ, તે અલગ અલગ કિંમતો, વગેરે સોંપી
પછી જેથી તમે શું કરવા માંગો છો જો તમે આગલા વ્યક્તિ તમારા કર્સરને ખસેડવા માંગો છો,
તમે ખરેખર કર્સર કિંમત બદલો.
ત્યારથી કર્સર નોડ નિર્દેશક છે, તો તમે વાસ્તવિક નિર્દેશક સરનામું બદલવા
તમારા યાદીમાં આગામી નોડને સરનામા માટે.
આ માત્ર કેટલાક કોડ જ્યાં તમે ફરી વળવું શકે છે.
, જ્યાં હું પાસે ટિપ્પણી કંઈક
કે જ્યાં તમે કદાચ કિંમત ઍક્સેસ જઈ રહ્યાં છો
અથવા જે ચોક્કસ નોડ સાથે કરી કંઈક.
તેને શરૂ કરવા માટે આ બોલ પર, હું કહે છે કે મારા કર્સર શરૂઆતમાં
છે યાદીની લિંક પ્રથમ તત્વ માટે નિર્દેશ જઈ રહી છે.
અને તેથી અપ આગળ, હું તે નોડ વડા તરીકે વ્યાખ્યાયિત થયેલ છે.
>> હું પહેલા ઉલ્લેખ થયો છે, મુક્ત કરીને ખરેખર મહત્વપૂર્ણ છે.
તમે ખાતરી કરો કે તમે યાદીમાં દરેક તત્વ મુક્ત એકવાર તમે તેની સાથે પૂર્ણ કરી લો છો બનાવવા માંગો છો.
જ્યારે તમે તે પોઇંટરો કોઈપણ હવે સંદર્ભ જરૂર નથી,
તમે ખાતરી કરો કે તમે તે પોઇંટરો તમામ મુક્ત બનાવવા માંગો છો.
પરંતુ તમે ખૂબ કાળજી રાખો અહીં માંગો છો કે તમે કોઈપણ મેમરી લીક્સ ટાળવા માંગો.
અકાળે તમે મફત એક વ્યક્તિ જો, પછી પોઇંટરો બધી છે કે જે આ નોડ પોઇન્ટ
છે ખોવાઈ જવાનું.
આ વ્યક્તિ ઉદાહરણ પર પાછા જવું તે થોડી વધુ ઊંચા હિસ્સો બનાવે છે,
ચાલો આ લોકોને આ કિસ્સામાં તેઓ મોન્સ્ટર સાથે તળાવ પર હોવર છે, અપવાદરૂપે છે.
અમે ખાતરી કરવા માટે કે જ્યારે પણ અમે મુક્ત, અમે ગુમાવી નથી બનાવવા માંગો છો
દો અને કોઈપણ ગાંઠો પહેલા અમે ખરેખર તેમને મુક્ત કરી દીધું છે.
હમણાં પૂરતું, જો તમે માત્ર આ વ્યક્તિ પર મુક્ત અહીં કહી હતી,
પછી તેમણે મુક્ત થઇ જશે, પણ પછી આ ગાય્સ તમામ પછી ખોવાઇ જશે
અને તેઓ આ બોલ પર લક્ષ્ય અને નીચે જશે.
તેથી અમે ખાતરી કરો કે તેના બદલે, અમે બાકીના એક લિંક જાળવવા માંગો છો બનાવવા માંગો છો.
અમારા વડા નિર્દેશક, કે જે યાદીમાં પ્રથમ તત્વ નિર્દેશ કરે છે.
તે પ્રથમ વ્યક્તિ લાંગર્યું દોરડું જેવા પ્રકારની છે.
તમે શું કરવા માંગો છો જ્યારે તમે મુક્ત શકે યાદી હોય છે -
જો તમે પ્રથમ તત્વ પ્રથમ મુક્ત કરવા માંગો છો, તો પછી તમે કામચલાઉ નિર્દેશક હોઈ શકે છે
કે પોઇન્ટ ગમે તે પ્રથમ તત્વ છે.
જેથી તમે તમારા કામચલાઉ નિર્દેશક અહીં પોઇન્ટ ધરાવે છે.
તે રીતે, અમે પ્રથમ નોડ એક પકડ ધરાવે છે.
અને પછી, અમે ત્યારથી ખબર છે કે પ્રથમ નોડ માટે મુક્ત થઇ રહ્યું છે,
પછી અમે આ દોરડું, આ એન્કર, અમારા વડા ખસેડી શકો છો,
ખરેખર ગમે તે પ્રથમ એક પોઇન્ટ હોય છે નિર્દેશ કરે છે.
તેથી આ વડા ખરેખર બીજી તત્વ હવે નિર્દેશ કરે છે.
હવે અમે મુક્ત ગમે કામચલાઉ નોકર માં સંગ્રહાય છે જ મંજૂરી છે,
અને તેથી અમે તેને અમારા યાદીમાં અન્ય ગાંઠો તમામ endangering વગર કે ભૂંસી શકાય છે.
બીજી રીતે કે તમે આ કરી શકે હોઈ શકે છે
દર વખતે તમે ફક્ત યાદી છેલ્લા તત્વ મુક્ત
કારણ કે તેઓ ખાતરી આપી રહ્યાં છો કંઈપણ કરવા માટે નથી નિર્દેશ કરવામાં આવે છે.
તેથી તમે ફક્ત આ એક છે, પછી મફત આ એક છે, પછી મફત આ એક મુક્ત કરી શકે છે.
કે ચોક્કસપણે કામ કરે છે પરંતુ કારણ કે સંકળાયેલા યાદીઓની પ્રકૃતિ દ્વારા, થોડી ધીમી છે
અમે ફક્ત છેલ્લા એક તરત જ ન બાંધી શકે છે.
અમે કડી થયેલ યાદી દરેક તત્વ પસાર છે
અને કે કેમ તેની તપાસ કે જે એક નલ પોઇન્ટ છે, દર વખતે તે ચકાસવા માટે,
અને પછી એક વાર અમે ઓવરને પહોંચે છે, તો પછી તે મફત.
જો તમે આ પ્રક્રિયા કરી રહ્યા હતા, તમે ખરેખર અહીં ચકાસણી આવશે,
અહીં ચકાસીને, પછી અહીં ચકાસીને, તે મુક્ત કરીને,
પછી પાછા જવાનું, અહીં ચકાસીને, અહીં ચકાસીને, તે મુક્ત કરીને,
અહીં ચકાસણી, અને પછી તેને મુક્ત કરીને.
કે થોડી વધુ સમય લે છે. યાહ.
>> [વિદ્યાર્થી] શક્ય હોઈ કડી થયેલ યાદી છે કે જે ઓવરને માટે બહાર નીકળો નિર્દેશક સંગ્રહે બનાવવા માંગો છો?
કે ચોક્કસપણે શક્ય છે.
આ પ્રશ્નના પુનરાવર્તન, તે શક્ય છે યાદીની લિંક માળખું ધરાવે છે
જેમ કે તમે એક કડી થયેલ યાદી અંતે પોઇન્ટ નિર્દેશક છે?
હું કે શક્ય છે જેમ કે, અને છો તે દરેક સમયે તમે તમારા કડી થયેલ યાદી માં કંઈક દાખલ કરો
તમે તે અને કે નિર્દેશક વસ્તુઓ સુધારવા પડશે.
તમે હમણાં માટે નોડ * પૂંછડી હોય.
પરંતુ જ્યારે તમે આ સુવિધાને અમલમાં કરી રહ્યાં છો, તો તમે વેપાર ન લાગે છે,
ગમે કેટલી વખત હું આ બોલ વારો આવશે જાઉં છું,
કેવી રીતે મુશ્કેલ તે માટે પૂંછડી ટ્રેક તેમજ વડા રાખવા પ્રયત્ન રહ્યું છે
તેમજ મારા iterator, અને તે જેવી વસ્તુઓ છે.
કે કરે છે -? >> [વિદ્યાર્થી] યાહ.
શક્ય છે, પરંતુ ડિઝાઇન નિર્ણયો દ્રષ્ટિએ, તો તમે વિકલ્પો તોલવું છે.
>> અહીં કોડ એક હાડપિંજર કે તમે કડી થયેલ યાદી દરેક તત્વ મુક્ત કરવા માટે પરવાનગી આપે જશે.
ફરીથી, કારણ હું સંકળાયેલી યાદી પર વારો છું, હું કર્સરને કેટલાક પ્રકારની માંગો છો જાઉં છું
અથવા iterator.
અમે ત્યાં સુધી કર્સર NULL છે વારો આવે છે.
તમે ફરી વળવું જ્યારે તમારું કર્સર NULL છે નથી માંગતા
કારણ કે તે અર્થ એ થાય કે ત્યાં યાદીમાં કંઈપણ નથી.
તેથી તે પછી અહીં હું એક કામચલાઉ નોડ * બનાવવા
હું શું ધ્યાનમાં છું તરફ મારું યાદી પ્રથમ છે,
અને પછી હું મારા કર્સર 1 આગળ અને પછી મફત ગમે હું કામચલાઉ સંગ્રહ હતી ખસેડો.
>> હવે અમે સંલગ્ન યાદીઓ માં દાખલ કરવા માટે આવે છે.
હું મારા સંલગ્ન યાદીમાં ત્રણ ગાંઠો હોય છે, અને આપણે સરળ કેસ સાથે જાઓ
જ્યાં અમે અમારા યાદીની લિંક ઓવરને અંતે અન્ય નોડ સામેલ કરવા માંગો છો.
કે કરવા માટે, બધા અમે જશે અમે પસાર થશે
શોધવા જ્યાં કડી થયેલ યાદીમાં વર્તમાન અંત છે, જેથી નોડ જે માટે નલ પોઇન્ટ છે -
કે આ એક છે -
અને પછી કહે, ખરેખર, આ એક એ છેલ્લા નોડ નથી રહ્યું છે;
અમે ખરેખર બીજી એક હોય રહ્યા છીએ.
તેથી અમે ગમે અમે દાખલ કરી રહ્યાં છે આ વર્તમાન એક બિંદુ હોય.
તેથી હવે આ લાલ વ્યક્તિ અહીં કડી થયેલ યાદી છેલ્લા નોડ બની જાય છે.
અને તેથી યાદીની લિંક છેલ્લા નોડને લાક્ષણિકતા તે છે કે તે નલ નિર્દેશ કરે છે.
તેથી તો અમે કરવા પડશે આ શું લાલ વ્યક્તિ નિર્દેશક સુયોજિત કરવા માટે નલ છે. ત્યાં.
>> પરંતુ જો આપણે બીજા અને ત્રીજા એક વચ્ચે એક નોડ દાખલ કરવા ઈચ્છતા?
કે એક તદ્દન તરીકે સરળ કારણ કે અમે ખાતરી કરવા માંગો છો નથી
કે અમે નથી દો અમારી સાથે લિંક યાદી કોઈપણ ગાંઠની જાઓ.
અમે શું હશે શું ખાતરી કરો કે આપણે આપણી જાતને દરેક એક માટે ANCHOR બનાવવાનો છે.
ઉદાહરણ માટે, આ બીજા એક કૉલ દો.
જો તમે કહ્યું હતું કે બીજા એક હવે આ એક નવી નિર્દેશ
અને તમે માત્ર એક નિર્દેશક ત્યાં કર્યો હતો, પછી તે આ વ્યક્તિ ગુમ થઈ પરિણમી
કારણ કે ત્યાં તેમને કોઇ કડી નથી.
તેના બદલે - હું આ ફરી દોરવા પડશે. મારા કલાત્મક ક્ષમતાઓ ક્ષમાપાત્ર.
અમે જાણીએ છીએ કે અમે હમણાં જ એક નવી ન સીધી 2 લિંક કરી શકો છો.
અમે ખાતરી કરવા માટે કે અમે છેલ્લા એક ને પકડી બનાવવા હોય છે.
અમે કરવા માંગો છો શકે શું કામચલાઉ નિર્દેશક હોય છે
તત્વ કે જે પર ઉમેરાયું કરી રહ્યું છે તે માટે.
તેથી તો અમે કામચલાઉ નિર્દેશક ત્યાં હોય છે.
, કારણ આપણે જાણીએ છીએ કે આ તૃતીય એક રહી છે ટ્રેક રાખી
2 હવે અમારી નવી એક લિંક કરી શકો છો.
અને જો આ નવા લાલ વ્યક્તિ માટે પ્રયત્ન 2 અને 3 માં વચ્ચે રહ્યું છે,
પછી કે વ્યક્તિ નિર્દેશક શું કરવા માટે નિર્દેશ રહ્યું છે? >> [વિદ્યાર્થી] ટેમ્પ.
ટેમ્પ. યાહ.
તેથી પછી આ લાલ વ્યક્તિ પછીના મૂલ્ય temp પ્રયત્ન રહ્યું છે.
જ્યારે તમે સંલગ્ન યાદીઓ માં દાખલ કરી રહ્યા છો, અમે જોયું છે કે અમે કરી શકે
સરળતાથી કામચલાઉ એરે બનાવીને ઓવરને કંઈક ઉમેરવા માટે,
અથવા જો અમે અમારા એરે મધ્યમાં માં કંઈક ઉમેરવા માગતા હતા,
પછી તેને થોડી વધારે લઇ લો આસપાસ shuffling કરશે.
જો તમે કરવા માંગો છો, ઉદાહરણ તરીકે, એક છટણી સંલગ્ન યાદી હોય છે,
પછી તમે પ્રકારની હોય છે કે જે ખર્ચ અને લાભો તોલવું
કારણ કે જો તમે છટણી એરે માંગો છો, કે જે દરેક સમય કે તમે તેને દાખલ થાય છે,
તે થોડી વધારે સમય લાગી રહ્યું છે.
જોકે, જો તમે પાછળથી માંગો છો, કારણ કે અમે મળશે અમે માંગો છો કરશે,
એક કડી થયેલ યાદી મારફતે શોધ, પછી તેને સરળ હોઈ શકે જો તમને ખબર હોય કે બધું ક્રમમાં છે શકે છે.
તેથી તમે જે ખર્ચ અને લાભો તોલવું શકો છો.
>> બીજી યાદીની લિંક દાખલ રીત યાદી ખૂબ જ શરૂઆત દાખલ છે.
જો અમે અમારી એન્કર અહીં દોરે - આ અમારા વડા છે -
અને પછી આ લોકો તેને સાથે કડી થયેલ છે,
અને પછી અમે એક નવી શરૂઆત દાખલ કરી નોડ છે,
પછી આપણે શું કરવા માંગો છો શકે છે?
શું માત્ર કહેતા હું વાદળી માટે લાલ લિંક કરવા માંગો છો ખોટું હશે,
કારણ કે પ્રથમ એક છે?
અહીં શું શું થશે?
ત્રણ આ બધી ગુમાવી મેળવી શકે છે.
તેથી અમે તે કરવા નહિં માંગો.
ફરીથી, અમે શીખ્યા છે કે અમે કામચલાઉ નિર્દેશક કેટલાક પ્રકારની જરૂર પડે છે.
માતાનો આ વ્યક્તિ માટે કામચલાઉ બિંદુ હોય પસંદ કરો દો.
પછી અમે કામચલાઉ વાદળી એક બિંદુ હોય શકે છે
અને પછી વાદળી માટે લાલ બિંદુ.
આ કારણ હું લોકોને ઉપયોગ કરું છું, અહીં છે કારણ કે અમે ખરેખર જોવાનું માંગો છો
લોકો પર હોલ્ડિંગ અને ખાતરી કરો કે અમે તેમને એક લિંક છે બનાવે છે
પહેલાં અમે બીજા અથવા જેમ હાથ કંઈક ના જાઓ.
>> હવે અમે સાથે લિંક યાદીઓ એક અર્થમાં છે - અમે કેવી રીતે સંકળાયેલી યાદી બનાવી શકે છે
અને એક નોડ માટે પ્રકાર વ્યાખ્યા સમાવેશ થાય છે માટે માળખાં બનાવો
અને પછી ખાતરી કરો કે અમે તે યાદીની લિંક વડા માટે નિર્દેશક હોય બનાવે છે -
એકવાર અમે તે હોય છે અને અમે જાણીએ છીએ કે કેવી રીતે એરે મારફતે પસાર કરવા માટે,
વિવિધ તત્વો ઍક્સેસ કરવા માટે, અમે જાણીએ છીએ કે કેવી રીતે દાખલ કરવા માટે અને અમે જાણીએ છીએ કે કેવી રીતે તેમને મુક્ત કરવા માટે,
તો પછી અમે ખોટી જોડણી માં મેળવી શકો છો.
હંમેશની જેમ, અમે પ્રશ્નો વિભાગ કે તમે સંલગ્ન યાદીઓ સાથે કરવામાં આવશે સંચાલન કરવા માટે વપરાય છે
અને ક્યુને અને રન ટાઇમ સ્ટેકનું, જેમ કે અલગ માળખાં.
તો પછી અમે ખોટી જોડણી માં ખસેડી શકો છો.
>> ખોટી જોડણી વિતરણ કોડ માં મહત્વ ફાઈલોની દંપતી છે.
પ્રથમ અમે નોંધ્યું છે કે અમે આ મેકફાઇલ Language અહીં હોય છે,
જે અમે ખરેખર પહેલાં આવી છે.
જો તમે pset5 ફોલ્ડર અંદર દેખાતા હતા, તમે નોટિસ છો કે તમે ક. ફાઈલ હોય છે,
પછી તમે બે સી. ફાઈલો હોય.
આ મેકફાઇલ Language કરે છે શું આ પહેલા, અમે માત્ર બનાવવા લખો અને પછી કાર્યક્રમ નામ
અને પછી અમે આ દલીલો અને ફ્લેગ્સ તમામ કમ્પાઇલર માં પસાર હતો.
આ મેકફાઇલ Language કરે છે શું અમને એક સાથે ઘણા ફાઈલો કમ્પાઈલ કરવા માટે પરવાનગી આપે છે
અને ફ્લેગ્સ કે અમે માંગો છો પાસ.
અહીં અમે ફક્ત જુઓ ત્યાં હેડર ફાઈલ અહીં છે.
તો પછી અમે ખરેખર બે સ્રોત ફાઈલો હોય.
અમે speller.c અને dictionary.c છે.
તમે મેકફાઇલ Language સંપાદિત જો તમે ઈચ્છો છો સ્વાગત છે.
અહીં નોટિસ જો તમે સ્વચ્છ લખો, પછી તે શું કરે છે ખરેખર કંઈપણ દૂર
કે જે મૂળ છે.
જો તમે સેગ્મેન્ટેશન ક્ષતિમાં મળ્યું છે, મૂળભૂત રીતે તમે કોર ડમ્પ મેળવવા.
તેથી આ નીચ થોડું ફાઇલ તમારા કોર કહેવાય ડિરેક્ટરીમાં દેખાશે.
તમે દૂર કરવા કે બનાવવા માટે તેને સાફ કરવા માંગો છો પડશે.
તેને કોઈપણ exe ફાઈલો દૂર કરે છે અને ઓ ફાઈલો છે..
>> ચાલો dictionary.h એક નજર નાખો.
આ કહે છે કે તે એક શબ્દકોશ વિધેય જાહેર.
અમે શબ્દકોશ કોઈપણ શબ્દ માટે મહત્તમ લંબાઈ ધરાવે છે.
અમે કહે છે કે આ સૌથી લાંબો શક્ય શબ્દ રહ્યું છે. તે 45 લંબાઈ છે.
તેથી અમે કોઈ પણ શબ્દો કે જે લંબાઈ કરતાં વધી નથી જઈ રહ્યાં છો.
અહીં અમે ફક્ત કાર્ય પ્રોટોટાઇપ છે.
અમે વાસ્તવિક અમલ નથી કારણ કે અમે શું આ pset માટે કરી આવશે નહિં.
પરંતુ આ શું કરે છે છે કારણ કે અમે મોટી ફાઈલો સાથે વ્યવહાર કરી રહ્યા છો અહીં
અને મોટા પાયા પર વિધેય, તે ઉપયોગી છે એક ક. ફાઈલ છે
જેથી કોઈએ વાંચન અથવા મદદથી તમારો કોડ સમજી શકે શું થઈ રહ્યું છે.
અને કદાચ તેઓ અમલ કરવા માંગો છો કરવાનો પ્રયત્ન કરે છે જો તમે હેશ કોષ્ટકો અથવા ઊલટું હતી.
પછી તેઓ મારા લોડ કાર્ય કહેવું હો,
વાસ્તવિક અમલીકરણ અલગ અલગ થઈ રહ્યું છે, પરંતુ આ પ્રોટોટાઇપ ફેરફાર કરશે નહીં.
અહીં અમે તપાસ કરેલ છે, જે સાચા આપે છે જો આપેલ શબ્દ કોશ છે.
તો પછી અમે ભાર છે, કે જે મૂળભૂત રીતે શબ્દકોશ ફાઈલ લે છે
અને પછી તેને અમુક માહિતી માળખામાં લાવે છે.
અમે કદ ધરાવે છે, જે જ્યારે કહેવાય છે, તમારા શબ્દકોશ માપ આપે છે,
કેટલા શબ્દો છે તે સંગ્રહાયેલ છે,
અને પછી અનલોડ છે, કે જે બધી મેમરીનો મુક્ત કરે છે કે જે તમે લેવામાં હોઈ શકે છે
જ્યારે તમારી શબ્દકોશ બનાવે છે.
>> ચાલો dictionary.c પર એક નજર.
અમે જુઓ કે તે ખૂબ જ dictionary.h માટે સમાન તેને હવે ફક્ત તેને આ TODOs તમામ છે, અપવાદરૂપે જુએ છે.
અને જેથી તમારી નોકરી છે. આખરે, તમે બહાર ભરવા પડશે આ કોડ તમામ speller.c.
Dictionary.c, જ્યારે ચલાવો ત્યારે ખરેખર કશું નથી રહ્યું છે,
તેથી અમે speller.c તરફ જોવાનું મંત્ર-પરીક્ષક ના વાસ્તવિક અમલ જુઓ.
છતાં પણ તમે આ કોડ કોઇ સંપાદન કરી શકાતું નથી જઈ રહ્યાં છો,
તે મહત્વપૂર્ણ છે, વાંચવા, સમજવા જ્યારે લોડ કહેવાય છે, જ્યારે હું ચેક ફોન કરું છું,
માત્ર સમજવા માટે તે મેપ આઉટ, જુઓ કેવી રીતે કાર્ય કરે છે.
અમે જુઓ કે તે યોગ્ય વપરાશ માટે ચકાસણી છે.
આવશ્યકપણે, જ્યારે કોઈ સ્પેલર ચાલે છે, આ સૂચવે છે કે તે વૈકલ્પિક છે
માટે તેમને શબ્દકોશ ફાઈલ પાસ કરવા માટે કારણ કે ત્યાં એક મૂળભૂત શબ્દકોશ ફાઈલ જ હશે.
અને પછી તેઓ લખાણમાં પસાર કરવા માટે પ્રયત્ન જોડણી-ચકાસાયેલ હોય છે.
સમય સાથે rusage સોદા કારણ કે આ pset એક ભાગ છે જેને આપણે સાથે પછીથી વ્યવહાર પડશે
નથી માત્ર કામગીરી જોડણી-પરીક્ષક કામ મળતું
પરંતુ ખરેખર તે ઝડપી થઈ રહ્યો.
અને તેથી તે પછી કે જ્યાં rusage સાઇન આવી રહ્યું છે
અહીં, અમે અમારા એક dictionary.c ફાઈલો માટે પ્રથમ કોલ જુઓ, કે જે ભાર છે.
સફળતા પર ખરું છે, નિષ્ફળતા પર ખોટા - ભાર સાચું કે ખોટું આપે છે.
તેથી જો શબ્દકોશ યોગ્ય રીતે લોડ થયેલ નહિં હોય, તો પછી speller.c 1 પાછા આવો અને બહાર નીકળવા આવશે.
પરંતુ જો તે લોડ યોગ્ય રીતે કરે છે, પછી તે ચાલુ રાખવા માટે ચાલી રહ્યું છે.
અમે ચાલુ રાખવા માટે, અને અમે અમુક ફાઈલ I / O અહીં જુઓ,
જ્યાં તે લખાણ ફાઈલ ખોલવા સાથે વ્યવહાર કરવામાં બનશે.
અહીં, આ કરે છે શું છે ટેક્સ્ટની દરેક એક શબ્દ જોડણી-ચકાસે છે.
તેથી speller.c શું અહીં કરી છે ઉપર વારો છે લખાણ ફાઈલ શબ્દોના દરેક
અને પછી તેમને શબ્દકોશ ચકાસણી.
અહીં, અમે ખોટીજોડણીવાળું કે જો ચેક સાચી નથી અથવા આપે જોશો બુલિયન છે.
જો શબ્દ કોશ માં ખરેખર હોય, તો પછી ચેક સાચું આપશે.
તેનો અર્થ એ છે કે જે શબ્દ નથી ખોટીજોડણીવાળું છે.
તેથી ખોટીજોડણીવાળું ખોટા હોય છે, અને થશે કે કેમ અમે બેંગ ત્યાં હોય છે, જે સૂચન.
અમે જઈને પર રાખવા, અને પછી તેને કેટલા શબ્દો ખોટીજોડણીવાળું પર નજર રાખે છે
ત્યાં ફાઈલ છે.
તેના પર ચાલુ રહે છે અને ફાઈલ બંધ કરે છે.
પછી અહીં, તે અહેવાલ કેટલી ખોટીજોડણીવાળું શબ્દો તમે હતું.
તે ગણતરી કેટલો સમય તે શબ્દકોશ લોડ લીધો,
કેટલો સમય તે તેની તપાસ કરી લીધો,
ખૂબ સમય તે કદ ગણતરી લીધો કેવી રીતે,
, જેમાં અમે જઈશ, ખૂબ નાના હોવા જોઈએ,
અને પછી કેટલો સમય તે શબ્દકોશ અનલોડ લીધો હતો.
અહીં અપ ઉપર અમે અહીં અનલોડ કોલ જુઓ.
જો અમે કદ માટે અહીં તપાસો,
તો પછી અમે જુઓ કે અહીં માપ કોલ જ્યાં તે શબ્દકોશ માપ નક્કી કરે છે.
ઓસમ.
>> આ pset માટે અમારા કાર્ય પર ભાર છે, કે જે શબ્દકોશ લોડ અમલમાં છે
માહિતી બંધારણ - બેમાંથી જે તમે પસંદ કરો છો, તો તે હેશ ટેબલ હોઈ શકે છે અથવા એક પ્રયાસ -
શબ્દકોષમાં ફાઇલ માંથી શબ્દો સાથે.
પછી તમે માપ છે, કે જે શબ્દકોશ શબ્દો સંખ્યા પરત કરશે.
અને જો તમે એક સ્માર્ટ રીતે લોડ અમલમાં મૂકવા માટે, તે પછી કદ ખૂબ જ સરળ છે.
પછી તમે તપાસ કરેલ છે, કે જે જો આપેલ શબ્દ કોશ છે તપાસ કરશે.
તેથી speller.c શબ્દમાળા પસાર થાય છે, અને પછી તમે કે જેઓ શબ્દમાળા તપાસો
તમારું શબ્દકોશ અંદર સમાયેલ છે.
નોંધ કરો કે અમે સામાન્ય રીતે ધોરણ શબ્દકોશો હોય છે,
પરંતુ આ pset માં, મૂળભૂત રીતે કોઈ પણ શબ્દકોશ કોઈપણ ભાષામાં પસાર થયો.
તેથી અમે માત્ર કે આ શબ્દ અંદર નથી ધારણ કરી શકે છે.
આ શબ્દ FOOBAR ચોક્કસ શબ્દકોશ નિર્ધારિત કરી શકે છે કે અમે સાઇન પસાર
અને પછી અમે અનલોડ કરેલ છે, કે જે મેમરી ના શબ્દકોશ મુક્ત કરે છે.
>> પ્રથમ, હું ઉપર હેશ ટેબલ પદ્ધતિ જવા માગો છો
અમે કેવી રીતે તે ચાર બધા વિધેયોને અમલ થઇ શકે તે વિશે,
અને પછી હું પર જાઓ પદ્ધતિ પ્રયત્ન કરે છે, અમે કેવી રીતે કરશો તે ચાર કાર્યો અમલમાં મૂકવા માટે,
અને અમુક સામાન્ય ટીપ્સ વિશે ઓવરને અંતે ચર્ચા જ્યારે તમે pset કરી રહ્યા છીએ
અને પણ તમે કેવી રીતે ઉપયોગ કરવા માટે સક્ષમ હોઇ શકે છે માટે મેમરી લીક્સ માટે તપાસો Valgrind.
>> ચાલો હેશ ટેબલ પદ્ધતિ માં મેળવો.
એક હેશ ટેબલ buckets યાદી સમાવે છે.
દરેક કિંમત, દરેક શબ્દ માટે એક આ buckets ઓફ જાય રહ્યું છે.
એક હેશ ટેબલ આદર્શ સમાનરૂપે આ કિંમતો તમામ વહેંચણી કે તમે પસાર કરી રહ્યાં છે
અને પછી તેમને જેમ કે ડોલમાં રચે દરેક બાલદી
તેને એક કિંમતો સમાન નંબર વિશે છે.
હેશ કોષ્ટક માટે આ માળખું, અમે કડી થયેલ યાદીઓ ઝાકઝમાળ છે.
અમે શું છે જ્યારે અમે કિંમત પાસ, અમે તપાસ જ્યાં કિંમત સંબંધ જોઈએ,
બાલદી જે તે અનુલક્ષે છે, અને પછી તે લિંક્ડ કે બકેટ સાથે સંકળાયેલ યાદી માં મૂકો.
અહીં, હું શું છે હેશ વિધેય છે.
તે પૂર્ણાંક હેશ ટેબલ છે.
જેથી પ્રથમ બકેટ માટે, 10 નીચે કોઇપણ પૂર્ણાંકો પ્રથમ ડોલ માં જાઓ.
10 ઉપર કોઈપણ પૂર્ણાંકો પરંતુ નીચે બીજા માં 20 હોવ,
અને પછી એમ જ છે અને તેથી આગળ.
મારા માટે, દરેક ડોલ આ નંબરો પ્રતિનિધિત્વ કરે છે.
જોકે કહેવું, હું 50, ઉદાહરણ તરીકે પસાર હતા.
એવું દેખાય છે જો તરીકે પ્રથમ ત્રણ દસ નંબરો વિસ્તાર ધરાવે છે.
પરંતુ હું મારા હેશ ટેબલ પૂર્ણાંકો કોઇ પણ પ્રકારની માં લેવા માટે પરવાનગી આપવા માંગો છો,
જેથી તે પછી હું બહાર છેલ્લા ડોલ માં 30 ઉપર બધી સંખ્યાઓ ફિલ્ટર હશે.
અને તેથી પછી તે અસંતુલિત હેશ કોષ્ટક એક પ્રકારનું પરિણમી.
પુનરુક્તિ કરવી કરવા માટે, હેશ ટેબલ માત્ર buckets ઝાકઝમાળ છે
દરેક બકેટ સંકળાયેલી યાદી છે કે જ્યાં.
અને તેથી જ્યાં દરેક કિંમત જાય તે નક્કી કરવા માટે, બાલદી કે જે તેને જાય,
તમે કરવા માંગો છો શું હેશ વિધેય કહેવાય છે જઈ રહ્યાં છો
કે જે કિંમત લે છે અને પછી કહે છે કે આ કિંમત ચોક્કસ બકેટ અનુલક્ષે છે.
તેથી આ ઉદાહરણમાં ઉપર, મારા હેશ વિધેય દરેક કિંમત લીધો હતો.
તે ચકાસાયેલ છે કે શું તેને 10 કરતાં ઓછી હતી.
જો તે હતી, તેને પ્રથમ બાલદી મૂકવામાં આવશે.
તે ચકાસે છે કે શું તે 20 કરતા પણ ઓછી છે, તે બીજી માં મૂકે સાચું જો,
તપાસમાં જો તે 30 કરતાં ઓછી, અને પછી છે તે તૃતીય ડોલ માં મૂકે છે,
અને પછી બધું માત્ર ચોથા બાલદી પર પડે છે.
તેથી જ્યારે પણ તમે એક મૂલ્ય છે, તમારા હેશ વિધેય
યોગ્ય ડોલ માં તે કિંમત મૂકશે.
હેશ વિધેય મૂળભૂત જાણવા કેટલા buckets તમારી પાસે જરૂર છે.
તમારા હેશ ટેબલ કદ, buckets તમારી પાસે સંખ્યા,
કે જે નિશ્ચિત નંબર છે કે જે તમારા પર છે, માટે તમારે એ નક્કી કરવા માટે જ હશે,
પરંતુ તે માટે ચોક્કસ નંબર જ હશે.
તમારા હેશ વિધેય કે જેથી તે નક્કી કરવા માટે પર આધાર આવશે બકેટ જે દરેક કી જાય
જેમ કે તે સમાનરૂપે વિતરિત છે.
કડી થયેલ યાદીઓ અમારી અમલીકરણ, હવે હેશ કોષ્ટક દરેક નોડ માટે સમાન
છે ખરેખર એક પ્રકાર ઘરનાં પરચૂરણ કામો હોય જવાનું.
તેથી અમે ઘરનાં પરચૂરણ કામો શબ્દ કહેવાય એરે અને પછી બીજા ગાંઠ બીજા નિર્દેશક હોય છે,
અર્થમાં બનાવે છે કારણ કે તે એક કડી થયેલ યાદી જ હશે જે.
યાદ રાખો જ્યારે અમે યાદીઓ કડી થયેલ હતી, હું એક નોડ વડા કહેવાય * બનાવવામાં
કે કડી થયેલ યાદીમાં પ્રથમ નોડ માટે પોઇન્ટ આવ્યો હતો.
પરંતુ અમારા હેશ કોષ્ટક માટે, કારણ કે અમે બહુવિધ કડી થયેલ યાદીઓ હોય છે,
આપણે ઇચ્છીએ શું છે અમે અમારા હેશ કોષ્ટક, જેમ માંગો છો "શું બકેટ છે?"
એક ડોલ માત્ર નોડ પોઇંટરો યાદી છે,
અને તેથી ડોલમાં દરેક તત્વ ખરેખર તેના અનુરૂપ કડી થયેલ યાદી તરફ ઇશારો કરે છે.
આ યોજનાકીય પર પાછા જાઓ, તમે જુઓ કે પોતાને buckets આ તીર છે,
ગાંઠો નથી વાસ્તવિક.
એક જટિલ કાર્ય જરૂરી મિલકત છે કે તેઓ નિર્ધારિત છો.
કે કે જ્યારેપણ હેશ તમે 2 નંબર, એનો અર્થ એ થાય
તે હંમેશા એક જ બકેટ પરત કરીશું.
દરેક એક કિંમત છે કે જે હેશ વિધેય જાય, જો વારંવાર,
એ જ અનુક્રમણિકા વિચાર ધરાવે છે.
તેથી તમારા હેશ વિધેય એરે ની અનુક્રમણિકા આપે છે
જ્યાં તે કિંમત અનુસરે છે.
હું પહેલા ઉલ્લેખ થયો છે, buckets સંખ્યા સુધારેલ છે,
અને તેથી તમારા ઇન્ડેક્સ છે કે જે તમને પાછા buckets સંખ્યા કરતા ઓછી હોવી ધરાવે છે
પરંતુ 0 કરતાં મોટો.
કારણ શા માટે આપણે માત્ર એક જ કડી થયેલ યાદી ને બદલે હેશ કાર્યો કરતા હોય છે
અથવા એક વ્યૂહરચના છે કે અમે ચોક્કસ વિભાગમાં કૂદી કરવાનો સૌથી સરળતાથી પ્રયત્ન કરવા માંગો છો
જો અમે કિંમત લાક્ષણિકતા ખબર -
તેના બદલે સમગ્ર સમગ્ર શબ્દકોશ મારફતે શોધવા કર્યા છે,
તે એક ચોક્કસ વિભાગમાં કૂદી કરવાનો છે.
તમારા હેશ વિધેય એકાઉન્ટમાં કે આદર્શ રીતે લેવી જોઇએ,
દરેક બકેટ આશરે કીઓ એક જ નંબર છે.
કારણ કે હેશ કોષ્ટક સાથે લિંક યાદીઓ શ્રેણી છે,
પછી કડી થયેલ પોતાને યાદીઓ એક કરતાં વધુ નોડ હોય જતાં હોય છે.
પહેલાંના ઉદાહરણમાં, બે અલગ અલગ નંબરો, તેમ છતાં તેઓ ન હતા,
જ્યારે hashed, એ જ અનુક્રમણિકા પરત ફરશે.
તેથી જ્યારે તમે શબ્દો સાથે વ્યવહાર કરવામાં આવે છે, એક શબ્દ જ્યારે hashed
અન્ય શબ્દ જેવા જ હેશ કિંમત હશે.
કે અમે શું ટક્કર કૉલ, જ્યારે અમે નોડ કે જે, જ્યારે hashed હોય છે,
કે બાલદી પર કડી થયેલ યાદી ખાલી નથી.
આ ટેકનિક કે અમે ત્યાં કૉલ રેખીય છે પ્રોબીંગ,
તમે જ્યાં યાદીની લિંક જાય અને પછી શોધી કે જ્યાં તમે કે નોડ સામેલ કરવા માંગો છો
કારણ કે તમે એક ટક્કર છે.
તમે જોઈ શકો છો કે ત્યાં વેપાર બોલ અહીં, શકે અધિકાર?
જો તમે ખૂબ નાની હેશ ટેબલ, buckets એક અત્યંત નાના નંબર છે,
તો પછી તમારે અથડામણમાં ઘણો હોય રહ્યા છીએ.
પરંતુ પછી જો તમે એક ખૂબ મોટા હેશ કોષ્ટક બનાવવા માટે,
તમે કદાચ અકસ્માતથી ઘટાડવા જઈ રહ્યાં છો,
પરંતુ તે ખૂબ મોટી માહિતી માળખું જ હશે.
ત્યાં સાથે વેપાર ન જ હશે.
તેથી જ્યારે તમે તમારા pset કરી રહ્યા છીએ, માટે આસપાસ રમી પ્રયાસ
કદાચ નાના હેશ ટેબલ બનાવે વચ્ચે
પરંતુ તે પછી એ જાણીને કે તે થોડોક લાંબો સમય લાગી જુદા જુદા તત્વો પસાર થઈ રહ્યું છે તે
તે સંલગ્ન યાદીઓની.
>> લોડ શું કરવા જઇ છે શબ્દકોશમાં શબ્દ દરેક ઉપર ફરી વળવું.
તે શબ્દકોશ ફાઈલ માટે પોઇન્ટર પસાર કરે છે.
તેથી તમારે ફાઈલની લાભ લેવા I / O વિધેયો કે જે તમે pset4 માં mastered જઈ રહ્યાં છો
અને ઉપર શબ્દકોશ દરેક શબ્દ ફરી વળવું.
તમે શબ્દકોશમાં દરેક શબ્દ માટે એક નવી નોડ બનવા માગો છો,
અને તમે તમારા શબ્દકોશ માહિતી માળખાની અંદર તે ગાંઠો દરેક એક મૂકી રહ્યા છીએ.
જ્યારે પણ તમે એક નવો શબ્દ મેળવવા માટે, તમે જાણો છો કે તે સ્થળ બની રહ્યું છે.
તેથી તમે straightaway જાઓ અને malloc કરી શકો છો દરેક નવો શબ્દ કે તમારી પાસે એક નોડ નિર્દેશક.
અહીં હું મારા નોડ નિર્દેશક new_node કૉલ છું અને હું શું mallocing છું? નોડ માપ.
પછી ફાઈલ ના વાસ્તવિક શબ્દમાળા વાંચવા માટે છે, કારણ કે શબ્દકોશ ખરેખર સંગ્રહાયેલ છે
એક શબ્દ અને તે પછી એક નવી લીટી, અમે શું લાભ ના લઇ શકો છો દ્વારા
કાર્ય fscanf છે,
ફાઇલ શબ્દકોશ ફાઈલ જેમાં એ છે કે આપણે પસાર કરી રહ્યાં છો,
તેથી તે શબ્દમાળા માટે ફાઈલ સ્કેન કરે છે અને છેલ્લા દલીલ માં શબ્દમાળા કે મૂકે છે.
જો તમે વ્યાખ્યાન એક, જ્યારે અમે ઉપર ગયા પાછા યાદ
અને આ પ્રકારના સ્તરો પાછા peeled આ CS50 પુસ્તકાલય પર,
અમે fscanf એક અમલીકરણ ત્યાં થયો હતો.
માટે fscanf પાછળ જવા માટે, અમે ફાઈલ કે અમે માંથી વાંચવા રહ્યાં છો છે,
અમે તે ફાઈલમાં શબ્દમાળા માટે શોધી રહ્યા છો, અને પછી અમે તેને માં મૂકીને કરી રહ્યાં છો
અહીં હું new_node-> શબ્દ છે કારણ કે new_node નોડ નિર્દેશક છે,
વાસ્તવિક નથી નોડ એક.
તેથી પછી હું new_node કહી રહ્યો છું, હું નોડ પર જાઓ કે તે પોઇન્ટ છે કરવા માંગો છો
અને પછી શબ્દ કે કિંમત સોંપી.
અમે પછી તે શબ્દ ભરે છે અને તેને હેશ કોષ્ટક દાખલ કરવા માંગો છો.
સમજો કે અમે નોડ નિર્દેશક new_node બનાવવામાં
કારણ કે અમે ખબર પડી કે નોડને સરનામા શું છે કરવા માંગો છો જઈ રહ્યાં છો
જ્યારે અમે તેને કારણે પોતે ગાંઠો ની સ્ટ્રક્ટ છે, માળખું માં સામેલ
એ છે કે તેઓ એક નવી નોડ માટે નિર્દેશક હોય છે.
પછી કે જેથી માટે નિર્દેશ જઈને નોડને સરનામા શું છે?
સરનામા કે new_node પ્રયત્ન રહ્યું છે.
એ નથી કે અર્થમાં બનાવવા માટે, અમે એક નોડ * new_node તરીકે નોડ વિરોધ શા માટે કરી રહ્યા છીએ?
ઠીક છે.
અમે એક શબ્દ છે. કિંમત છે કે જે new_node-> શબ્દ છે.
કે શબ્દકોશ પરથી શબ્દ કે અમે ઇનપુટ કરવા માંગો છો સમાવે છે.
તેથી અમે કરવા માંગો છો શું છે અમે તે શબ્દમાળા પર અમારા હેશ વિધેય કૉલ કરવા માંગો છો
કારણ કે અમારી હેશ વિધેય શબ્દમાળા લે અને પછી અમને પૂર્ણાંક આપે,
જ્યાં કે પૂર્ણાંક ઇન્ડેક્સ જ્યાં કે અનુક્રમણિકા પર hashtable કે બકેટ પ્રતિનિધિત્વ કરે છે.
અમે તે ઇન્ડેક્સ લેવા માંગો છો અને પછી હેશ ટેબલ કે ઇન્ડેક્સ પર જાઓ
અને પછી તે યાદીની લિંક વાપરવા માટે new_node ખાતે નોડ દાખલ કરો.
યાદ રાખો કે જો કે તમે તમારા નોડ દાખલ નિર્ણય
શું તે મધ્યમાં છે જો તમે તેને સૉર્ટ કરવા માંગો છો
અથવા શરૂઆતમાં અથવા ઓવરને અંતે, માત્ર ખાતરી કરો કે તમારા છેલ્લા નોડ હંમેશા નલ નિર્દેશ કરો
કે માત્ર એ જ રીતે જે રીતે આપણે જાણીએ છીએ કે જ્યાં અમારી યાદીની લિંક ના છેલ્લા તત્વ છે એટલા માટે છે કે.
>> જો માપ પૂર્ણાંક છે કે જે શબ્દકોશ શબ્દો સંખ્યા પ્રતિનિધિત્વ કરે છે,
પછી એક આ કરવા માટે માર્ગ જ્યારે માપ કહેવાય છે કે
અમે અમારા હેશ કોષ્ટક દરેક તત્વ મારફતે જાઓ
અને પછી હેશ કોષ્ટકમાં દરેક કડી થયેલ યાદી મારફતે ફરી વળવું
અને પછી તે લંબાઈ ગણતરી 1 કરીને અમારી કાઉન્ટર 1 વધી જાય છે.
પરંતુ દર વખતે તે માપ કહેવાય છે, કે જે લાંબા સમય લાગી રહ્યું છે
કારણ કે અમે linearly પ્રયત્ન દરેક એક કડી થયેલ યાદી ચકાસણી રહ્યા છીએ.
તેના બદલે, તે ખૂબ સરળ હશે જો તમે ટ્રેક રાખવા કેટલા શબ્દો સાઇન પસાર થાય છે
તેથી જો તમે તમારું લોડ કાર્ય અંદર એક કાઉન્ટર સમાવેશ થાય છે
કે જરૂરી સુધારાઓ, પછી કાઉન્ટર, જો તમે તેને વૈશ્વિક ચલ સુયોજિત,
કદ દ્વારા ઍક્સેસ કરી કરવાનો પ્રયત્ન કરશે.
તેથી કદ શું ખાલી કરી શકે એક વાક્ય છે, ફક્ત કાઉન્ટર કિંમત પાછી,
શબ્દકોષમાં માપ છે, કે જે તમે પહેલાથી જ ભાર સાથે કર્યો છે.
કે હું શું જ્યારે હું જણાવ્યું હતું કે અર્થ થાય છે જો તમે મદદરૂપ રીતે લોડ અમલમાં મૂકવા માટે,
પછી માપ ખૂબ જ સરળ છે રહ્યું છે.
>> તેથી હવે અમે તપાસ મેળવો.
હવે અમે શબ્દો સાથે ઇનપુટ ટેક્સ્ટ ફાઇલ માંથી વ્યવહાર કરી રહ્યાં છો,
અને તેથી અમે તે ઇનપુટ શબ્દો છે કે શું બધા ચકાસણી કરી રહ્યા છીએ
શબ્દકોશમાં નથી અથવા ખરેખર છે.
ભાંખોડિયાંભર થઈને જેમ, અમે કેસ સંવેદનશૂન્યતાની માટે પરવાનગી આપવા માંગો છો.
તમે ખાતરી કરો કે બધા જ શબ્દો માં પસાર બનાવવા માંગો છો, તેમ છતાં તેઓ મિશ્ર કેસ કરશો,
જ્યારે શબ્દમાળા સરખાવો સાથે કહે છે, સમાન છે.
શબ્દકોષમાં લખાણ ફાઇલોમાં શબ્દો ખરેખર તમામ લોઅરકેસ છે.
અન્ય બાબત એ છે કે તમે ધારણ કરી શકે છે કે જે દરેક શબ્દ છે, દરેક શબ્દમાળા પસાર કર્યો હતો,
છે ક્યાં મૂળાક્ષર અથવા apostrophes સમાવે હશે.
Apostrophes અમારા શબ્દકોશ માન્ય શબ્દો હશે આવે છે.
તેથી જો તમે એપોસ્ટ્રોફી S સાથે એક શબ્દ છે, કે જે તમારી શબ્દકોશ ખરેખર કાયદેસરની શબ્દ છે
કે જે એક તમારી હેશ કોષ્ટકમાં ગાંઠો જ હશે.
જો શબ્દ અસ્તિત્વમાં ચલાવે તપાસો, પછી તે અમારી હેશ કોષ્ટક હોવું મળ્યું છે.
જો શબ્દ કોશ હોય, તો પછી શબ્દકોશમાં બધા જ શબ્દો હેશ કોષ્ટક હોય છે,
તેથી આપણે હેશ કોષ્ટક આ શબ્દ માટે જુઓ.
અમે જાણીએ છીએ કે અમે અમારા હેશ વિધેય અમલમાં
જેમ કે દરેક અનન્ય શબ્દ હંમેશા સમાન મૂલ્ય માટે hashed છે,
પછી આપણે જાણીએ છીએ કે તેના બદલે અમારી સંપૂર્ણ સમગ્ર હેશ ટેબલ દ્વારા શોધખોળ છે,
અમે ખરેખર સંલગ્ન યાદી છે કે જે આ શબ્દ સંબંધ કરીશું શોધી શકો છો.
જો તે શબ્દકોશ હતા, પછી તે ડોલમાં હશે.
, અમે શું કરી, જો શબ્દ અમારા પસાર શબ્દમાળાને નામ છે
અમે ફક્ત હેશ કરી શકો છો કે જે સંકળાયેલા યાદી અંતે શબ્દ દેખાવ
hashtable કિંમત ([શબ્દ) હેશ] છે.
ત્યાંથી, અમે શું કરી શકો છો છે અમે ગાંઠો એક નાની ઉપગણ આ શબ્દ શોધવા માટે હોય છે,
અને તેથી અમે સંલગ્ન યાદી પસાર, તો walkthrough પહેલાં એક ઉદાહરણ મદદથી કરી શકો છો,
અને પછી કૉલ શબ્દમાળા શબ્દ પર સરખાવવા ત્યાં કર્સર તરફ ઇશારો છે,
કે શબ્દ, જુઓ અને શું તે તુલના.
આધાર રાખીને કે જે રીતે તમે તમારી હેશ વિધેય ગોઠવવા પર,
જો તે છટણી છે, તો તમે ખોટા થોડી અગાઉ પરત કરવાનો પ્રયત્ન કરી શકે છે,
પરંતુ જો તે ક્રમમાંગોઠવાયેલનથી છે, તો પછી તમે તમારી સાથે લિંક યાદી મારફતે સરકાઉ ચાલુ રાખવા માંગો છો
જ્યાં સુધી તમે યાદીમાંથી ના છેલ્લા તત્વ શોધો.
અને જો તમે હજુ પણ આ સમય તમે સંકળાયેલા યાદી ઓવરને પહોંચી ગયા છો દ્વારા શબ્દ મળ્યા નથી,
, કે જે અર્થ એ છે કે તમારા શબ્દ શબ્દકોશ અસ્તિત્વમાં નથી
અને જેથી શબ્દ અમાન્ય છે,
અને ચેક ખોટા પરત કરીશું.
>> હવે અમે અનલોડ આવે છે, જ્યાં અમે ગાંઠો કે અમે malloc'd છે બધા મુક્ત કરવા માંગો છો,
જેથી મફત અમારા હેશ કોષ્ટક અંદર ગાંઠો હોય.
અમે માટે આ બોલ પર કડી થયેલ યાદીઓ અને તેમાં ગાંઠોની તમામ મફત તમામ ભારપૂર્વક કહેવું માંગો છો જઈ રહ્યાં છો.
જો તમે walkthrough ઉપર જોવા ઉદાહરણ જ્યાં અમે સંકળાયેલી યાદી મુક્ત
પછી તમે હેશ કોષ્ટક દરેક તત્વ કે પ્રક્રિયા પુનરાવર્તન કરવા માંગો છો પડશે.
અને હું આ બોલ walkthrough ના અંત તરફ જવા પડશે,
પરંતુ Valgrind એ સાધન છે કે જ્યાં તમે જો તમે યોગ્ય રીતે મુક્ત છે જોઈ શકે છે છે
દરેક નોડ કે જે તમે malloc'd અથવા કર્યા છે જે કંઈપણ છે કે તમે malloc'd કર્યા છે, અન્ય કોઈ પણ નિર્દેશક.
જેથી હેશ કોષ્ટકો છે, જ્યાં અમે buckets એક મર્યાદિત સંખ્યામાં છે
અને હેશ વિધેય કે જે કિંમત લેવા અને પછી તે ચોક્કસ બકેટ તે કિંમત સોંપી.
>> હવે અમે પ્રયત્નોમાં માટે આવે છે.
આ જેવા દેખાવ પ્રકારની કરવાનો પ્રયત્ન કરે છે, અને હું પણ એક ઉદાહરણ દોરવા પડશે.
મૂળભૂત રીતે, તમે સંભવિત અક્ષરો સંપૂર્ણ એરે હોય છે,
અને પછી તમે એક શબ્દ જ્યારે પણ બાંધવા કરી રહ્યાં છો,
કે પત્ર શક્યતાઓ વ્યાપક શ્રેણી માટે એક શબ્દકોશ માટે લિંક કરી શકાય છે.
કેટલાક શબ્દો C સાથે શરૂ પરંતુ પછી એક સાથે ચાલુ રાખવા માટે,
પરંતુ અન્ય ઓ સાથે, ઉદાહરણ તરીકે ચાલુ રાખો.
એક trie તે શબ્દોની શક્ય મિશ્રણોનો તમામ દ્રશ્યાત્મક એક માર્ગ છે.
એક trie પત્રો કે શબ્દો સમાવેશ મોટે ટ્રૅક રાખવા રહ્યું છે,
બંધ ડાળીઓ જ્યારે જરૂરી હોય ત્યારે, જ્યારે એક પત્ર અક્ષરોના બહુવિધ દ્વારા અનુસરવામાં કરી શકાય છે,
અને ઓવરને અંતે દરેક તબક્કે સૂચવે છે કે શું શબ્દ માન્ય નથી અથવા
કારણ કે જો તમે આ શબ્દ MAT શબ્દરચના કરી રહ્યાં છો, MA મને લાગતું નથી માન્ય શબ્દ છે, પરંતુ MAT છે.
અને તેથી તમારા trie, તે સૂચવે છે કે MAT પછી કે જે વાસ્તવમાં એક માન્ય શબ્દ છે.
અમારા trie દરેક નોડ ખરેખર નોડ પોઇંટરો ઝાકઝમાળ સમાવી રહ્યું છે,
અને અમે હોય છે, ખાસ કરીને, 27 તે નોડ પોઇંટરો ઓફ જઈ રહ્યાં છો,
એક મૂળાક્ષર દરેક અક્ષર તેમજ એપોસ્ટ્રોફી પાત્ર છે.
કે એરે દરેક તત્વ પોતે અન્ય નોડ માટે નિર્દેશ રહ્યું છે.
તેથી જો કે નોડ NULL છે, જો તે પછી કશું જ નથી,
પછી આપણે જાણીએ છીએ કે એ શબ્દ ક્રમ આગળ કોઈ અક્ષરો છે.
પરંતુ જો તે નોડ NULL નથી, તેનો અર્થ એ કે કે એ પત્ર ક્રમ વધુ અક્ષરો છે.
અને પછી વળી, દરેક નોડ સૂચવે છે કે શું તે શબ્દ નથી અથવા ના છેલ્લા અક્ષર છે.
>> ચાલો એક trie ઉદાહરણ જાય.
પ્રથમ હું આ એરે માં 27 ગાંઠો માટે જગ્યા હોય છે.
જો હું શબ્દ પટ્ટીમાં હોય -
જો હું શબ્દ બાર હોય છે અને હું તે સામેલ કરવા માંગો છો,
પ્રથમ અક્ષર બી છે, તેથી જો મારા trie ખાલી હોય છે,
બી મૂળાક્ષરમાંથી બીજા અક્ષર છે, તેથી હું આ ઇન્ડેક્સ પર અહીં મૂકો પસંદ કરો જાઉં છું.
હું બી અહીં જાઉં છું.
બી નોડ કે જે બધા શક્ય અક્ષરો અન્ય એરે નિર્દેશ પ્રયત્ન રહ્યું છે
કે પત્ર બી પછી અનુસરી શકે છે
આ કિસ્સામાં, હું શબ્દ બાર સાથે વ્યવહાર છું, તેથી અહીં જશે.
એ પછી, હું અક્ષર આર, જેથી પછી તેની પોતાની મિશ્રણ માટે હવે પોઇન્ટ હોય છે,
અને પછી આર અહીં રહેશે.
બાર સંપૂર્ણ શબ્દ છે, તેથી તે પછી હું અન્ય નોડ માટે આર બિંદુ હોય જાઉં છું
કહે છે કે જે શબ્દ માન્ય છે.
નોડ કે જે પણ ગાંઠો ઝાકઝમાળ હોય રહ્યું છે,
પરંતુ તે NULL હોઈ શકે છે.
પરંતુ મૂળભૂત રીતે, તે જેમ ચાલુ રાખી શકો છો.
કે થોડી વધુ સ્પષ્ટ બને છે જ્યારે આપણે વિવિધ ઉદાહરણ માટે જશે,
જેથી માત્ર મારી સાથે ત્યાં ઉઠાવે.
હવે અમે અમારા શબ્દકોશ ની અંદર બાર હોય છે.
હવે કહે છે કે અમે શબ્દ BAZ છે.
અમે બી સાથે શરૂ કરવા માટે, અને અમે પહેલાથી જ એક અક્ષરો જે આપણી શબ્દકોશ છે એક તરીકે બી હોય છે.
કે એ પાલન છે અમે એ પહેલાથી જ હોય ​​છે.
પરંતુ તે પછી તેના બદલે, અમે Z નીચેના હોય છે.
તેથી તે પછી અમારા એરે એક તત્વ માટે Z પ્રયત્ન રહ્યું છે,
અને તેથી તે પછી એક છે કે જે શબ્દ અન્ય માન્ય અંત નિર્દેશ રહ્યું છે.
તેથી અમે જુઓ કે એ જ્યારે અમે બી મારફતે ચાલુ રાખો અને પછી,
ત્યાં બે શબ્દો માટે અમારા શબ્દકોશ હાલમાં વિવિધ વિકલ્પો બી અને એ સાથે શરૂ થાય છે
કહો અમે શબ્દ FOOBAR દાખલ કરવા ઈચ્છતા.
તો પછી અમે એફ એક પ્રવેશ કરશે
એફ નોડ કે જે સમગ્ર એરે નિર્દેશ છે.
અમે ઓ શોધવા, ઓ જશે, ઓ પછી સંપૂર્ણ યાદી માટે કડી થાય છે.
અમે બી હોય છે અને પછી ચાલુ રાખવા માંગો છો, તો અમે છો એ પછી અને આર
તેથી પછી FOOBAR છેડા સુધી FOOBAR સુધી નીચે બધી રીતે સાચો શબ્દ છે.
અને તેથી તે પછી આ માન્ય શબ્દ હશે.
હવે કહે છે અમારી શબ્દકોશ આગામી શબ્દ ખરેખર શબ્દ foo.
અમે કહ્યું એફ શું એફ નીચે?
હું ખરેખર પહેલેથી ઓ માટે એક જગ્યા હોય છે, તેથી હું ચાલુ રાખવા માટે જાઉં છું.
હું એક નવું બનાવવા જરૂર નથી. ચાલુ રાખો.
Foo આ શબ્દકોશમાં માન્ય શબ્દ છે, તેથી તે પછી હું સૂચવવા માટે જાઉં છું
કે જે માન્ય છે.
જો હું મારો ક્રમ ત્યાં અટકાવો, તે યોગ્ય રહેશે.
પરંતુ જો આપણે foo અમારા ક્રમ ચાલુ રહ્યો બી નીચે
અને માત્ર FOOB હતી, FOOB શબ્દ, નથી અને તે માન્ય નથી સૂચવ્યું છે.
એક trie, તમે દરેક નોડ સૂચવે છે કે શું તે માન્ય શબ્દ અથવા નથી,
અને પછી દરેક નોડ પણ 27 નોડ પોઇંટરો ઝાકઝમાળ છે
પછી પોતાને ગાંઠો બિંદુ કે.
>> અહીં તમે કેવી રીતે આ વ્યાખ્યાયિત શકો છો એક માર્ગ છે.
જોકે, માત્ર હેશ ટેબલ ઉદાહરણમાં ગમે, જ્યાં અમે નોડ * વડા હતા
અમારી સાથે લિંક યાદી શરૂઆત સૂચવે છે, અમે પણ કરવા માંગો છો જઈ રહ્યાં છો
જાણીને જ્યાં અમારી trie શરૂઆત છે કેટલાક માર્ગ.
કેટલાક લોકો કૉલ વૃક્ષો કરવાનો પ્રયત્ન કરે છે, અને તે છે જ્યાં રુટ આવે છે.
જેથી અમે અમારા વૃક્ષની રુટ ખાતરી કરો કે અમે લેવાયો રહેવા બનાવવા માટે કરવા માંગો છો
ત્યાં અમારા trie છે.
અમે પહેલાથી જ પ્રકારની પર ગયા
જે રીતે તમે શબ્દકોશ માં દરેક શબ્દ લોડ વિશે વિચારો શકે છે.
આવશ્યકપણે, દરેક શબ્દ માટે તમે તમારા trie દ્વારા ફરી વળવું માંગો છો જઈ રહ્યાં છો
જાણીને અને આ બાળકો દરેક તત્વ - અમે તેને આ કિસ્સામાં બાળકો કહેવાય -
અલગ પત્ર અનુલક્ષે માટે, તમારે તે કિંમતો તપાસ કરવા માંગો છો જઈ રહ્યાં છો
ચોક્કસ ઇન્ડેક્સ કે પત્ર અનુલક્ષે છે.
બધી રીતે વિચારી સીઝર અને Vigenere પાછા તેથી,
ખબર છે કે, દરેક અક્ષર તમે નકશો પ્રકારની એક મૂળાક્ષર અનુક્રમણિકા પર પાછા કરી શકો છો,
Z મારફતે નિશ્ચિતપણે ખૂબ એક મૂળાક્ષર અક્ષર માટે મેપ સરળ હોઈ રહ્યું છે,
પરંતુ દુર્ભાગ્યે, apostrophes પણ શબ્દો માં સ્વીકૃત પાત્ર છે.
હું પણ ખાતરી કરો કે તે ASCII કિંમત શું છે નથી,
જેથી માટે જો તમે નક્કી કરો કે શું તમે તેને ક્યાં તો પ્રથમ એક પ્રયત્ન કરવા માંગો છો અનુક્રમણિકા શોધવા માંગો છો
અથવા છેલ્લા એક, તમે તે માટે હાર્ડ કોડેડ ચેક કરો પડશે
અને પછી તે પુટ 26, હમણાં પૂરતું ઇન્ડેક્સ.
તેથી પછી તમે બાળકોને મૂલ્ય ચકાસણી કરવામાં આવે છે [i]
જ્યાં [i] અનુલક્ષે પત્ર ગમે તમે છો.
જો કે NULL છે, કે જે અર્થ એ છે કે ત્યાં હાલમાં કોઈ શક્ય અક્ષરો નથી
કે જે પહેલાનાં ક્રમ ઉત્પન્ન થાય છે, જેથી તમે malloc કરવા માંગો છો જઈ રહ્યાં છો
અને એક નવી નોડ બનાવવા અને હોય કે જે બાળકો [i] તે બિંદુ
જેથી તમે બનાવો - જ્યારે અમે લંબચોરસ એક પત્ર શામેલ -
બાળકો કે નવા ગાંઠમાં બિન NULL અને બિંદુ બનાવે છે.
પરંતુ જો તે NULL નથી, foo અમારી ઉદાહરણ છો
જ્યારે અમે પહેલાથી જ FOOBAR હતી, અમે ચાલુ રાખવા માટે,
અને અમે સતત નવા નોડ નથી કરતા હોય છે પરંતુ તેના બદલે માત્ર સત્ય માટે is_word સુયોજિત
કે શબ્દ ઓવરને અંતે.
>> તેથી પછી તરીકે પહેલાં, અહીં તમે દરેક અક્ષર સાથે એક સમયે કામ કરીએ છીએ, કારણ કે,
તે માટે તમે સરળ હોઈ કદ માટે ચાલી રહ્યું છે, તેના બદલે ગણતરી માણવાનું
અને સમગ્ર વૃક્ષ મારફતે જાઓ અને ગણતરી કેટલા બાળકો હું હોય
અને પછી બંધ શાખા, યાદ કેટલા ડાબી બાજુ અને જમણી બાજુ પર હોય છે
અને તે જેવી વસ્તુઓ, તે માટે તમે ખૂબ સરળ હશે
જો તમે હમણાં કેટલા શબ્દો તમે ઉમેરી રહ્યાં છીએ, ટ્રૅક રાખવા
જ્યારે તમે ભાર સાથે કામ કરીએ છીએ.
અને તેથી પછી તે રીતે માપ just કદ એક વૈશ્વિક ચલ પાછા આવી શકો છો.
>> હવે અમે તપાસ આવે છે.
પહેલાં જ ધોરણો, જ્યાં અમે કેસની બિનસંવેદનશીલતાની માટે પરવાનગી આપવા માટે કરવા માંગો છો.
આ ઉપરાંત, અમે ધારે છે કે શબ્દમાળાઓ માત્ર મૂળાક્ષર અક્ષર અથવા apostrophes છે
કારણ કે બાળકો 27 લાંબા એક વ્યૂહરચના છે,
જેથી મૂળાક્ષર ઉપરાંત એપોસ્ટ્રોફી અક્ષરોને હોય.
ચકાસવા માટે તમે શું કરવા માંગો છો પડશે તો રુટ શરૂ કરવા માંગો છો પડશે
કારણ કે જે રુટ ઝાકઝમાળ કે સમાવે નિર્દેશ
એક શબ્દના શક્ય શરૂ અક્ષરોના છે.
તમે ત્યાં શરૂ કરવાનો છું કરી રહ્યાં છો,
અને પછી તમે ચકાસવા જઈ રહ્યાં છો આ કિંમત NULL નથી અથવા,
કારણ કે જો કિંમત NULL છે, કે જે અર્થ એ થાય કે શબ્દકોશ કોઈ મૂલ્ય નથી
ચોક્કસ ક્રમમાં છે કે જે અક્ષર હોય છે.
તે માતાનો NULL જો, તો પછી તે અર્થ એ થાય કે શબ્દ સીધા ખોટીજોડણીવાળું છે.
પરંતુ જો તે NULL નથી, તો પછી તમે ચાલુ રાખી શકો છો,
કહે છે કે પ્રથમ અક્ષર એક શબ્દ એક શક્ય પ્રથમ અક્ષર છે,
તેથી હવે હું ચકાસો જો બીજા પત્રમાં, કે ક્રમ, મારા શબ્દકોશ અંદર છે કરવા માંગો છો.
તેથી તમારે પ્રથમ નોડને બાળકો ઇન્ડેક્સ પર જાઓ જઈ રહ્યાં છો
તપાસો અને પછી તે બીજા પત્રમાં અસ્તિત્વમાં છે.
પછી તમે તે પ્રક્રિયા પુનરાવર્તન માટે તપાસો કે શું ક્રમ valid નથી અથવા
તમારા trie અંદર.
જ્યારે પણ છે કે ઇન્ડેક્સ પોઇન્ટ્સ પર નોડ બાળકો નલ માટે,
તમે જાણો છો કે જે શ્રેણીમાં અસ્તિત્વમાં નથી,
પરંતુ પછી જો તમે શબ્દ કે તમે ઇનપુટ કર્યું છે ઓવરને પહોંચે છે,
પછી તમે હવે તપાસો કે હું આ ક્રમ પૂર્ણ કરી લીધી છે કરવા માંગો છો
અને તેને મારા trie અંદર મળી છે, કે જે માન્ય નથી અથવા શબ્દ છે?
અને તેથી તે પછી તમે તે તપાસ કરવા માંગો છો, અને તે જ્યારે જો તમે કે ક્રમ મળ્યાં છે,
તો પછી તમારે તપાસો કે શું શબ્દ માન્ય નથી અથવા માંગો છો
કારણ કે અગાઉના કિસ્સામાં પાછા યાદ રાખો કે હું દોર્યું જ્યાં અમે FOOB હતી,
કે જે માન્ય ક્રમ કે અમે મળી પરંતુ એક વાસ્તવિક માન્ય શબ્દ ન હતો.
>> એ જ રીતે, પ્રયત્નોમાં તમે તમારા trie માં ગાંઠો તમામ અનલોડ કરવા માંગો છો અનલોડ છે.
માફ કરશો. હેશ કોષ્ટકો જ્યાં અનલોડ માં આપણે દરેક ગાંઠો મુક્ત જેમ,
આ પ્રયત્નોમાં અમે પણ ગાંઠો તમામ મુક્ત કરવા માંગો છો.
અનલોડ ખરેખર નીચેથી સૌથી સરળ ટોચ પર કામ કરશે
કારણ કે આ અનિવાર્યપણે કડી થયેલ યાદી છે.
તેથી અમે કિંમતો બધા પર ખાતરી કરો કે અમે પકડી બનાવવા માંગો છો
અને મફત તેમને સ્પષ્ટપણે છે.
તમે શું કરવા માંગો છો જઈને હોવ તો તમે એક સાથે કામ કરી રહ્યા છો trie
માટે નીચે અને મફત સૌથી નીચો શક્ય નોડ પ્રથમ પ્રવાસ છે
અને પછી તે બાળકો માટે તમામ ઉપર જાઓ અને મફત તે તમામ, તો પછી
અપ જાઓ અને પછી મફત વગેરે,
આ trie પ્રથમ નીચે સ્તર સાથે વ્યવહાર જેવા પ્રકારની
અને પછી જઈને ટોચ એકવાર તમે બધું મુક્ત કર્યા છે.
આ જ્યાં યાદ આવવું કાર્ય હાથમાં શકે છે એક સારું ઉદાહરણ છે.
એકવાર તમે તમારી trie નીચે સ્તર મુક્ત કર્યા છે,
પછી તમે તેને બાકીના પર અનલોડ કહી,
ખાતરી કરો કે તમે દરેક મિની મુક્ત બનાવવા -
તમે પ્રકારની તેને મીની પ્રયત્નોમાં તરીકે આત્મસાત્ કરી શકો છો.
જેથી તમે તમારો રુટ અહીં છે.
હું હમણાં જ તે સરળ છું તેથી હું 26 તેમાંથી દોરવા નથી.
તેથી તમે આ છે, અને પછી આ શબ્દ ક્રમ પ્રતિનિધિત્વ
આ થોડો બધા વર્તુળોમાંથી અક્ષરો જે letters વૈધ સિક્વન્સ છે જ્યાં છે.
ચાલો માત્ર એક બીટ વધુ ચાલુ રાખો.
તમે કરવા માંગો છો જઈ રહ્યાં છો શું મફત અહીં અને પછી મફત આ તળિયે છે
અને પછી તળિયે મફત આ એક પહેલાં તમે ઉપરની એક અહીં મુક્ત
કારણ કે તમે જો બીજા અહીં સ્તર મફત કંઈક,
પછી તમે ખરેખર આ કિંમત અહીં ગુમાવશે.
કે શા માટે તે માટે ખાતરી કરો કે તમે નીચે સૌપ્રથમ મફત make trie માટે અનલોડ મહત્વપૂર્ણ છે.
તમે શું દરેક નોડ માટે છે કહેવું કરવા માંગો છો શકે છે
હું બાળકો બધા અનલોડ કરવા માંગો છો.
>> હવે અમે હેશ ટેબલ તેમજ trie પદ્ધતિ પદ્ધતિ માટે unload પર ચાલ્યા કરી લીધી છે,
અમે માટે Valgrind જોવા માંગો છો રહ્યા છીએ.
Valgrind તમે નીચેના આદેશો સાથે ચાલે છે.
તમે valgrind-વિરુદ્ધ છે.
તમે બધા લીક્સ માટે ચકાસણી કરી રહ્યા છીએ જ્યારે તમે આ ચોક્કસ લખાણ આપવામાં સ્પેલર સ્કોર
કારણ કે speller પર એક ટેક્સ્ટ ફાઈલ લઇ needs.
તેથી Valgrind તમારા કાર્યક્રમ ચલાવવા માટે, તમને કહી many કેવી રીતે બાઇટ્સ તમે ફાળવવામાં આવશે,
કેટલા બાઇટ્સ તમે મુક્ત, અને તે તમને કહેશે કે શું તમે હમણાં જ પૂરતી મુક્ત કરશે
અથવા શું તમે મફત પર્યાપ્ત નથી,
અથવા તમને ક્યારેક પર મુક્ત પણ, મફત નોડ જેમ કે જેઓ પહેલાથી જ છે કરી શકો છો મુક્ત કરવામાં
અને તેથી તે તમે ભૂલો આપશે.
જો તમે Valgrind વાપરો, તો તે તમને કેટલાક સંદેશાઓ આપવા પડશે
સૂચવે છે કે શું તમે ક્યાં તો મુક્ત કર્યા છે કરતાં પર્યાપ્ત ઓછા, just પર્યાપ્ત,
અથવા પર્યાપ્ત સમય કરતાં વધુ.
>> આ pset એક ભાગ છે, તે વૈકલ્પિક છે માટે મોટા બોર્ડ પડકાર હતો.
પરંતુ જ્યારે અમે આ માહિતી બંધારણોની સાથે કામ કરીએ છીએ
તે મજા પ્રકારની જોવા માટે ઝડપથી કેવી રીતે અને અસરકારક કેવી રીતે તમારી માહિતી બંધારણો હોઈ શકે છે.
તમારા અથડામણમાં ઘણો માં હેશ વિધેય પરિણામે કરે છે?
અથવા તમારા દશાંશ માહિતી માપ છે ખરેખર મોટી?
એ નથી કે તે સમય ઘણો સમય લાગી પસાર?
Speller ઓફ લોગ, તે આઉટપુટ આપે છે કેટલી વાર તમે લોડ વાપરવા માટે,
તેની તપાસ માટે માપ લેવા માટે, અને unload,
અને તેથી તે આ મોટા બોર્ડ મૂકવામાં આવે છે,
જ્યાં તમે તમારા સહપાઠીઓને સામે સ્પર્ધા કરી શકે છે
અને કેટલાક સ્ટાફ સભ્યો જોવા માટે જે સૌથી ઝડપી spell-ચેકર છે.
એક વસ્તુ છે કે હું હેશ કોષ્ટકો વિશે નોંધ કરવા માંગો છો
એ છે કે કેટલાક ખૂબ સરળ હેશ વિધેયોની કે અમે વિચારી શકે છે.
હમણાં પૂરતું, તમે 26 buckets હોય છે, અને તેથી દરેક બાલદી
એક શબ્દમાં પ્રથમ અક્ષર અનુલક્ષે,
પરંતુ તે માટે એક સુંદર અસંતુલિત હેશ કોષ્ટકમાં પરિણામ રહ્યું છે
કારણ કે ત્યાં ખૂબ ઓછા શબ્દો M સાથે પ્રારંભ કરતાં એક્સ સાથે, હમણાં પૂરતું શરૂ થાય છે.
એક સ્પેલર જઈ રીતે જો તમે અન્ય બધા વિધેયો નીચે વિચાર કરવા માંગો છો,
પછી માત્ર એક સરળ હેશ વિધેય વાપરવા માટે તમારી કોડ ચલાવી રહેલ વિચાર કરવાનો પ્રયત્ન
અને પછી પાછા જાઓ અને તમારી હેશ કોષ્ટક અને વ્યાખ્યા માપ બદલે છે.
ત્યાં ઇન્ટરનેટ પર સ્રોતો એક જટિલ કાર્ય માટે ઘણું છે,
અને તેથી આ pset માટે તમે ઇન્ટરનેટ પર હેશ વિધેયોની સંશોધન માન્ય છે
કેટલાક સંકેતો અને લાંબા તરીકે પ્રેરણા તરીકે તમે દૃષ્ટાંત જ્યાં તમે તે મળ્યું માંથી ખાતરી છે.
તમે નજર અને કેટલાક હેશ વિધેય કે તમે ઇન્ટરનેટ પર શોધી અર્થઘટન સ્વાગત છો.
કે પાછા, તો તમે તે જોવા માટે જો કોઈને trie ઉપયોગ કરવાનો પ્રયત્ન કરી શકે છે
કે શું તેમના અમલીકરણ તમારા હેશ કોષ્ટક નથી અથવા કરતા ઝડપી છે.
તમે આ મોટા બોર્ડ અને ઘણી વખત સબમિટ કરી શકો છો.
તે તમારા એકદમ છેલ્લા પ્રવેશ રેકોર્ડ કરીશું.
તેથી કદાચ તમે તમારા હેશ વિધેય બદલવા અને પછી ખ્યાલ છે કે તે ખરેખર ખૂબ વધુ ઝડપી છે
અથવા તે પહેલાં કરતાં ધીમી ઘણું.
કે જે મજા રીતે એક બીટ છે.
ત્યાં 1 હંમેશાં અથવા 2 સ્ટાફ સભ્યો માટે સૌથી ધીમી શક્ય શબ્દકોશ બનાવવા પ્રયાસ છે,
જેથી હંમેશા આનંદ માટે જુઓ.
>> આ pset માટે ઉપયોગ છે તમે વૈકલ્પિક શબ્દકોશ સાથે સ્પેલર સ્કોર
અને પછી ફરજિયાત લખાણ ફાઈલ.
મૂળભૂત રીતે જ્યારે તમે માત્ર લખાણ ફાઈલ સાથે સ્પેલર ચલાવો અને પાસે શબ્દકોશ સ્પષ્ટ નથી,
તે શબ્દકોશ લખાણ ફાઈલ છે, મોટા નો ઉપયોગ રહ્યું છે
આ cs50/pset5/dictionaries ફોલ્ડર છે.
કે એક 100,000 કરતા શબ્દો છે.
તેઓ પણ એક નાની શબ્દકોશ કે જે નોંધપાત્ર રીતે ઓછા શબ્દો છે પાસે
CS50 કે જે તમે માટે બનાવવામાં આવી છે.
જો કે, તમે ખૂબ સરળતાથી ફક્ત તમારી પોતાની શબ્દકોશ કરી શકો છો
જો તમે માત્ર નાના ઉદાહરણો માં કામ કરવા માંગો છો -
દાખલા તરીકે, જો તમે gdb ઉપયોગ કરવા માંગો છો અને તમને ચોક્કસ કિંમતો ખબર
કે જે તમે તમારા હેશ કોષ્ટક બહાર જ મેપ કરવા માટે કરવા માંગો છો.
તેથી તમે બાર, BAZ, foo, અને FOOBAR સાથે જ તમારા પોતાના લખાણ ફાઈલ માત્ર બનાવવા કરી શકો છો,
લખાણ ફાઈલ છે કે બનાવવા માટે, રેખા 1 સાથે તે દરેક અલગ,
અને પછી તમારા પોતાના લખાણ ફાઈલ છે, જે શબ્દશઃ માત્ર 1 કદાચ અથવા 2 શબ્દો છે કરો
જેથી તમે ચોકકસ શું આઉટપુટ પ્રયત્ન કરીશું.
નમૂના લખાણ કેટલીક ફાઇલો કે મોટા બોર્ડ જ્યારે તમે પડકાર સ્કોર તપાસ કરશે
યુદ્ધ અને શાંતિ અને જેન ઑસ્ટિન નવલકથા અથવા તે કંઈક છે.
તેથી જ્યારે તમે બહાર શરૂ કરી રહ્યાં છો, તો તે ખૂબ સરળ છે તમારા પોતાના લખાણ ફાઈલો બનાવવા
કે માત્ર શબ્દો થોડા અથવા કદાચ 10 સમાવે છે
જેથી તમે આગાહી કરી શકે પરિણામ શું હોવું જોઈએ
અને પછી તે સામે તપાસ, તેથી નિયંત્રિત ઉદાહરણ છે.
અને તેથી અમે અનુમાન અને ચિત્રકામ આસપાસ વસ્તુઓ સાથે કામ કરીએ છીએ,
ફરીથી હું તમારી પેન અને કાગળ ઉપયોગ કરવા માટે પ્રોત્સાહિત કરવા માંગો છો
કારણ કે તે ખરેખર તમે આ મદદ ચાલી રહ્યું છે -
આ તીર ચિત્રકામ, હેશ કોષ્ટક કેવી રીતે કેવી રીતે તમારા trie લાગે છે,
જ્યારે તમે કંઈક જ્યાં તીરો જવું છે ખાલી કરી રહ્યાં છો,
છે તમારી પાસે પૂરતી પર હોલ્ડિંગ, તમે કોઈપણ લિંક્સ અદ્રશ્ય થઈ જુઓ
અને લીક મેમરી સકીંગ ઘટી રહ્યો છે.
તેથી, કૃપા કરીને વસ્તુઓ દોરવા બહાર પણ તે પહેલાં તમે કોડ લખી નીચે મેળવવા પ્રયાસ કરો.
વસ્તુઓ દોરો બહાર કે જેથી તમે કેવી રીતે વસ્તુઓ માટે કામ જવું છે
કારણ કે પછી હું ગેરંટી તમે ઓછી નિર્દેશક muddles માં ત્યાં સ્કોર પડશે.
>> અધિકાર છે.
હું તમને બહુ આ pset સાથે શુભેચ્છા માંગો છો માંગો છો.
તે કદાચ અત્યંત એક છે.
તેથી વહેલી શરૂ કરવાનો પ્રયાસ કરો, વસ્તુઓ દોરવા આઉટ વસ્તુઓ દોરવા આઉટ અને સારા નસીબ.
આ 5 Walkthrough હતી.
>> [CS50.TV]