Kolejka priorytetów w strukturze danych: wszystko, co musisz wiedzieć

Opublikowany: 2021-04-07

Spis treści

Wstęp

Kolejki priorytetowe w strukturach danych są ważną formą ADT (abstrakcyjnych typów danych). Każdemu elementowi nadawany jest priorytet, który jest cechą charakterystyczną ich definiowania i porządkowania.

ADTS jest częścią dziedziny nauki o danych, w której struktury danych są używane jako wzorce rozmieszczenia do przechowywania informacji i zarządzania operacjami, takimi jak dostęp, dodawanie, wyszukiwanie i modyfikacja wartości danych. Metodologie stosowane do takiego uporządkowania danych kierują sposobem ich organizacji. Struktury danych określają również kierunek przepływu danych oraz relacje współdzielone w ramach elementów systemu.

Eksperci oszacowali, że do roku 2025 łączna liczba globalnych danych może przekroczyć 175 zetabajtów. Do zarządzania tak dużymi ilościami danych wykorzystuje się struktury danych do wydajnej obsługi dużych baz danych i celów indeksowania. Na etapach programowania wykorzystywane są różnego rodzaju struktury danych, takie jak stosy, kolejki, tablice, sterty itp. Stosy i kolejki są liniową formą struktur danych, ponieważ dane są przechowywane sekwencyjnie, jedna po drugiej. Nie mają rozgałęzień, a każdy element/wartość danych musi być ułożony w linii prostej.

Układ stosów i kolejek

Stos jest zgodny z podejściem LIFO (ostatnie weszło, pierwsze wyszło) w przypadku rozmieszczenia pamięci, podczas gdy kolejka jest zgodna z układem FIFO (pierwsze weszło, pierwsze wyszło). Jest to ważny czynnik umożliwiający rozróżnienie tych dwóch liniowych struktur danych. O ich zastosowaniach decyduje podejście LIFO/FIFO, ponieważ zależą one od ich unikalnego zastosowania obliczeniowego.

Aby dowiedzieć się więcej o data science i przykładach struktur danych, zarejestruj się w PG Diploma in Big Data, organizowanym przez upGrad.com .

W przypadku kolejki FIFO ustala, że ​​gdy do systemu zostanie dodanych wiele elementów, pierwszy dodany element będzie pierwszym, do którego dostęp/usunie się jako pierwszy.

5 podstawowych operacji, które można wykonać w kolejce

1. Enqueue: Ta operacja jest wykonywana, gdy chcemy dodać element do kolejki.

2. Dequeue: Ten operator służy do usuwania elementu z kolejki.

3. IsEmpty: Ta operacja służy do sprawdzenia, czy kolejka jest pusta i nie jest możliwe dalsze usuwanie z kolejki.

4. IsFull: Ten operator sprawdza, czy kolejka jest pełna i nie może obsłużyć dalszych dodawania kolejek.

5. Peek: Operator Peek po prostu przywołuje/wyświetla oczekiwaną wartość/element danych z kolejki bez usuwania ich z przydzielonej sekwencji.

Dowiedz się, dlaczego analiza danych jest ważna i zwiększa wartość firmy dzięki temu informacyjnemu blogowi upGrad.com.

Kolejka priorytetowa w strukturze danych

Kolejki priorytetowe mają dodatkowy priorytet związany z każdym z ich elementów. Nie stosują podejścia FIFO jak tradycyjne kolejki. Zamiast tego kolejka priorytetowa w strukturze danych jest tak zorganizowana, że ​​elementy o „wysokim priorytecie” są obsługiwane przed ich odpowiednikami o „niskim priorytecie”.

Wartość elementu jest często brana pod uwagę podczas przypisywania mu wartości priorytetu. Kolejka priorytetowa różni się od tradycyjnej kolejki tym, że element o najwyższym priorytecie zostanie pobrany jako pierwszy, gdy spróbujemy usunąć następny element z kolejki.

