Następnego dnia przybyły te same trzy osoby. Tym razem twój przyjaciel jest w środku. Postanowiłeś mu służyć najpierw, wyprzedzając osobę, która była pierwsza, potem trzecia osoba, a wreszcie pierwsza osoba. Tak więc, według robota, pozycja 2 ma największy priorytet, a następnie pozycja 3.
Trzeciego dnia twój przyjaciel jest pierwszy i wykonujesz pierwszą obsługę. Wniosek kogokolwiek i robota polega na tym, że priorytet zależy od tego, kto jest zainteresowany i od pozycji każdej osoby. Uwaga: W prawdziwym życiu priorytet nie zawsze zależy od pierwszego shome_first obsługiwanego.
W programowaniu kolejką binarną priorytetową jest miejsce, w którym pierwszy element ma największy priorytet. Trzeci pozycja może mieć większy priorytet, a drugi pozycja, trzeci priorytet. Kolejki priorytetowe mają charakter binarny. Uwaga: Pierwszy element jest zawsze największym priorytetem w kolejce priorytetowej. Może się również zdarzyć, że drugi element ma większy priorytet, a trzecia pozycja ma trzeci priorytet. W definicji kolejki priorytetowej priorytety drugiego i trzeciego elementu mogą nie być w kolejności. Różnica ta trwa w kolejce do ostatniego elementu, co może nie być pozycją najkroczniejszą. Będzie to jednak wśród najniższych priorytetów. Ten częściowy sort jest również znany jako częściowe zamówienie. Tak więc kolejką priorytetową jest kolejka częściowego uporządkowania, w której priorytet nie jest obsługiwany po raz pierwszy, choć taka jest ogólna zasada.
W radzeniu sobie z tablicą, obserwacja pierwszego klimatu jest pierwsza in_first-out, napisana jako FIFO. W obliczeniach kolejka jest FIFO, podczas gdy kolejka priorytetowa jest częściową FIFO, ponieważ w miarę upadku kolejki niektóre elementy mają priorytety większe niż ich bliscy poprzednicy. Wraz ze wzrostem kolejki priorytetowej, odległość między takimi poprzednikami i wyższymi priorytetami wzrasta.
Kolejka priorytetowa jest zaimplementowana jako struktura danych sterty. Następne pytanie brzmi: co to za stos? Istnieje maksymalna sterta i minimalna stos, które zostaną szczegółowo omówione poniżej.
Treść artykułu
Struktura danych sterty
Jest maksymalnie i jest minime-heap. Z Max-heap pierwsza pozycja jest największą wartością. W miarę opadania kolejki wartości nadal zmniejszają się, rosną i ogólnie zmniejszają. W przypadku min-heap pierwsza pozycja ma najmniejszą wartość. W miarę upływu kolejki wartości nadal rosną i zmniejszają się i ogólnie rosną. Wartości sterty można przechowywać w tablicy.
Sterta binarna jest miejscem, w którym węzeł (przedmiot) ma dwoje dzieci. Pierwszym dzieckiem jest lewe dziecko, a drugie dziecko jest właściwym dzieckiem. Wartość dowolnego węzła nazywa się kluczem.
Max-heap
Poniższa lista to maksymalny heap, który jest już częściowo uporządkowany i nie wymaga dalszego zamówienia:
89, 85, 87, 84, 82, 79, 73, 80, 81 ,, 65, 6989 to pierwsza wartość przy indeksie 0. Jest to węzeł główny (główny nadrzędny). Jest to największa wartość spośród wszystkich wartości. Jego pierwsze dziecko (85) jest w indeksie 1, którego indeks jest równy 2 (0) + 1, gdzie 0 jest wskaźnikiem rodzica. Jego drugie dziecko (87) znajduje się w indeksie 2, który jest równy 2 (0) + 2, gdzie 0 jest wskaźnikiem rodzica.
85 jest w indeksie 1. To rodzic. Jego pierwsze dziecko (84) znajduje się w indeksie 3, który jest równy 2 (1) + 1, gdzie 1 jest wskaźnikiem rodzica. Jego drugie dziecko (82) znajduje się w indeksie 4, który jest równy 2 (1) + 2, gdzie 1 jest wskaźnikiem rodzica.
87 znajduje się w indeksie 2. To rodzic. Jego pierwsze dziecko (79) znajduje się w indeksie 5, który jest równy 2 (2) + 1, gdzie 2 jest wskaźnikiem rodzica. Jego drugie dziecko (73) znajduje się w indeksie 6, który jest równy 2 (2) + 2, gdzie 2 jest wskaźnikiem rodzica.
Zasadniczo, gdy zliczanie indeksu zaczyna się od 0, niech reprezentuję wskaźnik rodzica tablicy; I tak, lewe (pierwsze) dziecko rodzica przy indeksie I znajduje się w indeksie 2i + 1; a jego prawe (drugie) dziecko jest w indeksie 2i + 2. Niektóre komórki pod koniec macierzy mogą być puste; Nie mogą mieć wartości.
Poprzednia lista jest dobrym przykładem treści kolejki priorytetowej po zakończeniu wszystkich elementów. Jeśli pierwszy element zostanie usunięty, reszta zostanie poddana konfiguracji wartości, tworząc nową kolejkę priorytetową. W ten sposób usunięcie wszystkich elementów z góry wyglądałoby tak, jakby wszystkie elementy zostały poprawnie posortowane. Elementy można nadal uzyskać tak, jak są, w częściowej kolejności, bez usuwania żadnego elementu.
Min-heap
Min-heap to odwrotność maksymalnej.
Priorytetowa kolejka w Java właściwa
Java ma klasę o nazwie priorytetQueue, dla priorytetu-Queue. Ma wiele konstruktorów i metod. Tylko trzy konstruktory i bardziej odpowiednie metody są wyjaśnione poniżej:
Budowa Java kolejki priorytetowej
Publiczne priorytetowo -eue ()
To tworzy kolejkę priorytetową bez żadnego elementu. Klasa, priorytetowo -suie, jest w Javie.Util.* Pakiet, który należy zaimportować. Poniższy segment kodu tworzy puste priorytet, a następnie dodaje wartości nieporozumienia (nawet częściowo posortowane) do kolejki:
Kolejka priorytetowaTe liczby są liczbami całkowitymi. Pochodzą z częściowo posortowanej listy podanej powyżej, ale obecnie są całkowicie nieporządkowane, gdy są wprowadzane. Elementy w PQ są teraz częściowo sortowane zgodnie z definicją kolejki priorytetowej w Javie.
Priorityqueue public (priorytetowe C)
Stwarza to priorytetowo z innej priorytetu. Poniższy segment kodu to ilustruje:
Kolejka priorytetowaPQ1 został utworzony z PQ. Obecnie ma to samo częściowe zamówienie i PQ.
Trzecia metoda konstruktora jest zilustrowana poniżej.
Metody Java kolejki priorytetowej
Public int size ()
Zwraca to rozmiar listy i nie zawiera pustych komórek, jak pokazano w następującym kodzie:
Kolejka priorytetowaWyjście to 11.
Public Void Foreach (działanie konsumenckie)
Ta metoda musi być używana w specjalny sposób do kopiowania wszystkich wartości w kolejce priorytetowej w częściowo posortowanej formie. Poniższy program ilustruje to:
Kolejka priorytetowaZwróć uwagę na sposób, w jaki kod w nawiasach został wykonany. Pozycja jest zmienną fikcyjną, która reprezentuje każdy element w kolejce. Zwróć uwagę na użycie operatora strzałek. Wyjście to:
65 69 84 79 73 87 89 80 81 82 85Wyjście jest prawidłowe w częściowej kolejności, ale w kolejności rosnącej. Niekoniecznie jest to odwrotna kolejność podana powyżej ze względu na sposób, w jaki wartości zostały zawarte na liście. Oznacza to, że metoda foreach zwraca listę jako minister. Aby zwrócić listę w kolejności malejącej, użyj następującego konstruktora:
Public PriorityQueue (komparatorka komparatora)
To jest konstruktor. Poniższy kod pokazuje, jak go używać:
Kolejka priorytetowaX, y są zmiennymi fiknymi reprezentującymi mniejsze i mniej wartości. Zauważ, że w pierwszych nawiasach dla x i y, x pojawia się przed y. W drugim nawiasach Y pojawia się przed x. Wyjście to:
89 85 87 80 82 69 84 65 79 73 81Public Boolean Add (e e)
Liczbę elementów w kolejce priorytetowej można zwiększyć jeden po drugim. Ta metoda powraca, jeśli nastąpiła zmiana; i w przeciwnym razie fałsz. Poniższy kod dodaje dwunastą wartość praktyczną do kolejki:
Kolejka priorytetowaWartość dodana wzrośnie w górę kolejki, aby pasować do jej odpowiedniej pozycji, co prowadzi do pewnej reakcji pozycji elementów. Wyjście to:
89 85 87 80 82 70 84 65 79 73 81 69Publiczne ankiety ()
Ta metoda pobiera i usuwa głowę kolejki; lub zwraca null, jeśli ta kolejka jest pusta. Za każdym razem, gdy głowa jest usuwana, kolejka priorytetowa dostosowuje się do nowej prawowitej głowy. Jeśli głowa będzie nadal usuwana, zwrócone wartości będą w pełnej sortowanej kolejności. Poniższy kod to ilustruje:
Kolejka priorytetowaDane wyjściowe z komputera autora to:
89 87 85 84 82 81 80 79 73 70 69 65 Wyjątek w wątku „Main” Java.Util.ConcurrentModificationExceptionNależy zauważyć, że wyjście jest z pełnej sortowanej kolejności. Ten konkretny kod nie mógł złapać wrzucenia wyjątku. Ten problem pozostaje jako ćwiczenie badawcze dla czytelnika.
Wniosek
Kolejka priorytetowa w Javie to kolejka, w której elementy mają priorytet niż FIFO. Kolejką priorytetową jest zazwyczaj stos, który może być maksymalny lub minimalny. Wartości muszą być tego samego typu. Są przechowywane w kolejce w formacie sterty (częściowe zamówienie). Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź inne artykuły do nośników Linuksa, aby uzyskać wskazówki i samouczki.