ஹாஷ் செயல்பாடு
இந்த பிரிவில், பின்வருவனவற்றில் குறிப்பிடப்பட்டுள்ளபடி தரவு கட்டமைப்பில் உள்ள தரவு உருப்படியின் தொடர்புடைய விசையின் ஹாஷ் குறியீட்டை இயக்க உதவும் ஹாஷ் செயல்பாட்டைப் பற்றி விவாதிப்போம்:
Int hashItem ( முழு எண்ணாக முக்கிய ){
திரும்ப முக்கிய % அட்டவணை அளவு ;
}
ஒரு வரிசையின் குறியீட்டை இயக்கும் செயல்முறை ஹாஷிங் என்று அழைக்கப்படுகிறது. சில நேரங்களில், ஒரே மாதிரியான குறியீட்டை உருவாக்க, மோதல்கள் எனப்படும் அதே விசைகளைப் பயன்படுத்தி, வெவ்வேறு சங்கிலிகள் (இணைக்கப்பட்ட பட்டியல் உருவாக்கம்) மற்றும் திறந்த முகவரி உத்திகள் செயல்படுத்தல் மூலம் கையாளப்படுகிறது.
சி++ இல் ஹாஷ் டேபிளின் வேலை
உண்மையான மதிப்புகளுக்கான சுட்டிகள் ஹாஷ் அட்டவணையில் வைக்கப்பட்டுள்ளன. இது ஒரு வரிசையின் குறியீட்டைத் தேட ஒரு விசையைப் பயன்படுத்துகிறது, அதில் விசைகளுக்கு எதிரான மதிப்புகள் ஒரு வரிசையில் விரும்பிய இடத்தில் சேமிக்கப்பட வேண்டும். பின்வருவனவற்றில் குறிப்பிடப்பட்டுள்ளபடி 10 அளவு கொண்ட ஹாஷ் அட்டவணையை எடுத்தோம்:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
வெவ்வேறு விசைகளுக்கு எதிராக எந்தவொரு தரவையும் தோராயமாக எடுத்து, குறியீட்டைக் கணக்கிடுவதன் மூலம் இந்த விசைகளை ஹாஷ் அட்டவணையில் சேமிப்போம். எனவே, தரவு ஹாஷ் செயல்பாட்டின் உதவியுடன் கணக்கிடப்பட்ட குறியீட்டில் உள்ள விசைகளுக்கு எதிராக சேமிக்கப்படுகிறது. ஒரு தரவு = {14,25,42,55,63,84} மற்றும் விசைகள் =[ 15,9,5,25,66,75 ] என்று வைத்துக்கொள்வோம்.
ஹாஷ் செயல்பாட்டைப் பயன்படுத்தி இந்தத் தரவின் குறியீட்டைக் கணக்கிடுங்கள். குறியீட்டு மதிப்பு பின்வருவனவற்றில் குறிப்பிடப்பட்டுள்ளது:
முக்கிய | பதினைந்து | 9 | 29 | 43 | 66 | 71 |
---|---|---|---|---|---|---|
குறியீட்டைக் கணக்கிடுங்கள் | 15% 10 = 5 | 9%10=0 | 29%10=9 | 43%10=3 | 66%10=6 | 71%10=1 |
தகவல்கள் | 14 | 25 | 42 | 55 | 63 | 84 |
ஒரு வரிசையின் குறியீட்டை உருவாக்கிய பிறகு, கொடுக்கப்பட்ட வரிசையின் சரியான குறியீட்டில் முன்பு விவரிக்கப்பட்டபடி விசைக்கு எதிராக தரவை வைக்கவும்.
25 | 84 | 55 | 14 | 63 | 42 | ||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
அதன் பிறகு, இரண்டு அல்லது அதற்கு மேற்பட்ட விசைகள் ஒரே ஹாஷ் குறியீட்டைக் கொண்டிருந்தால் மோதல் ஏற்படுவதைக் காணலாம், இது வரிசையில் உள்ள உறுப்புகளின் அதே குறியீட்டில் விளைகிறது. மோதுவதற்கான வாய்ப்புகளைத் தவிர்க்க எங்களிடம் ஒரு தீர்வு உள்ளது: நல்ல ஹாஷ் முறையைத் தேர்ந்தெடுத்து துல்லியமான உத்திகளைச் செயல்படுத்துதல்.
இப்போது, சரியான எடுத்துக்காட்டுகளின் உதவியுடன் வெவ்வேறு செயலாக்க நுட்பங்களைப் பற்றி விவாதிப்போம்.
எடுத்துக்காட்டு: திறந்த ஹாஷிங் நுட்பத்தைப் பயன்படுத்தி ஹாஷ் அட்டவணையில் தரவைச் சேர்க்கவும்
இந்த எடுத்துக்காட்டில், ஹாஷ் அட்டவணையில் மோதலைத் தவிர்க்க ஓபன் ஹாஷிங் போன்ற செயலாக்க நுட்பத்தை நாங்கள் எடுத்துக்கொள்கிறோம். திறந்த ஹாஷிங் அல்லது சங்கிலியில், ஹாஷ் அட்டவணையின் மதிப்புகளை இணைக்க இணைக்கப்பட்ட பட்டியலை உருவாக்குகிறோம். இந்த எடுத்துக்காட்டின் குறியீடு துணுக்கு திறந்த ஹாஷிங் நுட்பத்தை விவரிக்கும் பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:
##
- அடங்கும்
வர்க்கம் ஹாஷ்டேபிள் {
தனிப்பட்ட :
நிலையான நிலையான முழு எண்ணாக அட்டவணை அளவு = 10 ;
வகுப்பு :: பட்டியல் < முழு எண்ணாக > அட்டவணை உள்ளது [ அட்டவணை அளவு ] ;
முழு எண்ணாக ஹாஷ்ஃபங்க் ( முழு எண்ணாக முக்கிய ) {
திரும்ப முக்கிய % அட்டவணை அளவு ;
}
பொது :
வெற்றிடமானது செருகு ( முழு எண்ணாக முக்கிய ) {
முழு எண்ணாக குறியீட்டு = ஹாஷ்ஃபங்க் ( முக்கிய ) ;
அட்டவணை உள்ளது [ குறியீட்டு ] . பின் தள்ளு ( முக்கிய ) ;
}
வெற்றிடமானது காட்சி அட்டவணை ( ) {
க்கான ( முழு எண்ணாக நான் = 0 ; நான் < அட்டவணை அளவு ; ++ நான் ) {
வகுப்பு :: கூட் << '[' << நான் << ']' ;
க்கான ( ஆட்டோ அது = அட்டவணை உள்ளது [ நான் ] . தொடங்கும் ( ) ; அது ! = அட்டவணை உள்ளது [ நான் ] . முடிவு ( ) ; ++ அது ) {
வகுப்பு :: கூட் << ' -> ' << * அது ;
}
வகுப்பு :: கூட் << வகுப்பு :: endl ;
}
}
} ;
முழு எண்ணாக முக்கிய ( ) {
HashTable hasTable ;
அட்டவணை உள்ளது. செருகு ( பதினைந்து ) ;
அட்டவணை உள்ளது. செருகு ( 33 ) ;
அட்டவணை உள்ளது. செருகு ( 23 ) ;
அட்டவணை உள்ளது. செருகு ( 65 ) ;
அட்டவணை உள்ளது. செருகு ( 3 ) ;
அட்டவணை உள்ளது. காட்சி அட்டவணை ( ) ;
திரும்ப 0 ;
}
இது மிகவும் சுவாரஸ்யமான உதாரணம்: இணைக்கப்பட்ட பட்டியலை உருவாக்கி, ஹாஷ் அட்டவணையில் தரவைச் செருகுவோம். முதலில், நிரலின் தொடக்கத்தில் நூலகங்களை வரையறுக்கிறோம். தி < பட்டியல் > இணைக்கப்பட்ட பட்டியல் செயல்படுத்த நூலகம் பயன்படுத்தப்படுகிறது. அதன் பிறகு, 'HashTable' என்ற வகுப்பை உருவாக்கி, 'private:' முக்கிய சொல்லைப் பயன்படுத்தி அட்டவணை அளவு மற்றும் அட்டவணை வரிசை என தனிப்பட்ட வகுப்பின் பண்புகளை உருவாக்குவோம். தனிப்பட்ட பண்புக்கூறுகள் வகுப்பிற்கு வெளியே பயன்படுத்த முடியாது என்பதை நினைவில் கொள்ளுங்கள். இங்கே, நாங்கள் அட்டவணையின் அளவை '10' ஆக எடுத்துக்கொள்கிறோம். இதைப் பயன்படுத்தி ஹாஷ் முறையைத் துவக்கி, ஹாஷ் அட்டவணையின் குறியீட்டைக் கணக்கிடுகிறோம். ஹாஷ் செயல்பாட்டில், ஹாஷ் அட்டவணையின் விசை மற்றும் அளவைக் கடந்து செல்கிறோம்.
தேவையான சில செயல்பாடுகளை நாங்கள் உருவாக்கி, இந்த செயல்பாடுகளை வகுப்பில் பொதுவில் வைக்கிறோம். பொது செயல்பாடுகளை வகுப்பிற்கு வெளியே எங்கும் பயன்படுத்தலாம் என்பதை நினைவில் கொள்ளுங்கள். வகுப்பின் பொதுப் பகுதியைத் தொடங்க 'பொது:' முக்கிய சொல்லைப் பயன்படுத்துகிறோம் . ஹாஷ் அட்டவணையில் புதிய கூறுகளைச் சேர்க்க விரும்புவதால், செயல்பாட்டின் வாதமாக ஒரு விசையுடன் “InsertHash” என்ற செயல்பாட்டை உருவாக்குகிறோம். 'செருகு' செயல்பாட்டில், குறியீட்டு மாறியை துவக்குகிறோம். ஹாஷ் செயல்பாட்டை குறியீட்டு மாறிக்கு அனுப்புகிறோம். அதன் பிறகு, அட்டவணையில் ஒரு உறுப்பைச் செருக, 'புஷ்' முறையைப் பயன்படுத்தி, இணைக்கப்பட்ட பட்டியல் அட்டவணைக்கு அட்டவணை மாறியை அனுப்பவும்.
அதன் பிறகு, புதிதாகச் செருகப்பட்ட தரவைப் பார்க்க ஹாஷ் அட்டவணையைக் காண்பிக்க “viewHashTab” செயல்பாட்டை உருவாக்குகிறோம். இந்தச் செயல்பாட்டில், ஹாஷ் அட்டவணையின் இறுதி வரை மதிப்புகளைத் தேடும் 'for' லூப்பை எடுத்துக்கொள்கிறோம். ஹாஷ் செயல்பாட்டைப் பயன்படுத்தி உருவாக்கப்பட்ட அதே குறியீட்டில் மதிப்புகள் சேமிக்கப்படுவதை உறுதிசெய்க. சுழற்சியில், மதிப்புகளை அந்தந்த குறியீட்டில் கடந்து, வகுப்பை இங்கே முடிக்கிறோம். 'முக்கிய' செயல்பாட்டில், 'hasTable' என்ற வகுப்பின் பொருளை எடுத்துக்கொள்கிறோம். இந்த கிளாஸ் ஆப்ஜெக்ட்டின் உதவியுடன், மெத்தடில் உள்ள கீயை கடந்து செருகும் முறையை அணுகலாம். 'முக்கிய' செயல்பாட்டில் நாம் அனுப்பிய விசையானது ஹாஷ் அட்டவணையில் குறியீட்டு நிலையை வழங்கும் 'செருகு' செயல்பாட்டில் கணக்கிடப்படுகிறது. 'வகுப்பு' பொருளின் உதவியுடன் 'பார்வை' செயல்பாட்டை அழைப்பதன் மூலம் ஹாஷ் அட்டவணையைக் காட்டினோம்.
இந்த குறியீட்டின் வெளியீடு பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:
நாம் பார்க்கிறபடி, C++ இல் இணைக்கப்பட்ட பட்டியலைப் பயன்படுத்தி ஹாஷ் அட்டவணை வெற்றிகரமாக உருவாக்கப்பட்டது. ஒரே குறியீட்டின் மோதலைத் தவிர்க்க திறந்த சங்கிலி பயன்படுத்தப்படுகிறது.
முடிவுரை
இறுதியில், ஹாஷ் டேபிள் என்பது பெரிய அளவிலான தரவைத் திறமையாகக் கையாள மதிப்பு ஜோடிகளைக் கொண்ட விசைகளைச் சேமிப்பதற்கும் பெறுவதற்கும் மிகவும் வளர்ந்து வரும் நுட்பமாகும் என்று நாங்கள் முடிவு செய்தோம். ஹாஷ் அட்டவணையில் மோதுவதற்கான வாய்ப்புகள் மிக அதிகம், தரவு மற்றும் அதன் சேமிப்பகத்தை அழிக்கிறது. ஹாஷ் அட்டவணை நிர்வாகத்தின் பல்வேறு நுட்பங்களைப் பயன்படுத்தி இந்த மோதலை நாம் சமாளிக்க முடியும். C++ இல் ஹாஷ் அட்டவணையை உருவாக்குவதன் மூலம், டெவலப்பர்கள் ஹாஷ் அட்டவணையில் தரவைச் சேமிக்க சிறந்த பொருத்தமான நுட்பத்தைப் பயன்படுத்தி செயல்திறனை அதிகரிக்க முடியும். ஹாஷ் அட்டவணையைப் பற்றிய உங்கள் புரிதலுக்கு இந்தக் கட்டுரை உதவியாக இருக்கும் என்று நம்புகிறோம்.