Kolejnym warunkiem wstępnym kolejek priorytetowych jest to, że dane wprowadzane w tych kolejkach muszą być uporządkowane sekwencyjnie. Oznacza to, że poszczególne elementy danych muszą być ze sobą porównywalne w taki sposób, aby ich rozmieszczenie można było uszeregować od mniejszego do większego lub większego do mniejszego. Jest to konieczne, aby przydzielić elementy kolejki z względnymi priorytetami, na podstawie porównania ze sobą.

Zastosowania kolejki priorytetowej w strukturze danych zwykle wiążą się z ich połączeniem z innymi nieuporządkowanymi strukturami danych, takimi jak sterty, tablice, listy połączone lub BST. Sterty zapewniają najbardziej efektywną formę łączenia ze względu na możliwość efektywnego wdrażania kolejek priorytetowych.

Aby dowiedzieć się więcej o powstającej dziedzinie Data Science i jej zastosowaniach w przemyśle wytwórczym, zapoznaj się z tym szczegółowym blogiem upGrad.com.

Operacje obsługiwane w kolejce priorytetowej

Operacje w kolejce priorytetowej pomagają przetwarzać informacje wprowadzane, usuwane, przeglądane i modyfikowane. Operacje te są również przydatne przy przechodzeniu między elementami kolejki. Są to:

1. Is_empty : operacja is_empty sprawdza, czy kolejka zawiera w danej chwili jakiś element.

2. Insert_with_priority: Ta operacja dodaje element do kolejki wraz z wartością priorytetu, która musi być z nim powiązana.

3. Pull_highest_priority_element: Ta operacja usuwa element o najwyższym priorytecie z kolejki, jednocześnie zwracając wartość tego elementu.

4. Peek: Operacja Peek służy do „znajdź-maksymalnie” lub „znajdź-minimum”, w zależności od oczekiwanych wyników. Ta operacja nie usuwa elementu max/min i tylko go zwraca.

Korzyść z używania stert dla kolejki priorytetów w strukturze danych

Wydajność O(log n) jest obserwowana dla operacji wstawiania i usuwania, gdy kolejki priorytetowe są oparte na stercie. Poprawia to wydajność, a funkcja O(n) jest zbudowana z zestawu elementów „n”. Sterty parowania i sterty Fibonacciego zapewniają lepsze granice dla operacji kolejki priorytetowej.

Aby dogłębnie poznać kolejkę priorytetów w strukturze danych i wiele innych ważnych pojęć związanych z dziedziną programowania, zapisz się na kurs online w upGrad .

Kolejka priorytetowa i sortowanie elementów

Uwzględniając złożoność obliczeniową, kolejki priorytetowe odpowiadają algorytmom sortowania ze względu na ich nieodłączną właściwość. Na przykład musimy zebrać wszystkie elementy, które wymagają sortowania, a następnie umieścić je w kolejce priorytetowej.

Następnie, jeśli usuniemy elementy sekwencyjnie, wynikiem będzie posortowana kolejność elementów. Heapsort, Smoothsort, Selection Sort, Insertion Sort i Tree sort to nazwy niektórych algorytmów sortowania, które mają równoważną korelację z kolejką priorytetową w strukturach danych.

Zastosowania kolejek priorytetowych

Kolejki priorytetowe w strukturze danych są zwykle implementowane w połączeniu ze strukturami danych Heap. Wykorzystywane są w symulacjach do sekwencjonowania, sortowania i śledzenia niezbadanych tras. Dwa typy kolejek priorytetowych: Rosnąco i Malejąco mają swój własny zestaw zastosowań. Niektóre z tych aplikacji to:

  • Zarządzanie przepustowością
  • Symulacja zdarzeń dyskretnych
  • Algorytm Dijkstry
  • Kodowanie Huffmana
  • Algorytm wyszukiwania „najlepszy-pierwszy”
  • Algorytm triangulacji ROAM
  • Algorytm Prima dla minimalnego drzewa opinającego

