Jak korzystać z Max Heap w Javie?

Jak Korzystac Z Max Heap W Javie



Programista może łatwo pobrać maksymalny element, wykorzystując „ Maks. sterta „drzewo binarne”. Podobnie jak w tym drzewie, maksymalny element zawsze znajduje się w górnym węźle drzewa, który jest znany jako „ źródło węzeł. Ponadto oferuje sprawne wstawianie i usuwanie elementów przy zachowaniu uporządkowanego porządku. Ponadto „Max Heap” może z łatwością wykonywać zaplanowane zadania na podstawie ich priorytetu lub innych kryteriów.

W tym artykule wyjaśniono następującą treść:







Jak korzystać z Max Heap w Javie?

A ' Maks. sterta ” jest wykorzystywana jako podstawowa struktura danych do implementacji kolejki priorytetowej. W kolejce priorytetowej dane są przetwarzane na podstawie przypisanej im wartości priorytetu. Można go również wykorzystać do wydajnego sortowania elementów danych w kolejności malejącej.



Maksymalną stertę można wygenerować za pomocą dwóch metod opisanych w poniższym przykładzie kodeka:



Metoda 1: Użyj metody „maxHeapify()”.

maxHeapify() ” metoda generuje „ Maks. sterta ” z istniejącego zbioru elementów poprzez transformację struktur danych. Co więcej, ta metoda pomaga w modyfikowaniu oryginalnej tablicy na miejscu, zmniejszając zapotrzebowanie na dodatkową pamięć.





Na przykład odwiedź poniższy kod, aby wygenerować „ Maks. sterta ” przy użyciu metody „maxHeapify()”:

importuj java.util.ArrayList;
importuj java.util.Collections;
importuj java.util.List;

klasa publiczna MaxHeapifyExam {
public static void main ( Strunowy [ ] argumenty ) // utworzenie głównego ( ) metoda
{
Lista < Liczba całkowita > testyEle = nowa lista tablic <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( „Oryginalna lista:” + testy ) ;
maxHeapify ( TESTY ) ;
System.out.println ( „Maksymalna wygenerowana sterta:” + testy ) ;
}

prywatny statyczny void maxHeapify ( Lista < Liczba całkowita > TESTY ) {
int k = testEle.rozmiar ( ) ;
Do ( int i = k / 2 - 1 ; I > = 0 ; I-- ) {
piętrzyć ( testy Ele, k, i ) ;
}
}

private static void heapify ( Lista < Liczba całkowita > testyEle, int k, int i ) {
int większy = i;
int lewa strona = 2 * ja + 1 ;
int prawa strona = 2 * ja + 2 ;
Jeśli ( lewa strona < k && testEle.get ( lewa strona ) > testEle.get ( większy ) ) {
większy = lewa strona;
}
Jeśli ( prawa strona < k && testEle.get ( prawa strona ) > testEle.get ( większy ) ) {
większy = prawa strona;
}
Jeśli ( większy ! = ja ) {
Kolekcje.swap ( testyEle, i, większy ) ;
piętrzyć ( testy Ele, k, większe ) ;
}
}
}



Wyjaśnienie powyższego kodu:

  • Najpierw lista „ TESTY ” jest inicjowany fikcyjnymi elementami danych w „ główny() ” i wydrukowane na konsoli.
  • Następnie lista „testEle” jest przekazywana do funkcji „maxHeapify()”, a następnie zwrócona lista jest wyświetlana na konsoli.
  • A później ' maxHeapify() ” jest inicjowana, a rozmiar dostarczonej listy jest pobierany przy użyciu metody „ rozmiar() ' metoda.
  • Następnie użyj „ Do ”, aby ustawić strukturę sterty i obliczyć pozycję każdego węzła.
  • Teraz użyj „ kopiowanie() ” i ustaw położenie węzłów „górny”, „lewy” i „prawy”, przypisując wartości odpowiednio zmiennym „większy”, „lewy” i „prawy”.
  • Następnie użyj wielu „ Jeśli ” instrukcje warunkowe, aby sprawdzić, czy „ lewa strona ” węzeł jest większy niż „ prawa strona ” węzeł i odwrotnie. W końcu większa wartość jest zapisywana w „ większy węzeł.
  • Wreszcie nowe „ większy ” wartość węzła jest sprawdzana z już zapisaną wartością w „ większy ” zmienna węzła. A „ zamieniać() ” działa odpowiednio, aby ustawić największą wartość w „ większy ' zmienny.

Po zakończeniu fazy wykonawczej:

Migawka pokazuje, że maksymalna sterta jest generowana przy użyciu „ maxHeapify() ” w Javie.

Metoda 2: Użyj metody „Collections.reverseOrder()”.

Collections.reverseOrder() ” oferuje prostą i zwięzłą metodę generowania „ Maks. sterta ”, sortując kolekcję w odwrotnej kolejności. Pozwala to na ponowne użycie kodu i pozwala uniknąć konieczności implementacji niestandardowego „ piętrzyć ”, jak pokazano w poniższym fragmencie kodu:

importuj java.util.ArrayList;
importuj java.util.Collections;
importuj java.util.List;

klasa publiczna ReverseOrderExample {
public static void main ( Strunowy [ ] argumenty ) // utworzenie głównego ( ) metoda
{
Lista < Liczba całkowita > testyEle = nowa lista tablic <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( „Oryginalna lista:” + testy ) ;
Kolekcje.sort ( testyEle, Collections.reverseOrder ( ) ) ;
System.out.println ( „Maksymalna wygenerowana sterta:” + testy ) ;
}
}

Wyjaśnienie powyższego kodu:

  • Najpierw zaimportuj „ lista tablic ”, „ Kolekcje ' I ' Lista ” narzędzia w pliku Java.
  • Następnie utwórz „ Lista ' o imieniu ' TESTY ” i wstaw fikcyjne elementy na liście.
  • Następnie „ sortować() ” służy do sortowania elementów danych w porządku rosnącym i przekazywania listy jako parametru wzdłuż „ Collections.reverseOrder() ' metoda. Dzięki temu sortowanie „ TESTY ” w odwrotnej kolejności.

Po zakończeniu fazy wykonawczej:

Migawka pokazuje, że „Max Heap” jest generowany i sortowany przy użyciu metody „Collections.reverseOrder()”.

Wniosek

Tworząc „ Maks. sterta ”, użytkownicy mogą korzystać z metod „maxHeapify()” i „Collections.reverseOrder()”. Zarządzają zbiorem elementów w sposób umożliwiający szybki dostęp do maksimum elementu i sprawne utrzymanie uporządkowanego porządku. Zależy to wyłącznie od konkretnych wymagań i wymaganego poziomu kontroli nad procesem tworzenia sterty.