ஜாவாவில் மேக்ஸ் ஹீப்பை எவ்வாறு பயன்படுத்துவது?

Javavil Meks Hippai Evvaru Payanpatuttuvatu



புரோகிராமர் '' ஐப் பயன்படுத்தி அதிகபட்ச உறுப்பை எளிதாகப் பெறலாம். அதிகபட்ச குவியல் ” பைனரி மரம். இந்த மரத்தைப் போலவே, அதிகபட்ச உறுப்பு எப்போதும் மரத்தின் மேல் முனையில் இருக்கும், இது '' என்று அழைக்கப்படுகிறது. வேர் ” முனை. மேலும், இது வரிசைப்படுத்தப்பட்ட வரிசையை பராமரிக்கும் போது உறுப்புகளை திறம்பட செருகுவதையும் நீக்குவதையும் வழங்குகிறது. கூடுதலாக, ஒரு “மேக்ஸ் ஹீப்” அவர்களின் முன்னுரிமை அல்லது பிற அளவுகோல்களின் அடிப்படையில் திட்டமிடப்பட்ட வேலைகளை எளிதாகச் செய்ய முடியும்.

இந்த கட்டுரை பின்வரும் உள்ளடக்கத்தை விளக்குகிறது:







ஜாவாவில் மேக்ஸ் ஹீப்பை எவ்வாறு பயன்படுத்துவது?

ஒரு ' அதிகபட்ச குவியல் ” முன்னுரிமை வரிசையை செயல்படுத்துவதற்கு அடிப்படையான தரவு கட்டமைப்பாகப் பயன்படுத்தப்படுகிறது. முன்னுரிமை வரிசையில், அவர்களுக்கு ஒதுக்கப்பட்ட முன்னுரிமை மதிப்பின் அடிப்படையில் தரவு செயலாக்கப்படுகிறது. தரவு கூறுகளை இறங்கு வரிசையில் திறமையாக வரிசைப்படுத்தவும் இது பயன்படுத்தப்படலாம்.



கீழே உள்ள கோடெக் எடுத்துக்காட்டில் விவரிக்கப்பட்டுள்ள இரண்டு முறைகளைப் பயன்படுத்தி 'மேக்ஸ் ஹீப்' உருவாக்கப்படலாம்:



முறை 1: “maxHeapify()” முறையைப் பயன்படுத்தவும்

' maxHeapify() 'முறை ஒரு' உருவாக்குகிறது அதிகபட்ச குவியல் தரவு கட்டமைப்புகளை மாற்றுவதன் மூலம் ஏற்கனவே உள்ள கூறுகளின் தொகுப்பிலிருந்து. மேலும், இந்த முறையானது அசல் வரிசையை மாற்றியமைத்து கூடுதல் நினைவகத்தின் தேவையை குறைக்க உதவுகிறது.





உதாரணமாக, '' உருவாக்க கீழே உள்ள குறியீட்டைப் பார்வையிடவும் அதிகபட்ச குவியல் 'maxHeapify()' முறையைப் பயன்படுத்தி:

java.util.ArrayList இறக்குமதி;
java.util.Collections இறக்குமதி;
java.util.List இறக்குமதி;

பொது வகுப்பு MaxHeapifyExam {
பொது நிலையான வெற்றிட முக்கிய ( லேசான கயிறு [ ] args ) // முக்கிய உருவாக்கம் ( ) முறை
{
பட்டியல் < முழு > testsEle = புதிய ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'அசல் பட்டியல்:' + சோதனைகள் ) ;
maxHeapify ( சோதனைகள் ) ;
System.out.println ( 'தி மேக்ஸ் ஹீப் உருவாக்கியது:' + சோதனைகள் ) ;
}

தனிப்பட்ட நிலையான வெற்றிடத்தை maxHeapify ( பட்டியல் < முழு > சோதனைகள் ) {
int k = testEle.size ( ) ;
க்கான ( int i = k / 2 - 1 ; நான் > = 0 ; நான்-- ) {
குவியலாக்கு ( testsEle, k, i ) ;
}
}

தனிப்பட்ட நிலையான வெற்றிடத்தை heapify ( பட்டியல் < முழு > testsEle, int k, int i ) {
int greater = i;
int leftSide = 2 * நான் + 1 ;
int rightSide = 2 * நான் + 2 ;
என்றால் ( இடது பக்கம் < கே && testEle.get ( இடது பக்கம் ) > testEle.get ( அதிக ) ) {
பெரிய = இடதுபுறம்;
}
என்றால் ( வலது பக்கம் < கே && testEle.get ( வலது பக்கம் ) > testEle.get ( அதிக ) ) {
பெரிய = வலதுபுறம்;
}
என்றால் ( அதிக ! = நான் ) {
Collections.swap ( testsEle, i, பெரியது ) ;
குவியலாக்கு ( testsEle, k, பெரியது ) ;
}
}
}