Wniosek

Na dzień dzisiejszy około 5 miliardów konsumentów jest bezpośrednio i pośrednio połączonych z danymi. Do 2025 roku ponad 6 miliardów ludzi będzie podłączonych do dużych zbiorów danych. IDC przewiduje 10-krotny wzrost ilości danych i projektuje wysokie wymagania dla naukowców zajmujących się danymi. Kolejka priorytetów w strukturze danych jest ważną koncepcją dla programistów i analityków danych ze względu na ich ścisłą korelację i zastosowanie ze strukturami danych sterty.

Jeśli jesteś zainteresowany nauką o danych, sprawdź IIIT-B i upGrad's PG Diploma in Data Science, który jest stworzony dla pracujących profesjonalistów i oferuje ponad 10 studiów przypadków i projektów, praktyczne warsztaty praktyczne, mentoring z ekspertami z branży, 1- on-1 z mentorami branżowymi, ponad 400 godzin nauki i pomocy w pracy z najlepszymi firmami.

Zapisanie się na internetowy kurs międzynarodowych studiów magisterskich z informatyki na Uniwersytecie Liverpool John Moores lub kurs PGD w zakresie rozwoju oprogramowania Full Stack , DevOps itp. może poprawić Twoje perspektywy zatrudnienia jako programisty.

Ucz się online kursów nauki o danych z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Opisz zastosowania Priority Queue?

Kolejka priorytetowa jest stosowana w wielu algorytmach, a także w kilku rzeczywistych aplikacjach. Niektóre z nich opisano poniżej:
1. Algorytm Huffmana: Drzewo Huffmana wygenerowane w algorytmie kompresji danych Huffmana wykorzystuje kolejkę priorytetową do implementacji drzewa.
2. Algorytm Prima: Algorytm ten wykorzystuje kolejkę priorytetową, aby przyspieszyć proces dokładnej funkcji minimalnej.
3. Algorytm Dijkstry: Algorytm ten wykorzystuje stertę lub kolejkę priorytetową do wyodrębnienia wartości minimalnej. Kolejka priorytetowa sprawia, że ​​proces uzyskiwania minimum jest całkiem wydajny.
4. System operacyjny: Kolejka priorytetowa jest używana w kilku procesach systemów operacyjnych, takich jak równoważenie obciążenia i obsługa przerwań.

Rozróżnić stos i kolejkę?

Stos i kolejka są liniowymi strukturami danych. Poniżej przedstawiono kluczowe różnice między obiema strukturami danych.
Stack - Elementy są obsługiwane zgodnie z zasadą LIFO, tzn. element włożony jako pierwszy jest elementem usuwanym na końcu. Elementy można wkładać lub wyjmować tylko z jednego końca zwanego górą. Operacja wstawiania jest również nazywana operacją pchania.
Kolejka — elementy są obsługiwane zgodnie z zasadą FIFO, tzn. element wstawiony jako pierwszy jest elementem usuwanym jako pierwszy. Operacja wstawiania jest również nazywana operacją kolejkowania.

Jak można zaimplementować kolejkę priorytetową za pomocą tablicy?

Aby zaimplementować kolejkę priorytetową przy użyciu tablicy, tworzona jest struktura do przechowywania wartości i priorytetu elementu, a następnie tworzona jest tablica tej struktury do przechowywania elementów. W realizacji tej zaangażowane są następujące operacje:
enqueue() — Znana również jako proces wstawiania, ta funkcja służy do wstawiania elementów do kolejki.
peek() — ta funkcja przemierzy tablicę, aby zwrócić element o najwyższym priorytecie. Jeśli znajdzie dwa elementy o tym samym priorytecie, zwraca element o najwyższej wartości spośród nich.
dequeue() — funkcja dequeue() służy do przesunięcia wszystkich elementów o 1 pozycję na lewo od elementu zwracanego przez funkcję peek() i zmniejsza rozmiar kolejki.