மேலே உள்ள குறியீட்டின் விளக்கம்:

  • முதலில், பட்டியல் ' சோதனைகள் '' இல் போலி தரவு கூறுகளுடன் துவக்கப்பட்டது முக்கிய() ” முறை மற்றும் கன்சோலில் அச்சிடப்பட்டது.
  • அடுத்து, 'testEle' பட்டியல் 'maxHeapify()' செயல்பாட்டிற்கு அனுப்பப்பட்டது, பின்னர் திரும்பிய பட்டியல் கன்சோலில் காட்டப்படும்.
  • பின்னர், ' maxHeapify() 'முறை தொடங்கப்பட்டது மற்றும் வழங்கப்பட்ட பட்டியலின் அளவு' ஐப் பயன்படுத்தி மீட்டெடுக்கப்படுகிறது அளவு () ”முறை.
  • அடுத்து, '' பயன்படுத்தவும் க்கான குவியல் கட்டமைப்பை அமைக்கவும் மற்றும் ஒவ்வொரு முனையின் நிலையை கணக்கிடவும் வளையம்.
  • இப்போது, ​​பயன்படுத்தவும் ' heapify() ” முறை மற்றும் முறையே “பெரிய”, “இடதுபக்கம்” மற்றும் “வலதுபக்கம்” மாறிகளுக்கு மதிப்புகளை ஒதுக்குவதன் மூலம் “மேல்”, “இடது” மற்றும் “வலது” முனைகளுக்கான நிலையை அமைக்கவும்.
  • அதன் பிறகு, பலவற்றைப் பயன்படுத்தவும் ' என்றால் என்பதை சரிபார்க்க நிபந்தனை அறிக்கைகள் இடது பக்கம் 'முனை' என்பதை விட பெரியது வலது பக்கம் ” முனை மற்றும் நேர்மாறாக. இறுதியில், பெரிய மதிப்பு சேமிக்கப்படும் ' அதிக ” முனை.
  • இறுதியாக, புதிய ' அதிக 'முனை மதிப்பு ஏற்கனவே சேமிக்கப்பட்ட மதிப்புடன்' சரிபார்க்கப்படுகிறது அதிக ” முனை மாறி. மற்றும் இந்த ' இடமாற்று () 'செயல்பாடு அதற்கேற்ப செயல்படுகிறது' இல் மிகப்பெரிய மதிப்பை அமைக்கிறது அதிக ” மாறி.

செயல்படுத்தும் கட்டம் முடிந்த பிறகு:

ஸ்னாப்ஷாட், 'ஐப் பயன்படுத்தி உருவாக்கப்படும் அதிகபட்ச குவியலைக் காட்டுகிறது maxHeapify() ” ஜாவாவில் முறை.

முறை 2: “Collections.reverseOrder()” முறையைப் பயன்படுத்தவும்

' Collections.reverseOrder() 'முறையானது' உருவாக்க ஒரு எளிய மற்றும் சுருக்கமான முறையை வழங்குகிறது அதிகபட்ச குவியல் ” சேகரிப்பை தலைகீழ் வரிசையில் வரிசைப்படுத்துவதன் மூலம். இது குறியீட்டை மீண்டும் பயன்படுத்த அனுமதிக்கிறது மற்றும் தனிப்பயன் செயல்படுத்த வேண்டிய தேவையைத் தவிர்க்கிறது ' குவியலாக்கு 'தர்க்கம், கீழே உள்ள குறியீடு துணுக்கில் காட்டப்பட்டுள்ளது:

java.util.ArrayList இறக்குமதி;
java.util.Collections இறக்குமதி;
java.util.List இறக்குமதி;

பொது வகுப்பு ReverseOrderExample {
பொது நிலையான வெற்றிட முக்கிய ( லேசான கயிறு [ ] args ) // முக்கிய உருவாக்கம் ( ) முறை
{
பட்டியல் < முழு > testsEle = புதிய ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'அசல் பட்டியல்:' + சோதனைகள் ) ;
தொகுப்புகள்.sort ( testsEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'தி மேக்ஸ் ஹீப் உருவாக்கியது:' + சோதனைகள் ) ;
}
}

மேலே உள்ள குறியீட்டின் விளக்கம்:

  • முதலில், 'இறக்குமதி' வரிசைப்பட்டியல் ”,” தொகுப்புகள் 'மற்றும்' பட்டியல் 'ஜாவா கோப்பில் உள்ள பயன்பாடுகள்.
  • பின்னர், '' ஒன்றை உருவாக்கவும் பட்டியல் 'பெயர்' சோதனைகள் ” மற்றும் பட்டியலில் போலி உறுப்புகளைச் செருகவும்.
  • அடுத்து, ' வகைபடுத்து() 'தரவு கூறுகளை ஏறுவரிசையில் வரிசைப்படுத்தவும், பட்டியலை ஒரு அளவுருவாக அனுப்பவும்' முறை பயன்படுத்தப்படுகிறது. Collections.reverseOrder() ”முறை. இது ' சோதனைகள் ” பட்டியல் தலைகீழ் வரிசையில்.

செயல்படுத்தும் கட்டம் முடிந்த பிறகு:

'Collections.reverseOrder()' முறையைப் பயன்படுத்தி 'Max Heap' உருவாக்கப்பட்டு வரிசைப்படுத்தப்பட்டதை ஸ்னாப்ஷாட் காட்டுகிறது.

முடிவுரை

உருவாக்குவதன் மூலம் ' அதிகபட்ச குவியல் ”, பயனர்கள் “maxHeapify()” மற்றும் “Collections.reverseOrder()” முறைகளைப் பயன்படுத்தலாம். அதிகபட்ச உறுப்புக்கான விரைவான அணுகல் மற்றும் வரிசைப்படுத்தப்பட்ட வரிசையின் திறமையான பராமரிப்பை அனுமதிக்கும் விதத்தில் அவை தனிமங்களின் தொகுப்பை நிர்வகிக்கின்றன. இது குறிப்பிட்ட தேவைகள் மற்றும் குவியல் உருவாக்கும் செயல்முறையின் மீது தேவையான கட்டுப்பாட்டின் அளவை மட்டுமே சார்ந்துள்ளது.